Dash.js: Caption playback fails in EDGE

Created on 2 Oct 2017  路  15Comments  路  Source: Dash-Industry-Forum/dash.js

Environment

Steps to reproduce

Load page at http://sandflow.com/public/foms2017/CEP150_512kb.htm

Observed behaviour

Only the first few captions are displayed, and then no captions are shown.

Works in Firefox and Chrome.

Console output

HTML1300: Navigation occurred.
CEP150_512kb.htm
Current window: sandflow.com/public/foms2017/CEP150_512kb.htm
[4] EME detected on this user agent! (ProtectionModel_21Jan2015)
dash.all.min.js (18,6034)
[11] Playback Initialized
dash.all.min.js (18,6034)
[12] [dash.js 2.6.0] MediaPlayer has been initialized
dash.all.min.js (18,6034)
XML5619: Incorrect document syntax.
Line: 1, Column 1
[53] Parsing complete: ( xml2json: 25.3ms, objectiron: 7.03ms, total: 0.0323s)
dash.all.min.js (18,6034)
[55] SegmentTimeline detected using calculated Live Edge Time
dash.all.min.js (18,6034)
[58] MediaSource attached to element. Waiting on open...
dash.all.min.js (18,6034)
[59] Manifest has been refreshed at Mon Oct 02 2017 08:45:35 GMT-0700
(Pacific Daylight Time)[1506959135.454]
dash.all.min.js (18,6034)
[98] MediaSource is open!
dash.all.min.js (18,6034)
[99] Duration successfully set to: 49
dash.all.min.js (18,6034)
[99] Added 0 inline events
dash.all.min.js (18,6034)
[100] video codec: video/mp4;codecs="avc3.42C00D"
dash.all.min.js (18,6034)
[106] Schedule controller stopping for video
dash.all.min.js (18,6034)
[110] audio codec: audio/mp4;codecs="mp4a.40.2"
dash.all.min.js (18,6034)
[116] Schedule controller stopping for audio
dash.all.min.js (18,6034)
[122] No text data.
dash.all.min.js (18,6034)
[125] Schedule controller stopping for fragmentedText
dash.all.min.js (18,6034)
[128] No embeddedText data.
dash.all.min.js (18,6034)
[130] No muxed data.
dash.all.min.js (18,6034)
[133] Schedule controller starting for video
dash.all.min.js (18,6034)
[134] Schedule controller starting for audio
dash.all.min.js (18,6034)
[135] Schedule controller starting for fragmentedText
dash.all.min.js (18,6034)
[135] Start Event Controller
dash.all.min.js (18,6034)
[153] Native video element event: play
dash.all.min.js (18,6034)
[154] Top qualityvideo index has changed from undefined to 0
dash.all.min.js (18,6034)
[155] AbrController (video) stay on 0/0 (buffer: 0)
dash.all.min.js (18,6034)
[156] ScheduleController - getNextFragment
dash.all.min.js (18,6034)
[157] ScheduleController - quality has changed, get init request
dash.all.min.js (18,6034)
[158] Top qualityaudio index has changed from undefined to 0
dash.all.min.js (18,6034)
[160] AbrController (audio) stay on 0/0 (buffer: 0)
dash.all.min.js (18,6034)
[160] ScheduleController - getNextFragment
dash.all.min.js (18,6034)
[161] ScheduleController - quality has changed, get init request
dash.all.min.js (18,6034)
[162] Top qualityfragmentedText index has changed from undefined to 0
dash.all.min.js (18,6034)
[163] ScheduleController - getNextFragment
dash.all.min.js (18,6034)
[163] ScheduleController - quality has changed, get init request
dash.all.min.js (18,6034)
[244] Init fragment finished loading saving to audio's init cache
dash.all.min.js (18,6034)
[251] AbrController (audio) stay on 0/0 (buffer: 0)
dash.all.min.js (18,6034)
[251] ScheduleController - getNextFragment
dash.all.min.js (18,6034)
[252] Getting the request for audio time : 0
dash.all.min.js (18,6034)
[253] SegmentList: 0 / 49
dash.all.min.js (18,6034)
[253] ScheduleController - getNextFragment - request is
http://sandflow.com/public/foms2017/CEP150_512kb-audio_dashinit.mp4
dash.all.min.js (18,6034)
[317] Init fragment finished loading saving to video's init cache
dash.all.min.js (18,6034)
[325] Init fragment finished loading saving to fragmentedText's init cache
dash.all.min.js (18,6034)
[335] ScheduleController - getNextFragment
dash.all.min.js (18,6034)
[335] Getting the request for fragmentedText time : 0
dash.all.min.js (18,6034)
[336] SegmentList: 0 / 49
dash.all.min.js (18,6034)
[337] ScheduleController - getNextFragment - request is
http://sandflow.com/public/foms2017/CEP150_512kb-ttml_dashinit.mp4
dash.all.min.js (18,6034)
[487] TTML parser error: SyntaxError
dash.all.min.js (18,6034)
[488] Buffered Range for type: fragmentedText : 0 - 5
dash.all.min.js (18,6034)
[721] Native video element event: loadedmetadata
dash.all.min.js (18,6034)
[734] AbrController (video) stay on 0/0 (buffer: 0)
dash.all.min.js (18,6034)
[734] ScheduleController - getNextFragment
dash.all.min.js (18,6034)
[735] Getting the request for video time : 0
dash.all.min.js (18,6034)
[735] SegmentList: 0 / 49
dash.all.min.js (18,6034)
[736] ScheduleController - getNextFragment - request is
http://sandflow.com/public/foms2017/CEP150_512kb-video_dashinit.mp4
dash.all.min.js (18,6034)
[744] Buffered Range for type: audio : 0 - 4.9919999
dash.all.min.js (18,6034)
[745] Got enough buffer to start.
dash.all.min.js (18,6034)
[752] ThroughputRule requesting switch to index: 0 type: audio
Average throughput 287 kbps
dash.all.min.js (18,6034)
[755] AbrController (audio) stay on 0/0 (buffer: 4.992)
dash.all.min.js (18,6034)
[755] ScheduleController - getNextFragment
dash.all.min.js (18,6034)
[756] Getting the request for audio time : 5
dash.all.min.js (18,6034)
[756] SegmentList: 0 / 49
dash.all.min.js (18,6034)
[757] Getting the next request at index: 1
dash.all.min.js (18,6034)
[765] SegmentList: 5 / 49
dash.all.min.js (18,6034)
[766] ScheduleController - getNextFragment - request is
http://sandflow.com/public/foms2017/CEP150_512kb-audio_dashinit.mp4
dash.all.min.js (18,6034)
[1043] Buffered Range for type: audio : 0 - 9.9839999
dash.all.min.js (18,6034)
[1155] Buffered Range for type: video : 0 - 5.005005
dash.all.min.js (18,6034)
[1155] Got enough buffer to start.
dash.all.min.js (18,6034)
[1193] ThroughputRule requesting switch to index: 0 type: video
Average throughput 4960 kbps
dash.all.min.js (18,6034)
[1194] AbrController (video) stay on 0/0 (buffer: 5.005)
dash.all.min.js (18,6034)
[1195] ScheduleController - getNextFragment
dash.all.min.js (18,6034)
[1195] Prior to making a request for time, NextFragmentRequestRule is
aligning index handler's currentTime with bufferedRange.end. 5 was
changed to 5.005005
dash.all.min.js (18,6034)
[1196] Getting the request for video time : 5.005005
dash.all.min.js (18,6034)
[1196] SegmentList: 0 / 49
dash.all.min.js (18,6034)
[1197] Getting the next request at index: 1
dash.all.min.js (18,6034)
[1197] SegmentList: 5 / 49
dash.all.min.js (18,6034)
[1198] ScheduleController - getNextFragment - request is
http://sandflow.com/public/foms2017/CEP150_512kb-video_dashinit.mp4
dash.all.min.js (18,6034)
[1382] Native video element event: playing
dash.all.min.js (18,6034)
[1511] Buffered Range for type: video : 0 - 10.01001
dash.all.min.js (18,6034)
[1518] ThroughputRule requesting switch to index: 0 type: video
Average throughput 5426 kbps
dash.all.min.js (18,6034)
[1520] AbrController (video) stay on 0/0 (buffer: 9.887)
dash.all.min.js (18,6034)
[1521] ScheduleController - getNextFragment
dash.all.min.js (18,6034)
[1523] Prior to making a request for time, NextFragmentRequestRule is
aligning index handler's currentTime with bufferedRange.end. 10 was
changed to 10.01001
dash.all.min.js (18,6034)
[1523] Getting the request for video time : 10.01001
dash.all.min.js (18,6034)
[1523] Index for video time 10.01001 is 1
dash.all.min.js (18,6034)
[1524] SegmentList: 5 / 49
dash.all.min.js (18,6034)
[1524] Getting the next request at index: 2
dash.all.min.js (18,6034)
[1525] SegmentList: 10 / 49
dash.all.min.js (18,6034)
[1525] ScheduleController - getNextFragment - request is
http://sandflow.com/public/foms2017/CEP150_512kb-video_dashinit.mp4
dash.all.min.js (18,6034)
[1825] Buffered Range for type: video : 0 - 15.015015
Debug.js (106,13)
[1826] AbrController (video) switching from throughput to buffer
occupancy ABR rule (buffer: 14.578).
Debug.js (106,13)
[1833] BOLA ABR rule invoked for media type 'video' with only one bitrate.
Debug.js (106,13)
[1834] AbrController (video) stay on 0/0 (buffer: 14.578)
Debug.js (106,13)
[1834] ScheduleController - getNextFragment
Debug.js (106,13)
[1834] Prior to making a request for time, NextFragmentRequestRule is
aligning index handler's currentTime with bufferedRange.end. 15 was
changed to 15.015015
Debug.js (106,13)
[1835] Getting the request for video time : 15.015015
Debug.js (106,13)
[1835] Index for video time 15.015015 is 2
Debug.js (106,13)
[1835] SegmentList: 10 / 49
Debug.js (106,13)
[1836] Getting the next request at index: 3
Debug.js (106,13)
[1837] SegmentList: 15 / 49
Debug.js (106,13)
[1837] ScheduleController - getNextFragment - request is
http://sandflow.com/public/foms2017/CEP150_512kb-video_dashinit.mp4
Debug.js (106,13)
[2005] ScheduleController - getNextFragment
Debug.js (106,13)
[2006] Getting the request for fragmentedText time : 5
Debug.js (106,13)
[2006] SegmentList: 0 / 49
Debug.js (106,13)
[2007] Getting the next request at index: 1
Debug.js (106,13)
[2007] SegmentList: 5 / 49
Debug.js (106,13)
[2007] ScheduleController - getNextFragment - request is
http://sandflow.com/public/foms2017/CEP150_512kb-ttml_dashinit.mp4
Debug.js (106,13)
[2056] ThroughputRule requesting switch to index: 0 type: audio
Average throughput 920 kbps
Debug.js (106,13)
[2057] AbrController (audio) stay on 0/0 (buffer: 9.492)
Debug.js (106,13)
[2058] ScheduleController - getNextFragment
Debug.js (106,13)
[2058] Getting the request for audio time : 10
Debug.js (106,13)
[2059] Index for audio time 10 is 1
Debug.js (106,13)
[2059] SegmentList: 5 / 49
Debug.js (106,13)
[2060] Getting the next request at index: 2
Debug.js (106,13)
[2060] SegmentList: 10 / 49
Debug.js (106,13)
[2061] ScheduleController - getNextFragment - request is
http://sandflow.com/public/foms2017/CEP150_512kb-audio_dashinit.mp4
Debug.js (106,13)
[2166] TTML parser error: SyntaxError
Debug.js (106,13)
[2167] Buffered Range for type: fragmentedText : 0 - 10
Debug.js (106,13)
[2180] Buffered Range for type: video : 0 - 20.02002
Debug.js (106,13)
[2190] BOLA ABR rule invoked for media type 'video' with only one bitrate.
Debug.js (106,13)
[2191] AbrController (video) stay on 0/0 (buffer: 19.228)
Debug.js (106,13)
[2192] ScheduleController - getNextFragment
Debug.js (106,13)
[2193] Prior to making a request for time, NextFragmentRequestRule is
aligning index handler's currentTime with bufferedRange.end. 20 was
changed to 20.02002
Debug.js (106,13)
[2193] Getting the request for video time : 20.02002
Debug.js (106,13)
[2194] Index for video time 20.02002 is 3
Debug.js (106,13)
[2195] SegmentList: 15 / 49
Debug.js (106,13)
[2196] Getting the next request at index: 4
Debug.js (106,13)
[2196] SegmentList: 20 / 49
Debug.js (106,13)
[2197] ScheduleController - getNextFragment - request is
http://sandflow.com/public/foms2017/CEP150_512kb-video_dashinit.mp4
Debug.js (106,13)
[2475] Buffered Range for type: video : 0 - 25.025025
Debug.js (106,13)
[2482] BOLA ABR rule invoked for media type 'video' with only one bitrate.
Debug.js (106,13)
[2483] AbrController (video) stay on 0/0 (buffer: 23.938)
Debug.js (106,13)
[2484] ScheduleController - getNextFragment
Debug.js (106,13)
[2484] Prior to making a request for time, NextFragmentRequestRule is
aligning index handler's currentTime with bufferedRange.end. 25 was
changed to 25.025025
Debug.js (106,13)
[2484] Getting the request for video time : 25.025025
Debug.js (106,13)
[2493] Index for video time 25.025025 is 4
Debug.js (106,13)
[2493] SegmentList: 20 / 49
Debug.js (106,13)
[2494] Getting the next request at index: 5
Debug.js (106,13)
[2494] SegmentList: 25 / 49
Debug.js (106,13)
[2495] ScheduleController - getNextFragment - request is
http://sandflow.com/public/foms2017/CEP150_512kb-video_dashinit.mp4
Debug.js (106,13)
[2660] Buffered Range for type: audio : 0 - 14.9759999
Debug.js (106,13)
[2660] AbrController (audio) switching from throughput to buffer
occupancy ABR rule (buffer: 13.705).
Debug.js (106,13)
[2667] BOLA ABR rule invoked for media type 'audio' with only one bitrate.
Debug.js (106,13)
[2667] AbrController (audio) stay on 0/0 (buffer: 13.705)
Debug.js (106,13)
[2668] ScheduleController - getNextFragment
Debug.js (106,13)
[2668] Getting the request for audio time : 15
Debug.js (106,13)
[2668] Index for audio time 15 is 2
Debug.js (106,13)
[2668] SegmentList: 10 / 49
Debug.js (106,13)
[2669] Getting the next request at index: 3
Debug.js (106,13)
[2669] SegmentList: 15 / 49
Debug.js (106,13)
[2670] ScheduleController - getNextFragment - request is
http://sandflow.com/public/foms2017/CEP150_512kb-audio_dashinit.mp4
Debug.js (106,13)
[2743] Buffered Range for type: video : 0 - 30.03003
Debug.js (106,13)
[2749] BOLA ABR rule invoked for media type 'video' with only one bitrate.
Debug.js (106,13)
[2750] AbrController (video) stay on 0/0 (buffer: 28.675)
Debug.js (106,13)
[2751] ScheduleController - getNextFragment
Debug.js (106,13)
[2751] Prior to making a request for time, NextFragmentRequestRule is
aligning index handler's currentTime with bufferedRange.end. 30 was
changed to 30.03003
Debug.js (106,13)
[2751] Getting the request for video time : 30.03003
Debug.js (106,13)
[2752] Index for video time 30.03003 is 5
Debug.js (106,13)
[2752] SegmentList: 25 / 49
Debug.js (106,13)
[2752] Getting the next request at index: 6
Debug.js (106,13)
[2753] SegmentList: 30 / 49
Debug.js (106,13)
[2754] ScheduleController - getNextFragment - request is
http://sandflow.com/public/foms2017/CEP150_512kb-video_dashinit.mp4
Debug.js (106,13)
[2927] Buffered Range for type: audio : 0 - 19.9679999
Debug.js (106,13)
[2934] BOLA ABR rule invoked for media type 'audio' with only one bitrate.
Debug.js (106,13)
[2934] AbrController (audio) stay on 0/0 (buffer: 18.43)
Debug.js (106,13)
[2935] ScheduleController - getNextFragment
Debug.js (106,13)
[2935] Getting the request for audio time : 20
Debug.js (106,13)
[2935] Index for audio time 20 is 3
Debug.js (106,13)
[2936] SegmentList: 15 / 49
Debug.js (106,13)
[2936] Getting the next request at index: 4
Debug.js (106,13)
[2936] SegmentList: 20 / 49
Debug.js (106,13)
[2937] ScheduleController - getNextFragment - request is
http://sandflow.com/public/foms2017/CEP150_512kb-audio_dashinit.mp4
Debug.js (106,13)
[3005] Buffered Range for type: video : 0 - 35.035035
Debug.js (106,13)
[3191] Buffered Range for type: audio : 0 - 24.9599999
Debug.js (106,13)
[3199] BOLA ABR rule invoked for media type 'audio' with only one bitrate.
Debug.js (106,13)
[3200] AbrController (audio) stay on 0/0 (buffer: 23.157)
Debug.js (106,13)
[3200] ScheduleController - getNextFragment
Debug.js (106,13)
[3201] Getting the request for audio time : 25
Debug.js (106,13)
[3201] Index for audio time 25 is 4
Debug.js (106,13)
[3201] SegmentList: 20 / 49
Debug.js (106,13)
[3202] Getting the next request at index: 5
Debug.js (106,13)
[3202] SegmentList: 25 / 49
Debug.js (106,13)
[3203] ScheduleController - getNextFragment - request is
http://sandflow.com/public/foms2017/CEP150_512kb-audio_dashinit.mp4
Debug.js (106,13)
[3393] Buffered Range for type: audio : 0 - 29.9519999
Debug.js (106,13)
[3400] BOLA ABR rule invoked for media type 'audio' with only one bitrate.
Debug.js (106,13)
[3403] AbrController (audio) stay on 0/0 (buffer: 27.947)
Debug.js (106,13)
[3405] ScheduleController - getNextFragment
Debug.js (106,13)
[3406] Getting the request for audio time : 30
Debug.js (106,13)
[3407] Index for audio time 30 is 5
Debug.js (106,13)
[3408] SegmentList: 25 / 49
Debug.js (106,13)
[3409] Getting the next request at index: 6
Debug.js (106,13)
[3409] SegmentList: 30 / 49
Debug.js (106,13)
[3410] ScheduleController - getNextFragment - request is
http://sandflow.com/public/foms2017/CEP150_512kb-audio_dashinit.mp4
Debug.js (106,13)
[3594] Buffered Range for type: audio : 0 - 34.9439999
Debug.js (106,13)
[3602] BOLA ABR rule invoked for media type 'audio' with only one bitrate.
Debug.js (106,13)
[3603] AbrController (audio) stay on 0/0 (buffer: 32.738)
Debug.js (106,13)
[3603] ScheduleController - getNextFragment
Debug.js (106,13)
[3604] Getting the request for audio time : 35
Debug.js (106,13)
[3604] Index for audio time 35 is 6
Debug.js (106,13)
[3604] SegmentList: 30 / 49
Debug.js (106,13)
[3605] Getting the next request at index: 7
Debug.js (106,13)
[3605] SegmentList: 35 / 49
Debug.js (106,13)
[3605] ScheduleController - getNextFragment - request is
http://sandflow.com/public/foms2017/CEP150_512kb-audio_dashinit.mp4
Debug.js (106,13)
[3645] Cue enter id:cue_TTML_0
Debug.js (106,13)
[3802] Buffered Range for type: audio : 0 - 39.9359999
Debug.js (106,13)
[6138] Cue exit id:cue_TTML_0
Debug.js (106,13)
[6140] Cue enter id:cue_TTML_1
Debug.js (106,13)
[6390] Cue exit id:cue_TTML_1
Debug.js (106,13)
[6703] ScheduleController - getNextFragment
Debug.js (106,13)
[6704] Getting the request for fragmentedText time : 10
Debug.js (106,13)
[6704] Index for fragmentedText time 10 is 1
Debug.js (106,13)
[6705] SegmentList: 5 / 49
Debug.js (106,13)
[6706] Getting the next request at index: 2
Debug.js (106,13)
[6706] SegmentList: 10 / 49
Debug.js (106,13)
[6707] ScheduleController - getNextFragment - request is
http://sandflow.com/public/foms2017/CEP150_512kb-ttml_dashinit.mp4
Debug.js (106,13)
[6846] TTML parser error: SyntaxError
Debug.js (106,13)
[6846] Buffered Range for type: fragmentedText : 0 - 15
Debug.js (106,13)
[7017] BOLA ABR rule invoked for media type 'video' with only one bitrate.
Debug.js (106,13)
[7017] AbrController (video) stay on 0/0 (buffer: 29.536)
Debug.js (106,13)
[7019] ScheduleController - getNextFragment
Debug.js (106,13)
[7020] Prior to making a request for time, NextFragmentRequestRule is
aligning index handler's currentTime with bufferedRange.end. 35 was
changed to 35.035035
Debug.js (106,13)
[7020] Getting the request for video time : 35.035035
Debug.js (106,13)
[7021] Index for video time 35.035035 is 6
Debug.js (106,13)
[7022] SegmentList: 30 / 49
Debug.js (106,13)
[7023] Getting the next request at index: 7
Debug.js (106,13)
[7023] SegmentList: 35 / 49
Debug.js (106,13)
[7025] ScheduleController - getNextFragment - request is
http://sandflow.com/public/foms2017/CEP150_512kb-video_dashinit.mp4
Debug.js (106,13)
[7765] Buffered Range for type: video : 0 - 40.04004
Debug.js (106,13)
[8332] BOLA ABR rule invoked for media type 'audio' with only one bitrate.
Debug.js (106,13)
[8333] AbrController (audio) stay on 0/0 (buffer: 33.184)
Debug.js (106,13)
[8333] ScheduleController - getNextFragment
Debug.js (106,13)
[8333] Getting the request for audio time : 40
Debug.js (106,13)
[8334] Index for audio time 40 is 7
Debug.js (106,13)
[8334] SegmentList: 35 / 49
Debug.js (106,13)
[8335] Getting the next request at index: 8
Debug.js (106,13)
[8335] SegmentList: 40 / 49
Debug.js (106,13)
[8336] ScheduleController - getNextFragment - request is
http://sandflow.com/public/foms2017/CEP150_512kb-audio_dashinit.mp4
Debug.js (106,13)
[8436] Buffered Range for type: audio : 0 - 44.9279999
Debug.js (106,13)
[11780] BOLA ABR rule invoked for media type 'video' with only one bitrate.
Debug.js (106,13)
[11781] AbrController (video) stay on 0/0 (buffer: 29.783)
Debug.js (106,13)
[11781] ScheduleController - getNextFragment
Debug.js (106,13)
[11781] Prior to making a request for time, NextFragmentRequestRule is
aligning index handler's currentTime with bufferedRange.end. 40 was
changed to 40.04004
Debug.js (106,13)
[11782] Getting the request for video time : 40.04004
Debug.js (106,13)
[11782] Index for video time 40.04004 is 7
Debug.js (106,13)
[11783] SegmentList: 35 / 49
Debug.js (106,13)
[11783] Getting the next request at index: 8
Debug.js (106,13)
[11784] SegmentList: 40 / 49
Debug.js (106,13)
[11784] ScheduleController - getNextFragment - request is
http://sandflow.com/public/foms2017/CEP150_512kb-video_dashinit.mp4
Debug.js (106,13)
[11866] ScheduleController - getNextFragment
Debug.js (106,13)
[11867] Getting the request for fragmentedText time : 15
Debug.js (106,13)
[11868] Index for fragmentedText time 15 is 2
Debug.js (106,13)
[11868] SegmentList: 10 / 49
Debug.js (106,13)
[11871] Getting the next request at index: 3
Debug.js (106,13)
[11871] SegmentList: 15 / 49
Debug.js (106,13)
[11871] ScheduleController - getNextFragment - request is
http://sandflow.com/public/foms2017/CEP150_512kb-ttml_dashinit.mp4
Debug.js (106,13)
[12118] TTML parser error: SyntaxError
Debug.js (106,13)
[12119] Buffered Range for type: fragmentedText : 0 - 20
Debug.js (106,13)
[13198] Native video element event: pause
Debug.js (106,13)
[17106] Buffered Range for type: video : 0 - 45.045045
Debug.js (106,13)
[17460] BOLA ABR rule invoked for media type 'audio' with only one bitrate.
Debug.js (106,13)
[17462] AbrController (audio) stay on 0/0 (buffer: 33.108)
Debug.js (106,13)
[17463] ScheduleController - getNextFragment
Debug.js (106,13)
[17464] Getting the request for audio time : 45
Debug.js (106,13)
[17465] Index for audio time 45 is 8
Debug.js (106,13)
[17466] SegmentList: 40 / 49
Debug.js (106,13)
[17468] Getting the next request at index: 9
Debug.js (106,13)
[17469] SegmentList: 45 / 49
Debug.js (106,13)
[17471] ScheduleController - getNextFragment - request is
http://sandflow.com/public/foms2017/CEP150_512kb-audio_dashinit.mp4
Debug.js (106,13)
[17776] Buffered Range for type: audio : 0 - 48.0213333
Debug.js (106,13)

