GNOME Bugzilla – Bug 741248
dashdemux cannot switch representations in ISOBMFF OnDemand profile
Last modified: 2015-01-16 20:27:29 UTC
The following pipeline plays DASH content in ISOBMFF OnDemand profile: GST_DEBUG=qtdemux:2 gst-launch-1.0 playbin uri=http://download.tsi.telecom-paristech.fr/gpac/DASH_CONFORMANCE/TelecomParisTech/mp4-onDemand/mp4-onDemand-mpd-V.mpd The byte ranges of the segments in each representation are contained in the 'sidx' box, which is never parsed. The result is that the lowest quality representation is played for the entire duration.
I have something working for this. Going to do final organization and cleanups and publish here. Are there any other samples available?
DASH-IF have a load of test material available. See https://github.com/Dash-Industry-Forum/dash.js/blob/development/app/sources.json A quick grep shows that these ones (http://pastebin.com/yhA46HkG) are ISO on-demand profile.
I didn't check any of them myself by the way, so no guarantees. Enjoy :)
This commit adds support for this profile. It still can be improved in some ways but it requires deeper changes in the adaptivedemux baseclass so I decided to do that as a second step. Please reopen if you find any issues. commit 3055bb331a931b59dbeca26f9c299566a0cf1e68 Author: Thiago Santos <thiagoss@osg.samsung.com> Date: Mon Jan 12 17:40:47 2015 -0300 dashdemux: implement ISOBMFF profile handling The ISOBMFF profile allows definind subsegments in a segment. At those subsegment boundaries the client can switch from one representation to another as they have aligned indexes. To handle those the 'sidx' index is parsed from the stream and the entries point to pts/offset of the samples in the stream. Knowing that the entries are aligned in the different representation allows the client to switch mid fragment. In this profile a single fragment is used per representation and the subsegments are contained in this fragment. To notify the superclass about the subsegment boundary the chunk_received function returns a special flow return that indicates that. In this case, the super class will check if a more suitable bitrate is available and will change to the same subsegment in this new representation. It also requires special handling of the position in the stream as the fragment advancing is now done by incrementing the index of the subsegment. It will only advance to the next fragment once all subsegments have been downloaded. https://bugzilla.gnome.org/show_bug.cgi?id=741248