Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Cannot play manifest with SegmentTimeline inside of SegmentList #1457

Closed
5 tasks done
bwidtmann opened this issue Jun 17, 2016 · 7 comments
Closed
5 tasks done

Cannot play manifest with SegmentTimeline inside of SegmentList #1457

bwidtmann opened this issue Jun 17, 2016 · 7 comments
Milestone

Comments

@bwidtmann
Copy link
Contributor

Steps to reproduce
  1. Got to latest nightly build of reference player
  2. Try to start playback with provided manifest: http://test.unified-streaming.com/maxdome/testfile18/testfile18.mpd

It works on shaka player: http://shaka-player-demo.appspot.com/demo/

Observed behaviour

Manifest gets downloaded.
First chunks get downloaded.
Playback does not start.

Console output
[13] [dash.js 2.2.0] MediaPlayer has been initialized 
Debug.js:108[20] EME detected on this user agent! (ProtectionModel_21Jan2015) 
Debug.js:108 [25776] Playback Initialized 
Debug.js:108 [26146] Parsing complete: ( xml2json: 149ms, objectiron: 28.3ms, total: 0.177s) 
Debug.js:108 [26147] Manifest has been refreshed at Fri Jun 17 2016 16:42:49 GMT+0200 (CEST)[1466174569.956]  
Debug.js:108 [26152] SegmentTimeline detected using calculated Live Edge Time 
Debug.js:108 [26157] MediaSource attached to element.  Waiting on open... 
Debug.js:108 [26164] MediaSource is open! 
Debug.js:108 [26164] Duration successfully set to: 1326.272 
Debug.js:108 [26166] Added 0 inline events 
Debug.js:108 [26167] video codec: video/mp4;codecs="avc1.4D001E" 
Debug.js:108 [26181] Schedule controller stopping for video 
Debug.js:108 [26184] Start searching for initialization. 
Debug.js:108 [26185] Perform init search: http://test.unified-streaming.com/maxdome/testfile18/db_testfile18_v01.ismv 
Debug.js:108 [26185] audio codec: audio/mp4;codecs="mp4a.40.2" 
Debug.js:108 [26188] Schedule controller stopping for audio 
Debug.js:108 [26188] Start searching for initialization. 
Debug.js:108 [26189] Perform init search: http://test.unified-streaming.com/maxdome/testfile18/db_testfile18_de2.isma 
Debug.js:108 [26190] No text data. 
Debug.js:108 [26190] No fragmentedText data. 
Debug.js:108 [26190] No embeddedText data. 
Debug.js:108 [26190] No muxed data. 
Debug.js:108 [26338] Searching for initialization. 
Debug.js:108 [26338] Found the initialization.  Range: 0-753 
Debug.js:108 [26350] Searching for initialization. 
Debug.js:108 [26350] Found the initialization.  Range: 0-658 
Debug.js:108 [26355] Start Event Controller 
Debug.js:108 [26371] Schedule controller starting for video 
Debug.js:108 [26378] Schedule controller starting for audio 
Debug.js:108 [26380] Native video element event: play 
Debug.js:108 [26389] Getting the request for video time : 0 
Debug.js:108 [26390] Schedule controller starting for video 
Debug.js:108 [26390] Getting the request for audio time : 0 
Debug.js:108 [26391] Schedule controller starting for audio 
Debug.js:108 [26430] Initialization finished loading 
Debug.js:108 [26438] Initialization finished loading 
Debug.js:108 [26452] Native video element event: loadedmetadata
@davemevans
Copy link
Contributor

Despite its odd appearance, this is valid DASH and ought to work.

I had a quick go at prototyping support - see davemevans@bc95f12

I haven't really tested it too much beyond it playing the MPD above and not breaking a few reference streams I tried. @bwidtmann, fancy giving it a try?

@bwidtmann
Copy link
Contributor Author

thx @bbcrddave that looks nice.

I found out, that our specific problem is, not loading segments when there is NO 'duration' but instead 'indexRange' attribute in SegmentList element.

So the logic here should do the following:

  • If there is a @indexRange, then use that. Completely ignore the SegmentList and SegmentTimeline and use information provided in sidx box.
  • If not, use the SegmentList. If accurate seeking is required, optionally use the SegmentTimeline, otherwise ignore the element completely.

So I changed the following line in DashHandler.js in function updateRepresentation:

var hasSegments = representation.segmentInfoType !== 'BaseURL' && representation.segmentInfoType !== 'SegmentBase' && !representation.indexRange;

Correct me if I am wrong: you provided a solution for the second point and I provide a solution for the first point. To be 100% MPEG-DASH compliant, we have to implement both solutions? right?

@davemevans
Copy link
Contributor

Yes, that is correct.

you provided a solution for the second point

Yes, although the SegmentTimeline use is not optional with this solution - it will always be used because there is no option for non-accurate seeking. I think that is ok.

@bwidtmann
Copy link
Contributor Author

@bbcrddave I also think it is ok always using SegmentTimeline when present.

One question regarding your solution: what is 'availabilityIdx'?

@davemevans
Copy link
Contributor

availabilityIdx is the index of the segment within the list of segments in the availability window.

It's useful here to correlate the entries in the SegmentList to the SegmentTimeline since they must be at the same index.

@bwidtmann
Copy link
Contributor Author

How do we proceed? Should we provide 2 separate PRs?

@davemevans
Copy link
Contributor

I'll submit a PR with both (crediting you, of course 😉) later if that's ok with you?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants