GStreamer UDP发送/接收单行

ale*_*nst 2 streaming udp gstreamer

我正在尝试v4l2src使用GStreamer 流式传输UDP.发送部分(显然)没问题,但接收部分丢失了一些东西.

这些是实际的:

发送: 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

av5*_*501 5

你犯的错误是假设你的v4l2src会给出什么.如果需要特定的帧速率高度和宽度,则需要使用视频和视频速率滤镜

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
Run Code Online (Sandbox Code Playgroud)

现在,这将打印您需要在接收方使用的大写字母.例如.对我来说这是印刷品./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,colorimetry =(string)SMPTE240M,ssrc =(uint)1825678493,payload = (int)96,clock-base =(uint)4068866987,seqnum-base =(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
Run Code Online (Sandbox Code Playgroud)

这里的接收者无法知道确切的上限,因此必须从发送方复制粘贴.如果您想要不同的采样,请在发件人上使用ffmpegcolorspace并在其后设置适当的大写字母.(以及宽度,高度和帧率)

以上管道对我来说很好.请记住,ssrc和其他一些参数会因src的每次运行而异.