【问题标题】:How to stream h264 with udp gstreamer如何使用 udp gstreamer 流式传输 h264
【发布时间】:2016-09-16 19:16:09
【问题描述】:

我正在尝试使用 h264 流式传输视频。源是轴相机。我设法通过多播而不是 h264 流式传输 jpeg。

对于 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

但无法让它工作。

在详细模式下运行时,我会得到更多信息。

命令:

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?

【问题讨论】:

  • 尝试在详细模式下使用 -v gst-launch-1.0 udpsrc uri=udp://239.194.0.177:1026 !应用程序/x-rtp,媒体=视频,时钟速率=90000,编码名称=H264! rtph264depay! h264解析! fakesink - 尝试在管道中的每个元素之后添加 fakesink,以确定哪个元素导致了问题。

标签: udp gstreamer multicast


【解决方案1】:

评论太长了 - 因为没有人回答,所以发布这个想法草稿作为答案..

关于 no element 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

还可以添加一些运行GST_DEBUG=3 gst-launch-1.0 .... 左右的日志(如果太长,可能使用pastebin)。

什么意思:

但无法让它工作

这并没有说太多;)

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

也许试试 uridecodebin?不确定这是否是最好的主意:

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

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

HTH

【讨论】:

  • 尝试了您的命令,但没有打开流,与以前相同的消息,即在新时钟之后没有任何事情发生:GstSystemClock 并且没有错误。还尝试在每个元素之后添加 fakesink,但没有得到任何结果。这些命令似乎没有任何问题,但由于某种原因,没有使用 h264 打开包含流的窗口。我仔细检查了相机是否正在使用 h264 发送多播并连接网络以验证数据包是否实际发送。所以我现在发送数据包。也没有打印使用 GST_DEBUG=3 时的额外信息。
  • @S4M1R hm 我发现了两件奇怪的事情,首先是no such pad 'sink' in element "udpsrc0",这意味着您可能在代码中请求没有意义的 udpsrc 接收器垫(它只有 src 垫)..第二个我见最后 标记待定 DISCONT .. 这意味着一些数据为时已晚
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-24
  • 2013-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多