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?
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 enbaseline
omain
, 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 filtroh264_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:
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.