More Information Required

Most helpful comment

After doing some research with @siropeich related with the issue I had with Edge, we discovered a problem with Edge and Access-Control-Allow-Headers. If your HTTP server responses contain an Access-Control-Allow-Headers header bigger than 1024 bytes, latest version of Edge crashes. That's the case of your server (it responds with a very long Access-Control-Allow-Headers header) and the reason because I could only reproduce the issue when using a third party hostname.

I have filed an issue in Edge browser issue tracking system: https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/14110516/

All 15 comments

Hi @palemieux ,

I can't access your stream in my local page. There is a cross domain issue. Could you, please, fix it? It will be easier to investigate.

thanks,
Nico

@nicosang Should be fixed.

@palemieux, right see the issue. The problem is a mix of two things:

  1. Any of the TTML fragments of your stream is declaring all the captions of the stream. When using fragmented text caption it is supposed that each fragment includes captions just for its specific time range. As declared in your mpd, each fragmented text should have a duration of 5 seconds although each of your text chunks declares captions for 48 seconds (full length of the stream)
  1. Previous point impact on how start/end time of each cue is calculated in dash.js, making some of the cues to have a start time higher than end time, what in Edge raises an exception. That's the reason behind after the second cue (the last one below 5 seconds, duration of first chunk) captions stop working in Edge.

