udp gstreamer multicast

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