[DASH] Client Pipeline dashdemux+multiqueue

Angel Martin amartin at vicomtech.org
Mon Jan 26 06:52:29 PST 2015


Dear all,

I am trying to find the pipeline to receive and manipulate a DASH stream
with video and audio in separated fragments.

The first step is to try to play it and then to remove the sinks, add a
muxer for video and audio and push it to a UDP connection.

This player works perfect:
*gst-launch-1.0 -v playbin uri=http://localhost/dash/ondemand.mpd
<http://localhost/dash/ondemand.mpd> name=source*

Now, I am trying to forward the DASH to a UDP stream.

Here, you can find a very good description of the *"HTTP Adaptive Streaming
with GStreamer"* done by *Sebastian Dröge*:
https://coaxion.net/blog/2014/05/http-adaptive-streaming-with-gstreamer/

My basic hint to reach my target scenario comes from this graph:
https://coaxion.net/blog/wp-content/uploads/2014/05/hls-av.png

I am using Gst 1.4.3 64 bits on Debian Testing.

gst-launch-1.0 -v souphttpsrc location=http://localhost/dash/ondemand.mpd
name=source ! application/dash+xml !
dashdemux name=dd0 multiqueue name=mq0 dd0.src_0 ! audio/x-m4a ! mq0.sink_0
mq0.src0 ! audio/x-m4a !
qtdemux name=d0 ! multiqueue name=mq2 ! audio/mpeg, mpegversion=\(int\)4,
stream-format=\(string\)raw ! aacparse ! faad ! audioconvert !
autoaudiosink
dd0.src_1 ! video/quicktime ! mq0.sink_1 mq0.src_1 ! video/quicktime !
qtdemux name=d1 ! multiqueue name=mq1 ! video/x-h264,
stream-format=\(string\)avc, alignment=\(string\)au ! h264parse !
avdec_h264 ! videoconvert ! autovideosink

But It seems it is not able to download the fragments (my feeling is that
the multiqueue is not being linked properly):

*(gst-launch-1.0:8235): GStreamer-CRITICAL **: gst_mini_object_ref:
assertion 'mini_object != NULL' failed*
*0:00:00.130677815  8235      0x132cd90 WARN               dashdemux
gstdashdemux.c:878:gst_dash_demux_sink_event:<dd0> Failed to find a segment
that is available at this point in time for stream 0.*

*(gst-launch-1.0:8235): GStreamer-CRITICAL **: gst_mini_object_ref:
assertion 'mini_object != NULL' failed*
*0:00:00.130742519  8235      0x132cd90 WARN               dashdemux
gstdashdemux.c:878:gst_dash_demux_sink_event:<dd0> Failed to find a segment
that is available at this point in time for stream 1.*

*(gst-launch-1.0:8235): GStreamer-CRITICAL **: gst_mini_object_ref:
assertion 'mini_object != NULL' failed*

*(gst-launch-1.0:8235): GStreamer-CRITICAL **: gst_mini_object_ref:
assertion 'mini_object != NULL' failed*
*0:00:00.133930076  8235 0x7f57ac003590 WARN                 basesrc
gstbasesrc.c:2933:gst_base_src_loop:<souphttpsrc2> error: Internal data
flow error.*
*0:00:00.133977452  8235 0x7f57ac003590 WARN                 basesrc
gstbasesrc.c:2933:gst_base_src_loop:<souphttpsrc2> error: streaming task
paused, reason not-linked (-1)*
*0:00:00.134025945  8235 0x7f57ac003590 WARN               dashdemux
gstdashdemux.c:428:gst_dash_demux_handle_message:<dd0:ghostpad1> Source
posted error: 3304:1 Internal data flow error. (gstbasesrc.c(2933):
gst_base_src_loop ():
/GstPipeline:pipeline0/GstDashDemux:dd0/GstSoupHTTPSrc:souphttpsrc2:*
*streaming task paused, reason not-linked (-1))*
*0:00:00.134270857  8235 0x7f57b4005050 WARN               dashdemux
gstdashdemux.c:2242:gst_dash_demux_stream_download_fragment:<dd0:ghostpad1>
Failed to download headers*
*0:00:00.134323333  8235 0x7f57b4005050 WARN               dashdemux
gstdashdemux.c:2365:gst_dash_demux_stream_get_next_fragment:<dd0:ghostpad1>
Failed to download fragment: custom-error*