We will put a fix to make dash.js more resilience when this situation happens but I recommend you to fix your fragmented text chunks to make it be as any player will expect.

Content of each one of your fragmented text (supposed to be 5 seconds chunks):

<?xml version="1.0" encoding="UTF-8"?>
<tt xml:lang="en"
    xmlns="http://www.w3.org/ns/ttml"
    xmlns:ttm="http://www.w3.org/ns/ttml#metadata" 
    xmlns:tts="http://www.w3.org/ns/ttml#styling"
    xmlns:ttp="http://www.w3.org/ns/ttml#parameter" 
    xmlns:ittp="http://www.w3.org/ns/ttml/profile/imsc1#parameter"
    xmlns:ebutts="urn:ebu:tt:style"
    ttp:cellResolution="40 30"
    ttp:profile="http://www.w3.org/ns/ttml/profile/imsc1/text">

    <head>
      <styling>
            <style xml:id="s1" tts:backgroundColor="black"/>
        </styling>
        <layout>
            <region xml:id="area1" tts:origin="30% 10%" tts:extent="60% 80%" tts:displayAlign="after" tts:textAlign="left" ebutts:linePadding="0.5c" tts:color="white" tts:lineHeight="100%"/>
        </layout>
    </head>
    <body>
        <div>
            <p region="area1" begin="2s" end="7.4s"><span style="s1">Let the word go forth</span></p>
            <p region="area1" begin="4.7s" end="10.1s"><span style="s1">from this time and place,</span></p>
            <p region="area1" begin="7.4s" end="12.8s"><span style="s1">to friend and foe alike,</span></p>
            <p region="area1" begin="10.1s" end="15.5s"><span style="s1">that the torch has been passed</span></p>
            <p region="area1" begin="12.8s" end="18.2s"><span style="s1">to a new generation of Americans</span></p>
            <p region="area1" begin="15.5s" end="20.9s"><span style="s1">--born in this century,</span></p>
            <p region="area1" begin="18.2s" end="23.6s"><span style="s1">tempered by war,</span></p>
            <p region="area1" begin="20.9s" end="26.3s"><span style="s1">disciplined by a hard and bitter peace,</span></p>
            <p region="area1" begin="23.6s" end="29s"><span style="s1">proud of our ancient heritage--</span></p>
            <p region="area1" begin="26.3s" end="31.7s"><span style="s1">and unwilling to witness or permit</span></p>
            <p region="area1" begin="29s" end="34.4s"><span style="s1">the slow undoing</span></p>
            <p region="area1" begin="31.7s" end="37.1s"><span style="s1">of those human rights</span></p>
            <p region="area1" begin="34.4s" end="39.8s"><span style="s1">to which this nation has always been committed,</span></p>
            <p region="area1" begin="37.1s" end="42.5s"><span style="s1">and to which we are committed today</span></p>
            <p region="area1" begin="39.8s" end="48s"><span style="s1">at home</span></p>
            <p region="area1" begin="42.5s" end="48s"><span style="s1">and around the world.</span></p>
        </div>
    </body>
