Playback does not enter 3rd period of v8-MultiContent on Chrome and Edge
Created by: sandersaares
Environment
-
The MPD passes the DASH-IF Conformance Tool on http://dashif.org/conformance.html -
The stream has correct Access-Control-Allow-Origin headers (CORS) -
There are no network errors such as 404s in the browser console when trying to play the stream -
The issue observed is not mentioned on https://github.com/Dash-Industry-Forum/dash.js/wiki/FAQ -
The issue occurs in the latest reference client on http://reference.dashif.org/dash.js/ and not just on my page
- Link to playable MPD file: https://media.axprod.net/TestVectors/v8-MultiContent/Clear/Manifest.mpd
- Dash.js version: nightly
- Browser name/version: Chrome 62, Chrome Canary, Edge 40
- OS name/version: Windows 10 v1703
MPD does not validate due to https://github.com/Dash-Industry-Forum/Conformance-Software/issues/218 but I believe the presentation is valid and IOP-conforming.
Steps to reproduce
- Start playback
- Seek to near 12:00 minute mark to skip content of first period (ends near 12:10)
- Wait for 1st period to end
- Wait for 2nd period to end
Observed behaviour
At the point where playback is supposed to switch from the 2nd into the 3rd period, one of the following happens (seemingly randomly):
- The last second (approximately) of content from period 2 plays in an infinite loop.
- Playback stops.
The control bar shows this to be at around 12:43.
Console keeps looping the same log lines forever.
In Firefox 56, playback successfully enters the 3rd period.
Console output
This is from "playback stops" outcome in Chrome 56.
Debug.js:127 [200790] ThroughputRule requesting switch to index: 0 type: audio Average throughput 11499 kbps
Debug.js:127 [200792] AbrController (audio) stay on 0/0 (buffer: 0.512)
Debug.js:127 [200793] ScheduleController audio- getNextFragment
Debug.js:127 [200795] Getting the request for audio time : 765.824
Debug.js:127 [200796] Index for audio time 765.824 is 7
Debug.js:127 [200797] SegmentTemplate: 27.775999999999954 / 30.123
Debug.js:127 [200799] Getting the next request at index: 55
Debug.js:127 [200800] isMediaFinished - no segment found
Debug.js:127 [200801] getNextFragment audio- Playing at the bleeding live edge and frag is not available yet
Debug.js:127 [201085] Switch to index 0; buffer is empty.
Debug.js:127 [201087] AbrController (video) stay on 0/6 (buffer: 0.389)
Debug.js:127 [201088] ScheduleController video- getNextFragment
Debug.js:127 [201089] Getting the request for video time : 766.08
Debug.js:127 [201091] Index for video time 766.08 is 7
Debug.js:127 [201092] SegmentTemplate: 28 / 30.123
Debug.js:127 [201094] Getting the next request at index: 55
Debug.js:127 [201095] isMediaFinished - no segment found
Debug.js:127 [201096] getNextFragment video- Playing at the bleeding live edge and frag is not available yet
Debug.js:127 [201303] ThroughputRule requesting switch to index: 0 type: audio Average throughput 11499 kbps
Debug.js:127 [201305] AbrController (audio) stay on 0/0 (buffer: 0.512)
Debug.js:127 [201307] ScheduleController audio- getNextFragment
Debug.js:127 [201308] Getting the request for audio time : 765.824
Debug.js:127 [201310] Index for audio time 765.824 is 7
Debug.js:127 [201311] SegmentTemplate: 27.775999999999954 / 30.123
Debug.js:127 [201313] Getting the next request at index: 56
Debug.js:127 [201314] isMediaFinished - no segment found
Debug.js:127 [201316] getNextFragment audio- Playing at the bleeding live edge and frag is not available yet
This is from "playback stops" outcome in Edge 40:
dash.all.debug.js (14831,13)
[115929] ScheduleController video- getNextFragment
dash.all.debug.js (14831,13)
[115929] ScheduleController video- quality has changed, get init request
dash.all.debug.js (14831,13)
[115984] Init fragment finished loading saving to video's init cache
dash.all.debug.js (14831,13)
[115985] Buffered Range for type: video : 734.08 - 764.08
dash.all.debug.js (14831,13)
[115993] AbrController (video) stay on 4/6 (buffer: 19.54)
dash.all.debug.js (14831,13)
[115993] ScheduleController video- getNextFragment
dash.all.debug.js (14831,13)
[115993] Getting the request for video time : 764.1944376
dash.all.debug.js (14831,13)
[115993] Index for video time 764.1944376 is 7
dash.all.debug.js (14831,13)
[115994] SegmentTemplate: 28 / 30.123
dash.all.debug.js (14831,13)
[115994] Getting the next request at index: 8
dash.all.debug.js (14831,13)
[115995] Signal complete.
dash.all.debug.js (14831,13)
[115995] ScheduleController video- getNextFragment - request is null
dash.all.debug.js (14831,13)
[115995] Schedule controller stopping for video
dash.all.debug.js (14831,13)
[115995] Stream is complete
dash.all.debug.js (14831,13)
[125557] AbrController (video) switching from buffer occupancy to throughput ABR rule (buffer: 9.971).
dash.all.debug.js (14831,13)
[125810] AbrController (audio) switching from buffer occupancy to throughput ABR rule (buffer: 9.844).
dash.all.debug.js (14831,13)
[132240] ThroughputRule requesting switch to index: 0 type: audio Average throughput 842 kbps
dash.all.debug.js (14831,13)
[132244] AbrController (audio) stay on 0/0 (buffer: 3.467)
dash.all.debug.js (14831,13)
[132245] ScheduleController audio- getNextFragment
dash.all.debug.js (14831,13)
[132245] Getting the request for audio time : 765.824
dash.all.debug.js (14831,13)
[132246] Index for audio time 765.824 is 7
dash.all.debug.js (14831,13)
[132246] SegmentTemplate: 27.775999999999953 / 30.123
dash.all.debug.js (14831,13)
[132247] Getting the next request at index: 8
dash.all.debug.js (14831,13)
[132247] Signal complete.
dash.all.debug.js (14831,13)
[132248] ScheduleController audio- getNextFragment - request is null
dash.all.debug.js (14831,13)
[132248] Schedule controller stopping for audio
dash.all.debug.js (14831,13)
[132249] Stream is complete
dash.all.debug.js (14831,13)