After an evaluation, GNOME has moved from Bugzilla to GitLab. Learn more about GitLab.
No new issues can be reported in GNOME Bugzilla anymore.
To report an issue in a GNOME project, go to GNOME GitLab.
Do not go to GNOME Gitlab for: Bluefish, Doxygen, GnuCash, GStreamer, java-gnome, LDTP, NetworkManager, Tomboy.
Bug 755172 - dashdemux: seeking in a stream that uses a SegmentList downloads all fragments
dashdemux: seeking in a stream that uses a SegmentList downloads all fragments
Status: RESOLVED NOTABUG
Product: GStreamer
Classification: Platform
Component: gst-plugins-bad
git master
Other Linux
: Normal normal
: git master
Assigned To: GStreamer Maintainers
GStreamer Maintainers
Depends on:
Blocks:
 
 
Reported: 2015-09-17 16:58 UTC by A Ashley
Modified: 2015-09-18 10:02 UTC
See Also:
GNOME target: ---
GNOME version: ---



Description A Ashley 2015-09-17 16:58:34 UTC
I have produced two DASH streams from the same fragmented MP4 files. The first uses a single file for each Representation and a SegmentList with SegmentURL elements to extract each fragment from the file. The second has separate MP4 files for each fragment.

Seeking when using the version with separate MP4 files is working, but the version using the SegmentList is exhibiting some odd behaviour. If I seek to the middle of the stream, dashdemux is downloading all fragments between the start and the chosen seek point.

The version with a SegmentList:
http://test-media.youview.co.uk/ondemand/bbb/timecode/range/timecode.mpd

The version with separate files:
http://test-media.youview.co.uk/ondemand/bbb/timecode/sep/timecode.mpd

There are also versions with a single Representation per AdaptationSet (i.e. no adaptive bitrate).

Single bitrate with a SegmentList:
http://test-media.youview.co.uk/ondemand/bbb/timecode/range/timecode-sbr.mpd

Single bitrate with separate files:
http://test-media.youview.co.uk/ondemand/bbb/timecode/sep/timecode-sbr.mpd
Comment 1 Sebastian Dröge (slomo) 2015-09-17 17:14:36 UTC
We're not parsing the d attributes from the SegmentURL currently, it probably starts at the very beginning each time you seek and drops all data until the seek position.
Comment 2 Sebastian Dröge (slomo) 2015-09-17 17:17:28 UTC
The 2014 spec does not allow the d attribute there, only in S nodes
Comment 3 Sebastian Dröge (slomo) 2015-09-17 17:20:50 UTC
You can have a duration attribute in the SegmentList node though, which is the duration of each segment (not the sum of all).
Comment 4 Sebastian Dröge (slomo) 2015-09-17 17:56:04 UTC
When overriding the SegmentList duration value from that high number to 512 (the segment duration), seeking works just fine on this stream.
Comment 5 A Ashley 2015-09-18 08:18:56 UTC
(In reply to Sebastian Dröge (slomo) from comment #2)
> The 2014 spec does not allow the d attribute there, only in S nodes

Actually the Schema says:
<!-- Segment URL -->
<xs:complexType name="SegmentURLType">
<xs:sequence>
<xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="media" type="xs:anyURI"/>
<xs:attribute name="mediaRange" type="xs:string"/>
<xs:attribute name="index" type="xs:anyURI"/>
<xs:attribute name="indexRange" type="xs:string"/> <xs:anyAttribute namespace="##other" processContents="lax"/>
</xs:complexType>

So the d node is undefined in the spec, rather than prohibited.

The reason for the bug ticket was because this is the style of manifest used by a certain large provider of VoD content. Thanks for spotting the error in the SegmentList@duration. I will feed that back.
Comment 6 Sebastian Dröge (slomo) 2015-09-18 08:35:14 UTC
Great, please make sure they fix that :) Not really surprising that everybody gets this monster spec wrong in one way or another.
Comment 7 A Ashley 2015-09-18 09:35:13 UTC
I've updated the manifests and I am no longer seeing dashdemux download every fragment following a seek.
Comment 8 Sebastian Dröge (slomo) 2015-09-18 10:02:55 UTC
Thanks for confirming!