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

Streaming GStreamer UDP发送/接收一行程序,streaming,udp,gstreamer,Streaming,Udp,Gstreamer,我正在尝试使用GStreamer通过UDP传输v4l2src。 发送部分(显然)正常,但接收部分缺少一些内容 这些是实际的线路: 发送: gst-launch-0.10-v gstrtpbin name=rtpbin v4l2src device=/dev/video0!'视频/x-raw-yuv,宽度=(整数)320,高度=(整数)240,帧速率=(分数)15/1'!rtpvrawpay!rtpbin.send\u rtp\u sink\u 0 rtpbin.send\u rtp\u src

我正在尝试使用GStreamer通过UDP传输
v4l2src
。 发送部分(显然)正常,但接收部分缺少一些内容

这些是实际的线路:

发送:

gst-launch-0.10-v gstrtpbin name=rtpbin v4l2src device=/dev/video0!'视频/x-raw-yuv,宽度=(整数)320,高度=(整数)240,帧速率=(分数)15/1'!rtpvrawpay!rtpbin.send\u rtp\u sink\u 0 rtpbin.send\u rtp\u src\u 0!multiudpsink clients=“127.0.0.1:9996”rtpbin.send\u rtcp\u src\u 0!multiudpsink clients=“127.0.0.1:9997”sync=false async=false udpsrc port=10000!rtpbin.recv\u rtcp\u接收器\u 0

收到:

gst-launch-0.10-v gstrtpbin name=rtpbin udpsrc caps=“应用程序/x-rtp,媒体=(字符串)视频,时钟速率=(int)90000,编码名称=(字符串)原始,采样=(字符串)YUV,深度=(字符串)8,宽度=(字符串)320,高度=(字符串)120,色度=(字符串)SMPTE240M”端口=9996!rtpbin.recv_rtp_sink_0 rtpbin!rtpvrawdepay!视频/x-raw-yuv,帧速率=15/1!xImageSink udpsrc端口=9997!rtpbin.recv_rtcp_sink_0 rtpbin.send_rtcp_src_0!multiudpsink clients=“127.0.0.1:10000”同步=false异步=false

我错过了什么

问候

编辑:

一些盖子不见了,所以我加上了它们,现在接收器没有崩溃,只是空转,没有显示任何东西

发送:

gst-launch-0.10-v gstrtpbin name=rtpbin v4l2src device=/dev/video0!'视频/x-raw-yuv,宽度=(整数)320,高度=(整数)240,帧速率=(分数)15/1'!rtpvrawpay!rtpbin.send\u rtp\u sink\u 0 rtpbin.send\u rtp\u src\u 0!multiudpsink clients=“127.0.0.1:9996”rtpbin.send\u rtcp\u src\u 0!multiudpsink clients=“127.0.0.1:9997”sync=false async=false udpsrc port=10000!rtpbin.recv\u rtcp\u接收器\u 0

收到:

gst-launch-0.10-v gstrtpbin name=rtpbin udpsrc caps=“应用程序/x-rtp,媒体=(字符串)视频,时钟速率=(int)90000,编码名称=(字符串)原始,采样=(字符串)YCbCr-4:2:0,深度=(字符串)8,宽度=(字符串)320,高度=(字符串)240,色度=(字符串)SMPTE240M,ssrc=(uint)956768427,有效负载=(int)96,时钟基=(uint)1415613946,数字基=(亮片)35008英寸端口=9996!rtpbin.recv_rtp_sink_0 rtpbin!rtpvrawdepay!视频/x-raw-yuv,帧速率=15/1!xImageSink udpsrc端口=9997!rtpbin.recv_rtcp_sink_0 rtpbin.send_rtcp_src_0!multiudpsink clients=“127.0.0.1:10000”同步=false异步=false

您犯的错误是,您假设的是v4l2src将给出什么。如果需要特定的帧速率高度和宽度,则需要使用videoscale和videorate过滤器

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=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,色度=(string)SMPTE240M,ssrc=(string)1825678493,payload(int)96,时钟基准=(uint)4068866987,seqnum基准=(uint)24582

在接收器管道上使用此选项:

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,并在其后设置适当的上限。(沿宽度、高度和帧率)


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

这正是我想要的!非常感谢。附言:添加音频也很难吗?不太难。同样的原则也适用。我建议您首先创建一个单独的仅音频管道。然后将两者结合起来。