Cómo transmitir h264 con udp gstreamer
multicast (1)
Estoy intentando transmitir un video con h264. La fuente es una cámara de Axis. Logré transmitir jpeg con multidifusión pero no h264.
Con jpeg usé el siguiente comando:
gst-launch-1.0 udpsrc uri=udp://239.194.0.177:1026 ! application/x-rtp,encoding-name=JPEG,payload=26 ! rtpjpegdepay ! jpegdec ! autovideosink
Traté de transmitir h264 pero falla, usado siguiendo el siguiente comando:
gst-launch-1.0 -v udpsrc host=239.194.0.177 port=1026 ! rtph264depay ! ffdec_h264 ! xvimagesink
Obtuve el siguiente error:
ERROR: pipeline could not be constructed: no element "udpsrc".
Con esta línea:
gst-launch-1.0 udpsrc uri=udp://239.194.0.177:1026 ! application/x-rtp,media=video,clock-rate=90000,encoding-name=H264 ! rtph264depay ! h264parse
No recibí ningún error, pero no se transmitió ningún video y este se imprimió en la terminal:
Setting pipeline to PAUSED ...
Pipeline is live and does not need PREROLL ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock
Intenté los comandos de las siguientes páginas:
Transmita video H.264 sobre rtp usando gstreamer
https://developer.ridgerun.com/wiki/index.php/Using_UDP_Multicast_with_GStreamer
http://labs.isee.biz/index.php/Example_GStreamer_Pipelines#H.264_RTP_Streaming
Pero no pude hacer que funcione.
Cuando corro en el modo verbos me sale más información.
Mando:
gst-launch-1.0 -v udpsrc uri=udp://239.194.0.177:1026 ! application/x-rtp, media=video, payload=96, encoding-name=H264 ! rtph264depay ! avdec_h264 ! videoconvert ! fakesink
Salida:
Setting pipeline to PAUSED ...
Pipeline is live and does not need PREROLL ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock
/GstPipeline:pipeline0/GstCapsFilter:capsfilter0.GstPad:src: caps = "application/x-rtp/,/ media/=/(string/)video/,/ payload/=/(int/)96/,/ encoding-name/=/(string/)H264/,/ clock-rate/=/(int/)90000"
/GstPipeline:pipeline0/GstRtpH264Depay:rtph264depay0.GstPad:sink: caps = "application/x-rtp/,/ media/=/(string/)video/,/ payload/=/(int/)96/,/ encoding-name/=/(string/)H264/,/ clock-rate/=/(int/)90000"
¿Cómo puedo transmitir H264 a través de multidifusión con gstreamer?
Demasiado tiempo para hacer comentarios, y dado que nadie está respondiendo publicar este borrador de pensamientos como respuesta.
El primer error sobre ningún elemento udpsrc es realmente extraño. Pero creo que se queja de perder el parámetro uri. Qué versión estás usando? No tengo el parámetro de host para udpsrc ..
En la tercera tubería, termina con h264parse. ¿Este es un error tipográfico? necesitas decodificar el h264 ... no solo analizarlo:
gst-launch-1.0 udpsrc uri=udp://239.194.0.177:1026 ! application/x-rtp,media=video,clock-rate=90000,encoding-name=H264 ! rtph264depay ! h264parse ! avdec_h264 ! videoconvert ! autovideosink
También agregue algunos registros (quizás con pastebin si es demasiado largo) ejecutando GST_DEBUG=3 gst-launch-1.0 ....
o menos.
Qué significa eso:
Pero no pude hacer que funcione
Esto no dice demasiado;)
Por lo general, cuando trabajas con rtp necesitas proporcionar realmente todas las capacidades, de lo contrario, no puede vincularse ni reproducirse en absoluto.
Tal vez intente con uridecodebin? No estoy seguro si es la mejor idea:
gst-launch-1.0 uridecodebin uri = udp: // etcetc: puerto! videoconvert! autovideosink
Si obtiene nuevas informaciones / preguntas, agréguelas como actualizaciones para que la imagen sea completa (para otros también).
HTH