<div dir="ltr"><div><div class="gmail_signature"><div>Dear all,</div><div><br></div><div>I am trying to find the pipeline to receive and manipulate a DASH stream with video and audio in separated fragments.</div><div><br></div><div><div><div class="" style="color:rgb(0,0,0);font-family:monospace;font-size:13px"><span style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small">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.</span><br></div></div></div><div><br></div><div>This player works perfect:</div><div><i>gst-launch-1.0 -v playbin uri=<a href="http://localhost/dash/ondemand.mpd">http://localhost/dash/ondemand.mpd</a> name=source</i><br></div><div><br></div><div>Now, I am trying to forward the DASH to a UDP stream.</div><div><br></div><div>Here, you can find a very good description of the <i>"HTTP Adaptive Streaming with GStreamer"</i> done by <b>Sebastian Dröge</b>:</div><div><a href="https://coaxion.net/blog/2014/05/http-adaptive-streaming-with-gstreamer/">https://coaxion.net/blog/2014/05/http-adaptive-streaming-with-gstreamer/</a></div><div><br></div><div>My basic hint to reach my target scenario comes from this graph:</div><div><a href="https://coaxion.net/blog/wp-content/uploads/2014/05/hls-av.png">https://coaxion.net/blog/wp-content/uploads/2014/05/hls-av.png</a><br></div><div><br></div><div>I am using Gst 1.4.3 64 bits on Debian Testing.<br></div><div><br></div><div>gst-launch-1.0 -v souphttpsrc location=<a href="http://localhost/dash/ondemand.mpd">http://localhost/dash/ondemand.mpd</a> name=source ! application/dash+xml ! </div><div>dashdemux name=dd0 multiqueue name=mq0 dd0.src_0 ! audio/x-m4a ! mq0.sink_0 mq0.src0 ! audio/x-m4a ! </div><div>qtdemux name=d0 ! multiqueue name=mq2 ! audio/mpeg, mpegversion=\(int\)4, stream-format=\(string\)raw ! aacparse ! faad ! audioconvert ! autoaudiosink </div><div>dd0.src_1 ! video/quicktime ! mq0.sink_1 mq0.src_1 ! video/quicktime ! </div><div>qtdemux name=d1 ! multiqueue name=mq1 ! video/x-h264, stream-format=\(string\)avc, alignment=\(string\)au ! h264parse ! avdec_h264 ! videoconvert ! autovideosink<br></div><div><br></div><div>But It seems it is not able to download the fragments (my feeling is that the multiqueue is not being linked properly):</div><div><br></div><div><div><i>(gst-launch-1.0:8235): GStreamer-CRITICAL **: gst_mini_object_ref: assertion 'mini_object != NULL' failed</i></div><div><i>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.</i></div><div><i><br></i></div><div><i>(gst-launch-1.0:8235): GStreamer-CRITICAL **: gst_mini_object_ref: assertion 'mini_object != NULL' failed</i></div><div><i>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.</i></div><div><i><br></i></div><div><i>(gst-launch-1.0:8235): GStreamer-CRITICAL **: gst_mini_object_ref: assertion 'mini_object != NULL' failed</i></div><div><i><br></i></div><div><i>(gst-launch-1.0:8235): GStreamer-CRITICAL **: gst_mini_object_ref: assertion 'mini_object != NULL' failed</i></div><div><i>0:00:00.133930076  8235 0x7f57ac003590 WARN                 basesrc gstbasesrc.c:2933:gst_base_src_loop:<souphttpsrc2> error: Internal data flow error.</i></div><div><i>0:00:00.133977452  8235 0x7f57ac003590 WARN                 basesrc gstbasesrc.c:2933:gst_base_src_loop:<souphttpsrc2> error: streaming task paused, reason not-linked (-1)</i></div><div><i>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:</i></div><div><i>streaming task paused, reason not-linked (-1))</i></div><div><i>0:00:00.134270857  8235 0x7f57b4005050 WARN               dashdemux gstdashdemux.c:2242:gst_dash_demux_stream_download_fragment:<dd0:ghostpad1> Failed to download headers</i></div><div><i>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</i></div></div><div><br></div><div>This is the MPD:</div><div><div><div class="" style="color:rgb(0,0,0);font-family:monospace;font-size:13px"><span class=""><i><MPD<span class=""> <span class="">xmlns</span>="<span class="">urn:mpeg:dash:schema:mpd:2011</span>"</span><span class=""> <span class="">profiles</span>="<span class="">urn:mpeg:dash:profile:isoff-main:2011</span>"</span><span class=""> <span class="">minimumUpdatePeriod</span>="<span class="">PT0H0M20.00S</span>"</span><span class=""> <span class="">type</span>="<span class="">dynamic</span>"</span><span class=""><span class="">mediaPresentationDuration</span>="<span class="">PT0H01M07.676828019S</span>"</span><span class=""> <span class="">minBufferTime</span>="<span class="">PT2.000S</span>"</span>></i></span></div><div class="" style="margin-left:1em;color:rgb(0,0,0);font-family:monospace;font-size:13px"><i><span class=""></span></i><div class="" id="collapsible1"><div class=""><div class=""><i><span class="" style="display:inline-block;width:10px;vertical-align:bottom;height:10px;background-repeat:no-repeat"></span><span class=""><Period<span class=""> <span class="">id</span>="<span class="">1</span>"</span><span class=""> <span class="">start</span>="<span class="">PT0.000S</span>"</span><span class=""> <span class="">duration</span>="<span class="">PT65.201S</span>"</span><span class=""> <span class="">bitstreamSwitching</span>="<span class="">true</span>"</span>></span></i></div><div class="" style="margin-left:1em"><i><span class=""></span></i><div class="" id="collapsible2"><div class=""><div class=""><i><span class="" style="display:inline-block;width:10px;vertical-align:bottom;height:10px;background-repeat:no-repeat"></span><span class=""><AdaptationSet<span class=""> <span class="">minBandwidth</span>="<span class="">90473</span>"</span><span class=""> <span class="">maxBandwidth</span>="<span class="">90473</span>"</span><span class=""> <span class="">segmentAlignment</span>="<span class="">true</span>"</span><span class=""> <span class="">subsegmentAlignment</span>="<span class="">true</span>"</span><span class=""> <span class="">bitstreamSwitching</span>="<span class="">true</span>"</span>></span></i></div><div class="" style="margin-left:1em"><i><span class=""></span></i><div class=""><span class=""><i><ContentComponent<span class=""> <span class="">id</span>="<span class="">1</span>"</span><span class=""> <span class="">contentType</span>="<span class="">audio</span>"</span>/></i></span></div><i><span class=""></span></i><div class="" id="collapsible3"><div class=""><div class=""><i><span class="" style="display:inline-block;width:10px;vertical-align:bottom;height:10px;background-repeat:no-repeat"></span><span class=""><Representation<span class=""> <span class="">mimeType</span>="<span class="">audio/mp4</span>"</span><span class=""> <span class="">bandwidth</span>="<span class="">90473</span>"</span><span class=""> <span class="">id</span>="<span class="">pad1</span>"</span><span class=""> <span class="">codecs</span>="<span class="">mp4a.40.2</span>"</span>></span></i></div><div class="" style="margin-left:1em"><i><span class=""></span></i><div class="" id="collapsible4"><div class=""><div class=""><i><span class="" style="display:inline-block;width:10px;vertical-align:bottom;height:10px;background-repeat:no-repeat"></span><span class=""><SegmentList<span class=""> <span class="">timescale</span>="<span class="">1000</span>"</span><span class=""> <span class="">duration</span>="<span class="">5000</span>"</span>></span></i></div><div class="" style="margin-left:1em"><i><span class=""></span></i><div class=""><span class=""><i><Initialization<span class=""> <span class="">sourceURL</span>="<span class="">pad1/ondemand.m4s</span>"</span>/></i></span></div><i><span class=""></span></i><div class=""><span class=""><i><SegmentURL<span class=""> <span class="">media</span>="<span class="">pad1/ondemand_fragment_0.m4s</span>"</span>/></i></span></div><i><span class=""></span></i><div class=""><span class=""><i><SegmentURL<span class=""> <span class="">media</span>="<span class="">pad1/ondemand_fragment_1.m4s</span>"</span>/></i></span></div><i><span class=""></span></i><div class=""><span class=""><i><SegmentURL<span class=""> <span class="">media</span>="<span class="">pad1/ondemand_fragment_2.m4s</span>"</span>/></i></span></div><i><span class=""></span></i><div class=""><i>...</i></div><i><span class=""></span></i></div><div class=""><span class=""><i></SegmentList></i></span></div></div></div><i><span class=""></span></i></div><div class=""><span class=""><i></Representation></i></span></div></div></div><i><span class=""></span></i></div><div class=""><span class=""><i></AdaptationSet></i></span></div></div></div><i><span class=""></span></i><div class="" id="collapsible5"><div class=""><div class=""><i><span class="" style="display:inline-block;width:10px;vertical-align:bottom;height:10px;background-repeat:no-repeat"></span><span class=""><AdaptationSet<span class=""> <span class="">minBandwidth</span>="<span class="">343780</span>"</span><span class=""> <span class="">maxBandwidth</span>="<span class="">343780</span>"</span><span class=""> <span class="">minWidth</span>="<span class="">320</span>"</span><span class=""> <span class="">maxWidth</span>="<span class="">320</span>"</span><span class=""> <span class="">minHeight</span>="<span class="">240</span>"</span><span class=""> <span class="">maxHeight</span>="<span class="">240</span>"</span><span class=""> <span class="">segmentAlignment</span>="<span class="">true</span>"</span><span class=""><span class="">subsegmentAlignment</span>="<span class="">true</span>"</span><span class=""> <span class="">bitstreamSwitching</span>="<span class="">true</span>"</span>></span></i></div><div class="" style="margin-left:1em"><i><span class=""></span></i><div class=""><span class=""><i><ContentComponent<span class=""> <span class="">id</span>="<span class="">1</span>"</span><span class=""> <span class="">contentType</span>="<span class="">video</span>"</span>/></i></span></div><i><span class=""></span></i><div class="" id="collapsible6"><div class=""><div class=""><i><span class="" style="display:inline-block;width:10px;vertical-align:bottom;height:10px;background-repeat:no-repeat"></span><span class=""><Representation<span class=""> <span class="">mimeType</span>="<span class="">video/mp4</span>"</span><span class=""> <span class="">bandwidth</span>="<span class="">343780</span>"</span><span class=""> <span class="">id</span>="<span class="">pad0</span>"</span><span class=""> <span class="">width</span>="<span class="">320</span>"</span><span class=""> <span class="">height</span>="<span class="">240</span>"</span><span class=""> <span class="">codecs</span>="<span class="">avc1.42c01e</span>"</span>></span></i></div><div class="" style="margin-left:1em"><i><span class=""></span></i><div class="" id="collapsible7"><div class=""><div class=""><i><span class="" style="display:inline-block;width:10px;vertical-align:bottom;height:10px;background-repeat:no-repeat"></span><span class=""><SegmentList<span class=""> <span class="">timescale</span>="<span class="">1000</span>"</span><span class=""> <span class="">duration</span>="<span class="">5000</span>"</span>></span></i></div><div class="" style="margin-left:1em"><i><span class=""></span></i><div class=""><span class=""><i><Initialization<span class=""> <span class="">sourceURL</span>="<span class="">pad0/ondemand.m4s</span>"</span>/></i></span></div><i><span class=""></span></i><div class=""><span class=""><i><SegmentURL<span class=""> <span class="">media</span>="<span class="">pad0/ondemand_fragment_0.m4s</span>"</span>/></i></span></div><i><span class=""></span></i><div class=""><span class=""><i><SegmentURL<span class=""> <span class="">media</span>="<span class="">pad0/ondemand_fragment_1.m4s</span>"</span>/></i></span></div><i><span class=""></span></i><div class=""><span class=""><i><SegmentURL<span class=""> <span class="">media</span>="<span class="">pad0/ondemand_fragment_2.m4s</span>"</span>/></i></span></div><i><span class=""></span></i><div class=""><i>...</i></div><i><span class=""></span></i></div><div class=""><span class=""><i></SegmentList></i></span></div></div></div><i><span class=""></span></i></div><div class=""><span class=""><i></Representation></i></span></div></div></div><i><span class=""></span></i></div><div class=""><span class=""><i></AdaptationSet></i></span></div></div></div><i><span class=""></span></i></div><div class=""><span class=""><i></Period></i></span></div></div></div><i><span class=""></span></i></div><div class="" style="color:rgb(0,0,0);font-family:monospace;font-size:13px"><span class=""><i></MPD></i></span></div></div></div><div><br></div><div>I have also tried this hint:</div><div><a href="http://gstreamer-devel.966125.n4.nabble.com/How-can-I-make-two-links-between-two-elements-td2295148.html">http://gstreamer-devel.966125.n4.nabble.com/How-can-I-make-two-links-between-two-elements-td2295148.html</a><br></div><div>And the suggested "seek" does not help at all.</div><div><br></div><div>Any hint about what is wrong in the pipeline?<br></div><div><br></div><div>I have tried lots of combinations, even a more 'multiqueued' one more closed to the playbin:</div><div><br></div><div>gst-launch-1.0 -v souphttpsrc location=<a href="http://localhost/dash/ondemand.mpd">http://localhost/dash/ondemand.mpd</a> name=source ! application/dash+xml ! </div><div>dashdemux name=dd0 multiqueue name=mq0 dd0.src_0 ! audio/x-m4a ! mq0.sink_0 mq0.src0 ! audio/x-m4a ! </div><div>qtdemux name=d0 multiqueue name=mq2 d0.audio_0 ! mq2.sink_0 mq2.src_0 ! </div><div>audio/mpeg, mpegversion=\(int\)4, stream-format=\(string\)raw ! aacparse ! faad ! audioconvert ! autoaudiosink </div><div>dd0.src_1 ! video/quicktime ! mq0.sink_1 mq0.src_1 ! video/quicktime ! </div><div>qtdemux name=d1 multiqueue name=mq1 d1.video_0 ! mq1.sink_0 mq1.src_0 ! </div><div>video/x-h264, stream-format=\(string\)avc, alignment=\(string\)au ! h264parse ! avdec_h264 ! videoconvert ! autovideosink</div><div><br></div><div>Thank you in advance.</div><div><br></div><div>Best,</div><div><br></div><div>Angel</div><div><br></div></div></div>
</div>