AnsweredAssumed Answered

Network Streaming a file using gst-launch (gstreamer)

Question asked by smwsmart-e on Jun 25, 2013
Latest reply on Feb 23, 2014 by Yixing Kong

Hi all, I'm quite new to Gstreamer but based on the Gstreamer Streaming doc (https://community.freescale.com/docs/DOC-94646) I've created pipelines that stream to/from the board and work well. I'm then trying to use the same pipeline with a filesrc instead of the videotestsrc, this is where the problem starts.

 

For streaming out of the board I'm using:

 

gst-launch -ve gstrtpbin name=rtpbin filesrc location=/home/linaro/Desktop/foreman_cif.yuv ! vpuenc codec=6 ! queue ! rtph264pay ! rtpbin.send_rtp_sink_0 rtpbin.send_rtp_src_0 ! queue ! udpsink host=192.168.1.29 port=5000 sync=false rtpbin.send_rtcp_src_0 ! udpsink host=192.168.1.29 port=5001 sync=false async=false udpsrc port=5005 ! rtpbin.recv_rtcp_sink_0

 

This does nothing on the recieving computer, the terminal output is below:

 

Setting pipeline to PAUSED ...

[INFO]  Product Info: i.MX6Q/D/S

vpuenc versions: )

        plugin: 3.0.7

        wrapper: 1.0.35(VPUWRAPPER_ARM_LINUX Build on Apr 18 2013 23:02:29)

        vpulib: 5.4.12

        firmware: 2.1.9.36350

Pipeline is live and does not need PREROLL ...

Setting pipeline to PLAYING ...

New clock: GstSystemClock

/GstPipeline:pipeline0/GstRtpBin:rtpbin.GstGhostPad:send_rtcp_src_0: caps = application/x-rtcp

/GstPipeline:pipeline0/GstRtpBin:rtpbin/GstRtpSession:rtpsession0.GstPad:send_rtcp_src: caps = application/x-rtcp

/GstPipeline:pipeline0/GstUDPSink:udpsink1.GstPad:sink: caps = application/x-rtcp

/GstPipeline:pipeline0/GstRtpBin:rtpbin.GstGhostPad:send_rtcp_src_0.GstProxyPad:proxypad3: caps = application/x-rtcp

Got EOS from element "pipeline0".

Execution ended after 812999 ns.

Setting pipeline to PAUSED ...

Setting pipeline to READY ...

/GstPipeline:pipeline0/GstUDPSink:udpsink1.GstPad:sink: caps = NULL

/GstPipeline:pipeline0/GstRtpBin:rtpbin.GstGhostPad:send_rtcp_src_0: caps = NULL

/GstPipeline:pipeline0/GstRtpBin:rtpbin/GstRtpSession:rtpsession0.GstPad:send_rtcp_src: caps = NULL

Setting pipeline to NULL ...

Freeing pipeline ...

 

When streaming from the PC, I'm using

 

gst-launch -v gstrtpbin name=rtpbin filesrc location=/home/*/*/big_buck_bunny_1080p_h264_HQ.mov typefind=true ! qtdemux ! rtph264pay ! rtpbin.send_rtp_sink_0 rtpbin.send_rtp_src_0 ! queue ! udpsink host=192.168.1.21 port=5000 rtpbin.send_rtcp_src_0 ! udpsink host=192.168.1.21 port=5001 sync=false async=false udpsrc port=5005 ! rtpbin.recv_rtcp_sink_0

 

This outputs:

 

 

Setting pipeline to PAUSED ...

/GstPipeline:pipeline0/GstFileSrc:filesrc0.GstPad:src: caps = video/quicktime

Pipeline is live and does not need PREROLL ...

/GstPipeline:pipeline0/GstQTDemux:qtdemux0.GstPad:sink: caps = video/quicktime

Setting pipeline to PLAYING ...

New clock: GstSystemClock

/GstPipeline:pipeline0/GstRtpBin:rtpbin.GstGhostPad:send_rtcp_src_0: caps = application/x-rtcp

/GstPipeline:pipeline0/GstRtpBin:rtpbin/GstRtpSession:rtpsession0.GstPad:send_rtcp_src: caps = application/x-rtcp

/GstPipeline:pipeline0/GstUDPSink:udpsink1.GstPad:sink: caps = application/x-rtcp

/GstPipeline:pipeline0/GstRtpBin:rtpbin.GstGhostPad:send_rtcp_src_0.GstProxyPad:proxypad3: caps = application/x-rtcp

ERROR: from element /GstPipeline:pipeline0/GstQTDemux:qtdemux0: GStreamer encountered a general stream error.

Additional debug info:

qtdemux.c(3891): gst_qtdemux_loop (): /GstPipeline:pipeline0/GstQTDemux:qtdemux0:

streaming stopped, reason not-linked

Execution ended after 2227471 ns.

Setting pipeline to PAUSED ...

Setting pipeline to READY ...

/GstPipeline:pipeline0/GstUDPSink:udpsink1.GstPad:sink: caps = NULL

/GstPipeline:pipeline0/GstRtpBin:rtpbin.GstGhostPad:send_rtcp_src_0: caps = NULL

/GstPipeline:pipeline0/GstRtpBin:rtpbin/GstRtpSession:rtpsession0.GstPad:send_rtcp_src: caps = NULL

/GstPipeline:pipeline0/GstQTDemux:qtdemux0.GstPad:audio_00: caps = NULL

/GstPipeline:pipeline0/GstQTDemux:qtdemux0.GstPad:video_00: caps = NULL

/GstPipeline:pipeline0/GstQTDemux:qtdemux0.GstPad:sink: caps = NULL

/GstPipeline:pipeline0/GstFileSrc:filesrc0.GstPad:src: caps = NULL

Setting pipeline to NULL ...

 

Freeing pipeline ...

 

I've tried different variations of these pipelines and so far the only successful one i've tried is by demuxing/decoding the .mov file and then re-encoding the file and streaming from the PC to the board. This gives a good picture but has a very poor framerate (I persume due to the computer decoding/encoding H.264 simultaneously!) If anyone has any ideas, please let me know!

 

 

Outcomes