This is the MPD:
*<MPD xmlns="urn:mpeg:dash:schema:mpd:2011"
profiles="urn:mpeg:dash:profile:isoff-main:2011"
minimumUpdatePeriod="PT0H0M20.00S"
type="dynamic"mediaPresentationDuration="PT0H01M07.676828019S"
minBufferTime="PT2.000S">*
*<Period id="1" start="PT0.000S" duration="PT65.201S"
bitstreamSwitching="true">*
*<AdaptationSet minBandwidth="90473" maxBandwidth="90473"
segmentAlignment="true" subsegmentAlignment="true"
bitstreamSwitching="true">*
*<ContentComponent id="1" contentType="audio"/>*
*<Representation mimeType="audio/mp4" bandwidth="90473" id="pad1"
codecs="mp4a.40.2">*
*<SegmentList timescale="1000" duration="5000">*
*<Initialization sourceURL="pad1/ondemand.m4s"/>*
*<SegmentURL media="pad1/ondemand_fragment_0.m4s"/>*
*<SegmentURL media="pad1/ondemand_fragment_1.m4s"/>*
*<SegmentURL media="pad1/ondemand_fragment_2.m4s"/>*
*...*
*</SegmentList>*
*</Representation>*
*</AdaptationSet>*
*<AdaptationSet minBandwidth="343780" maxBandwidth="343780"
minWidth="320" maxWidth="320" minHeight="240" maxHeight="240"
segmentAlignment="true"subsegmentAlignment="true"
bitstreamSwitching="true">*
*<ContentComponent id="1" contentType="video"/>*
*<Representation mimeType="video/mp4" bandwidth="343780" id="pad0"
width="320" height="240" codecs="avc1.42c01e">*
*<SegmentList timescale="1000" duration="5000">*
*<Initialization sourceURL="pad0/ondemand.m4s"/>*
*<SegmentURL media="pad0/ondemand_fragment_0.m4s"/>*
*<SegmentURL media="pad0/ondemand_fragment_1.m4s"/>*
*<SegmentURL media="pad0/ondemand_fragment_2.m4s"/>*
*...*
*</SegmentList>*
*</Representation>*
*</AdaptationSet>*
*</Period>*
*</MPD>*

I have also tried this hint:
http://gstreamer-devel.966125.n4.nabble.com/How-can-I-make-two-links-between-two-elements-td2295148.html
And the suggested "seek" does not help at all.

Any hint about what is wrong in the pipeline?

I have tried lots of combinations, even a more 'multiqueued' one more
closed to the playbin:

gst-launch-1.0 -v souphttpsrc location=http://localhost/dash/ondemand.mpd
name=source ! application/dash+xml !
dashdemux name=dd0 multiqueue name=mq0 dd0.src_0 ! audio/x-m4a ! mq0.sink_0
mq0.src0 ! audio/x-m4a !
qtdemux name=d0 multiqueue name=mq2 d0.audio_0 ! mq2.sink_0 mq2.src_0 !
audio/mpeg, mpegversion=\(int\)4, stream-format=\(string\)raw ! aacparse !
faad ! audioconvert ! autoaudiosink
dd0.src_1 ! video/quicktime ! mq0.sink_1 mq0.src_1 ! video/quicktime !
qtdemux name=d1 multiqueue name=mq1 d1.video_0 ! mq1.sink_0 mq1.src_0 !
video/x-h264, stream-format=\(string\)avc, alignment=\(string\)au !
h264parse ! avdec_h264 ! videoconvert ! autovideosink

Thank you in advance.

Best,

Angel
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/gstreamer-devel/attachments/20150126/93ea83cb/attachment.html>


More information about the gstreamer-devel mailing list