如何使用udp gstreamer传输h264

时间:2016-09-16 19:16:10

标签: udp gstreamer multicast

我尝试使用h264流式传输视频。 Source是Axis相机。我设法使用多播传输jpeg,但没有使用h264。

使用jpeg我使用以下命令:

gst-launch-1.0 udpsrc uri=udp://239.194.0.177:1026 ! application/x-rtp,encoding-name=JPEG,payload=26 ! rtpjpegdepay ! jpegdec ! autovideosink

我尝试传输h264,但它失败了,使用了以下命令:

gst-launch-1.0 -v udpsrc host=239.194.0.177 port=1026 ! rtph264depay ! ffdec_h264 ! xvimagesink

我收到以下错误:

ERROR: pipeline could not be constructed: no element "udpsrc".

这一行:

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

我没有收到任何错误,但没有视频流,这是在终端打印的:

Setting pipeline to PAUSED ...
Pipeline is live and does not need PREROLL ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock

我尝试了以下页面中的命令:

Stream H.264 video over rtp using 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

但无法让它发挥作用。

在verbos模式下运行时,我会获得更多信息。

命令:

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

输出:

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"

如何使用gstreamer通过多播传输H264?

1 个答案:

答案 0 :(得分:2)

评论太久了 - 而且因为没有人回答将这个想法草案作为答案发表。

关于没有元素udpsrc的第一个错误真的很奇怪。但我认为它抱怨缺少uri参数。你用的是什么版本?我没有udpsrc的主机参数..

在第三个管道中以h264parse结束 - 这是错字吗?你需要解码h264 ..不只是解析它:

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

同时添加一些日志(如果太长则可能使用pastebin)并运行GST_DEBUG=3 gst-launch-1.0 ....左右。

这是什么意思:

  

但无法让它发挥作用

这并不是说太多;)

通常在使用rtp时,您需要提供所有功能,否则可能无法链接或播放..

也许尝试使用uridecodebin?不确定它是否是最好的主意:

gst-launch-1.0 uridecodebin uri=udp://etcetc:port ! videoconvert ! autovideosink

如果你有任何新的信息/问题,请将它们添加为更新以使图片整体(对于其他人也是如此......)

HTH