首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GStreamer UDP发送/接收一行程序

GStreamer UDP发送/接收一行程序
EN

Stack Overflow用户
提问于 2012-08-17 07:11:24
回答 1查看 13.7K关注 0票数 2

我正在尝试使用GStreamer在UDP上传输v4l2src。发送部分(显然)是正常的,但接收部分缺少一些东西。

这些是实际的代码行:

发送:gst-launch-0.10 -v gstrtpbin name=rtpbin v4l2src device=/dev/video0 ! 'video/x-raw-yuv, width=(int)320, height=(int)240, framerate=(fraction)15/1' ! rtpvrawpay ! rtpbin.send_rtp_sink_0 rtpbin.send_rtp_src_0 ! multiudpsink clients="127.0.0.1:9996" rtpbin.send_rtcp_src_0 ! multiudpsink clients="127.0.0.1:9997" sync=false async=false udpsrc port=10000 ! rtpbin.recv_rtcp_sink_0

接收:gst-launch-0.10 -v gstrtpbin name=rtpbin udpsrc caps="application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)RAW, sampling=(string)YUV, depth=(string)8, width=(string)320, height=(string)120, colorimetry=(string)SMPTE240M" port=9996 ! rtpbin.recv_rtp_sink_0 rtpbin. ! rtpvrawdepay ! video/x-raw-yuv,framerate=15/1 ! xvimagesink udpsrc port=9997 ! rtpbin.recv_rtcp_sink_0 rtpbin.send_rtcp_src_0 ! multiudpsink clients="127.0.0.1:10000" sync=false async=false

我遗漏了什么?

问候

编辑:

一些盖子丢失了,所以我添加了它们,现在接收器不会崩溃,只是空闲而没有显示任何东西。

发送:gst-launch-0.10 -v gstrtpbin name=rtpbin v4l2src device=/dev/video0 ! 'video/x-raw-yuv, width=(int)320, height=(int)240, framerate=(fraction)15/1' ! rtpvrawpay ! rtpbin.send_rtp_sink_0 rtpbin.send_rtp_src_0 ! multiudpsink clients="127.0.0.1:9996" rtpbin.send_rtcp_src_0 ! multiudpsink clients="127.0.0.1:9997" sync=false async=false udpsrc port=10000 ! rtpbin.recv_rtcp_sink_0

接收:gst-launch-0.10 -v gstrtpbin name=rtpbin udpsrc caps="application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)RAW, sampling=(string)YCbCr-4:2:0, depth=(string)8, width=(string)320, height=(string)240, colorimetry=(string)SMPTE240M, ssrc=(uint)956768427, payload=(int)96, clock-base=(uint)1415613946, seqnum-base=(uint)35008" port=9996 ! rtpbin.recv_rtp_sink_0 rtpbin. ! rtpvrawdepay ! video/x-raw-yuv,framerate=15/1 ! xvimagesink udpsrc port=9997 ! rtpbin.recv_rtcp_sink_0 rtpbin.send_rtcp_src_0 ! multiudpsink clients="127.0.0.1:10000" sync=false async=false

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-08-20 18:24:42

你正在犯的错误是,你假设你的v4l2src将会给出什么。如果您想要特定的帧速率高度和宽度,则需要使用视频缩放和视频速率过滤器

代码语言:javascript
复制
gst-launch-0.10 -v gstrtpbin name=rtpbin v4l2src device=/dev/video0 ! videorate ! videoscale ! ffmpegcolorspace ! 'video/x-raw-yuv, width=(int)320, height=(int)240, framerate=(fraction)15/1' !  rtpvrawpay ! rtpbin.send_rtp_sink_0 rtpbin.send_rtp_src_0 ! multiudpsink clients="127.0.0.1:9996" rtpbin.send_rtcp_src_0 ! multiudpsink clients="127.0.0.1:9997" sync=false async=false udpsrc port=10000 ! rtpbin.recv_rtcp_sink_0

这将打印您需要在接收端使用的大写字母。例如:对我来说这是打印出来的。/GstPipeline:pipeline0/GstRtpBin:rtpbin.GstGhostPad:send_rtp_src_0.GstProxyPad:proxypad2: caps =应用程序/x-rtp,media=(字符串)视频,时钟速率=(Int)90000,编码名称=(字符串)RAW,sampling=(字符串)YCbCr-4:4:4,depth=(字符串)8,width=(字符串)320,height=(字符串)240,colorimetry=(字符串)SMPTE240M,ssrc=(uint)1825678493,payload=(int)96,clock-base=(uint)4068866987,seqnum-base=(uint)24582

在接收器管道上使用以下代码:

代码语言:javascript
复制
GST_DEBUG=2 gst-launch  udpsrc caps="application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)RAW, sampling=(string)YCbCr-4:4:4, depth=(string)8, width=(string)320, height=(string)240, colorimetry=(string)SMPTE240M, ssrc=(uint)1825678493, payload=(int)96, clock-base=(uint)4068866987, seqnum-base=(uint)24582" port=9996 ! queue ! rtpvrawdepay  ! queue ! ffmpegcolorspace ! autovideosink

这里的接收方无法知道确切的上限,因此必须从发送方复制粘贴。如果你想要一个不同的采样,在发送器上使用ffmpegcolorspace空间,并在它之后设置适当的上限。(与宽度、高度和帧率一起)

上面的管道对我来说工作得很好。请记住,src和其他一些参数在每次运行src时都会有所不同。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11996715

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档