</tt>

@epiclabsDASH ISO 14496-30 states that _the begin and end attributes of the element, if used are relative to the start of the track, not relative to the start of the sample_. In other words, ISO 14496-30 allows TTML fragments to have ISDs before and after the fragment time, and there is no requirement that each fragment includes captions just for its specific time range. Where is this restriction specified?

Hi @palemieux, yes, you are right, they are always taken as times relative to the start of the track. I dont think there is any restriction regarding what I mentioned in ISO 14496-30, in fact ttml content itself is correct. I was more talking about the declaration of those fragmented text chunks in the mpd.

What is causing a conflict is those segments are being declared as it were 5 seconds in the mpd (<SegmentList timescale="1000" duration="5000">) but they are not. I cant find any specific point in DASH spec about how this situation should be managed (typing from my mobile phone, not the best device to browse dash spec) but will take a look tomorrow. In any case I think dash.js should be able to deal with these situations.

Thanks!

I'm not sure if it has any impact here, but when I worked on subtitles in dash.js about 2 years ago, I noted that Edge (and IE11) could only display one cue at a time, while all other browsers could display multiple.

For

 <p region="area1" begin="2s" end="7.4s"><span style="s1">Let the word go forth</span></p>
 <p region="area1" begin="4.7s" end="10.1s"><span style="s1">from this time and place,</span></p>

