es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Usa el comando ffmpeg para transmitir un stream de rtsp, no contiene cuadros SPS y PPS.

Utilizo Python y opencv-python para capturar fotogramas de video, luego utilizo el comando ffmpeg para transmitir flujo rtsp con tubería. Puedo reproducir el flujo rtsp a través de gstreamer y vlc. Sin embargo, un dispositivo de visualización no puede decodificar y reproducir el flujo rtsp porque no puede recibir los marcos SPS y PPS. Usé wireshark para capturar el flujo, encontré que no envía marcos SPS y PPS, solo envía marcos IDR.

Los códigos clave son los siguientes.

<h1> Comando ffmpeg </h1>

<p>command = ['ffmpeg',
           '-re',
           '-y',
           '-f', 'rawvideo',
           '-vcodec', 'rawvideo',
           '-pix<em>fmt', 'bgr24',
           '-s', "{}x{}".format(width, height),
           '-r', str(fps),
           '-i', '-',
           '-c:v', 'libx264',
           '-preset', 'ultrafast',
           '-f', 'rtsp',
           '-flags', 'local</em>headers', 
           '-rtsp<em>transport', 'tcp',
           '-muxdelay', '0.1', 
           rtsp</em>url]</p>

<p>p = sp.Popen(command, stdin=sp.PIPE)</p>

<p>while (cap.isOpened()):
    ret, frame = cap.read()
    if not ret:
        cap = cv2.VideoCapture(video_path)
        continue
    p.stdin.write(frame.tobytes()</p>

¿Puede ser que falte alguna opción del comando ffmpeg?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Sí, es posible que haya pasado por alto algunas opciones en el comando de ffmpeg que son necesarias para enviar los marcos SPS y PPS junto con los marcos IDR. Una de estas opciones es -vprofile, que se puede utilizar para establecer el perfil H.264 que se va a utilizar. Puede establecer el perfil en baseline o main, lo que incluirá los marcos SPS y PPS. Otra opción es -vbsf, que se puede utilizar para agregar filtros de flujo de bits a la transmisión de salida. El filtro h264_mp4toannexb se puede utilizar para convertir el flujo H.264 al formato Annex B que incluye los encabezados requeridos.

    Puede modificar su comando de ffmpeg de la siguiente manera para incluir estas opciones:

    comando = ['ffmpeg',
               '-re',
               '-y',
               '-f', 'rawvideo',
               '-vcodec', 'rawvideo',
               '-pix_fmt', 'bgr24',
               '-s', "{}x{}".format(ancho, altura),
               '-r', str(fps),
               '-i', '-',
               '-c:v', 'libx264',
               '-preset', 'ultrafast',
               '-vprofile', 'baseline',
               '-f', 'rtsp',
               '-flags', 'local_headers',
               '-rtsp_transport', 'tcp',
               '-muxdelay', '0.1',
               '-vbsf', 'h264_mp4toannexb',
               rtsp_url]
    

    Intente ejecutar este comando modificado y verifique si resuelve el problema de que el dispositivo de visualización no pueda decodificar y reproducir el flujo rtsp.

Comments are closed.