Ubuntu 14.04 Gstreamer autovideosink

问题描述:

我想获得一个运行在Ubuntu 14.04上的Gstreamer视频流,但接收端无法正常显示视频。我有一个发送器管道发送MJPEG图像我这样开始:Ubuntu 14.04 Gstreamer autovideosink

gst-launch-1.0 -v videotestsrc ! jpegenc ! rtpjpegpay ! udpsink host=127.0.0.1 port=5200 

的输出是:

Setting pipeline to PAUSED ... 
Pipeline is PREROLLING ... 
/GstPipeline:pipeline0/GstVideoTestSrc:videotestsrc0.GstPad:src: caps = video/x-raw, width=(int)320, height=(int)240, framerate=(fraction)30/1, format=(string)I420, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive 
/GstPipeline:pipeline0/GstJpegEnc:jpegenc0.GstPad:sink: caps = video/x-raw, width=(int)320, height=(int)240, framerate=(fraction)30/1, format=(string)I420, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive 
/GstPipeline:pipeline0/GstJpegEnc:jpegenc0.GstPad:src: caps = image/jpeg, sof-marker=(int)0, width=(int)320, height=(int)240, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)30/1 
/GstPipeline:pipeline0/GstRtpJPEGPay:rtpjpegpay0.GstPad:src: caps = application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)JPEG, a-framerate=(string)30.000000, a-framesize=(string)320-240, payload=(int)96, ssrc=(uint)1970481773, timestamp-offset=(uint)1012832172, seqnum-offset=(uint)21614 
/GstPipeline:pipeline0/GstUDPSink:udpsink0.GstPad:sink: caps = application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)JPEG, a-framerate=(string)30.000000, a-framesize=(string)320-240, payload=(int)96, ssrc=(uint)1970481773, timestamp-offset=(uint)1012832172, seqnum-offset=(uint)21614 
/GstPipeline:pipeline0/GstRtpJPEGPay:rtpjpegpay0.GstPad:sink: caps = image/jpeg, sof-marker=(int)0, width=(int)320, height=(int)240, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)30/1 
/GstPipeline:pipeline0/GstRtpJPEGPay:rtpjpegpay0: timestamp = 1012832172 
/GstPipeline:pipeline0/GstRtpJPEGPay:rtpjpegpay0: seqnum = 21614 
Pipeline is PREROLLED ... 
Setting pipeline to PLAYING ... 
New clock: GstSystemClock 

接收管道是:

gst-launch-1.0 udpsrc port=5200 caps="application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)JPEG, a-framerate=(string)30.000000, a-framesize=(string)320-240, payload=(int)96" ! rtpjpegdepay ! jpegdec ! xvimagesink 

通知我抄帽来自发件人信息。

但是,我不断收到“无法发送粘滞事件”错误,并且接收器立即终止。我可能做错了什么?我的输出如下:

Setting pipeline to PAUSED ... 
Pipeline is live and does not need PREROLL ... 
Setting pipeline to PLAYING ... 
New clock: GstSystemClock 
0:00:00.016961467 12229  0x266a400 WARN    GST_PADS gstpad.c:3669:gst_pad_peer_query:<jpegdec0:src> could not send sticky events 
0:00:00.017297845 12229  0x266a400 WARN     basesrc gstbasesrc.c:2865:gst_base_src_loop:<udpsrc0> error: Internal data flow error. 
0:00:00.017306308 12229  0x266a400 WARN     basesrc gstbasesrc.c:2865:gst_base_src_loop:<udpsrc0> error: streaming task paused, reason not-negotiated (-4) 
ERROR: from element /GstPipeline:pipeline0/GstUDPSrc:udpsrc0: Internal data flow error. 
Additional debug info: 
gstbasesrc.c(2865): gst_base_src_loop(): /GstPipeline:pipeline0/GstUDPSrc:udpsrc0: 
streaming task paused, reason not-negotiated (-4) 
Execution ended after 0:00:00.000651039 
Setting pipeline to PAUSED ... 
Setting pipeline to READY ... 
Setting pipeline to NULL ... 
Freeing pipeline ... 

我已经尝试autovideosink,ximagesink,具有相同的结果。

谢谢。

+0

几乎所有的时间我都得到粘性事件..忽略它..真正的问题是 - 没有谈判......它意味着元素不完全连接在一起,因为他们不相互理解,我会检查我的机器 – nayana

欧凯你只需要添加videoconvert - 在JPEGDEC生成视频当中xvimagesink不明白:

gst-launch-1.0 udpsrc port=5200 ! application/x-rtp\,\ media\=\(string\)video\,\ clock-rate\=\(int\)90000\,\ encoding-name\=\(string\)JPEG\,\ a-framerate\=\(string\)\"30\\\,000000\"\,\ payload\=\(int\)26\,\ ssrc\=\(uint\)2512101225\,\ timestamp-offset\=\(uint\)1627080146\,\ seqnum-offset\=\(uint\)4727 ! rtpjpegdepay ! jpegdec ! videoconvert ! xvimagesink 

如何我想通了这一点?通过使用fakesink这样:

udpsrc ! fakesink -v 

工作,然后

udpsrc ! rptjpegdepay ! fakesink 

再工作..所以我继续这样,找出这个问题是真的xvimagesink。它的怪异,我们不得到更明确的错误信息..

您也可以与调试应用程序:

GST_DEBUG=4 gst-launch-1.0 udpsrc ..... 

您可以滚动到未经过协商的部分,然后环视四周。

+0

那工作,谢谢! –

+0

@wireless_freedom很高兴听到这个:)如果它解决了你的问题,你可以通过在投票号码下使用tick来接受这个答案 – nayana