one would then need to make three cues corresponding to the time intervals:

 2-4.7s, 4.7-7.4s, and 7.4-10.1s

where the middle one has two lines of text. I think that is already done in imscJS, but it was not done in the previous TTML parser.

Hi @palemieux,

Did you change anything in your stream in the last hours? While trying to test it in my end I get a weird behavior in Edge browser: whenever I try to play it browser refresh the page. Never saw that before.

I thought it could be related with the use of AVC3 but have tested other AVC3 streams in dash.js+Edge without any issue.

Any idea?

I did not touch the stream.

And can you reproduce the same issue in your end? I mean, browser reloaded when trying to start the stream using Edge?

I mean, browser reloaded when trying to start the stream using Edge?

Same symptom as before: captions for the first segment are displayed, and then no other captions are displayed.

Microsoft Edge 40.15063.0.0

Still don't know the reason (Edge logs are all but verbose) but when trying to load your stream from a third party hostname (for example, from the hosted dashjs reference player) makes Edge crash.

@palemieux, would it be possible for you sharing your stream with me (mpd + chunks)? I would like to do some local testing here. If yes, you can send a link with the files to my email address ([email protected])

@epiclabsDASH Links sent.

Many thanks. Could you please confirm you see everything ok in the following link? http://eight-playground.surge.sh/samples/edge/

Confirmed.

After doing some research with @siropeich related with the issue I had with Edge, we discovered a problem with Edge and Access-Control-Allow-Headers. If your HTTP server responses contain an Access-Control-Allow-Headers header bigger than 1024 bytes, latest version of Edge crashes. That's the case of your server (it responds with a very long Access-Control-Allow-Headers header) and the reason because I could only reproduce the issue when using a third party hostname.

I have filed an issue in Edge browser issue tracking system: https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/14110516/

Was this page helpful?
0 / 5 - 0 ratings

Related issues

carlanton picture carlanton  路  5Comments

qchroman picture qchroman  路  4Comments

Murmur picture Murmur  路  4Comments

ruslandinov picture ruslandinov  路  4Comments

AxelDelmas picture AxelDelmas  路  6Comments