Video get stalled when the available bandwidth drops suddenly
Created by: jeffcunat
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: http://rdmedia.bbc.co.uk/dash/ondemand/testcard/1/client_manifest-events.mpd
- Dash.js version: 2.6.2
- Browser name/version: Chrome 61
- OS name/version: Windows 10 Entreprise
Steps to reproduce
- I start playing video with no throttling (bandwidth ~40 Mbps). I play the top quality video representation
- I throttle suddenly the bandwith if Charles Proxy tool to a low bandwidth (512 kbps)
Observed behaviour
The buffer level starts to decrease from 60 to 0 regularly There is no switch of representation until the video get stalled completely. The player still plays and downloads the top quality representation
Console output
Debug.js:127 [32712] Buffered Range for type: audio : 0 - 80.639999
Debug.js:127 [33689] AbrController (video) stay on 12/12 (buffer: 59.86)
Debug.js:127 [33690] ScheduleController - getNextFragment
Debug.js:127 [33691] Getting the request for video time : 76.8
Debug.js:127 [33692] Index for video time 76.8 is 19
Debug.js:127 [33693] SegmentTemplate: 72.96 / 3600.04
Debug.js:127 [33694] Getting the next request at index: 20
Debug.js:127 [33695] SegmentTemplate: 76.8 / 3600.04
Debug.js:127 [33696] ScheduleController - getNextFragment - request is http://rdmedia.bbc.co.uk/dash/ondemand/testcard/1/avc3-events/1920x1080i25/000021.m4s
Debug.js:127 [34522] Buffered Range for type: video : 0 - 80.64
Debug.js:127 [37530] AbrController (video) stay on 12/12 (buffer: 59.7)
Debug.js:127 [37531] ScheduleController - getNextFragment
Debug.js:127 [37532] Getting the request for video time : 80.64
Debug.js:127 [37533] Index for video time 80.64 is 20
Debug.js:127 [37534] SegmentTemplate: 76.8 / 3600.04
Debug.js:127 [37535] Getting the next request at index: 21
Debug.js:127 [37535] SegmentTemplate: 80.64 / 3600.04
Debug.js:127 [37536] ScheduleController - getNextFragment - request is http://rdmedia.bbc.co.uk/dash/ondemand/testcard/1/avc3-events/1920x1080i25/000022.m4s
Debug.js:127 [38338] Buffered Range for type: video : 0 - 84.48
Debug.js:127 [38726] BOLA ABR rule invoked for media type 'audio' with only one bitrate.
Debug.js:127 [38728] AbrController (audio) stay on 0/0 (buffer: 58.7)
Debug.js:127 [38729] ScheduleController - getNextFragment
Debug.js:127 [38730] Getting the request for audio time : 80.64
Debug.js:127 [38731] Index for audio time 80.64 is 20
Debug.js:127 [38732] SegmentTemplate: 76.8 / 3600.04
Debug.js:127 [38733] Getting the next request at index: 21
Debug.js:127 [38734] SegmentTemplate: 80.64 / 3600.04
Debug.js:127 [38735] ScheduleController - getNextFragment - request is http://rdmedia.bbc.co.uk/dash/ondemand/testcard/1/audio/320kbps-5_1/000022.m4s
Debug.js:127 [38932] Buffered Range for type: audio : 0 - 84.479999
Debug.js:127 [38935] BOLA ABR rule invoked for media type 'audio' with only one bitrate.
Debug.js:127 [38935] AbrController (audio) stay on 0/0 (buffer: 62.092)
Debug.js:127 [38935] ScheduleController - getNextFragment
Debug.js:127 [38935] Getting the request for audio time : 84.48
Debug.js:127 [38935] Index for audio time 84.48 is 21
Debug.js:127 [38936] SegmentTemplate: 80.64 / 3600.04
Debug.js:127 [38936] Getting the next request at index: 22
Debug.js:127 [38936] SegmentTemplate: 84.47999999999999 / 3600.04
Debug.js:127 [38936] ScheduleController - getNextFragment - request is http://rdmedia.bbc.co.uk/dash/ondemand/testcard/1/audio/320kbps-5_1/000023.m4s
Debug.js:127 [39135] Buffered Range for type: audio : 0 - 88.319999
Debug.js:127 [41346] AbrController (video) stay on 12/12 (buffer: 59.79)
Debug.js:127 [41346] ScheduleController - getNextFragment
Debug.js:127 [41347] Getting the request for video time : 84.48
Debug.js:127 [41348] Index for video time 84.48 is 21
Debug.js:127 [41349] SegmentTemplate: 80.64 / 3600.04
Debug.js:127 [41350] Getting the next request at index: 22
Debug.js:127 [41350] SegmentTemplate: 84.47999999999999 / 3600.04
Debug.js:127 [41351] ScheduleController - getNextFragment - request is http://rdmedia.bbc.co.uk/dash/ondemand/testcard/1/avc3-events/1920x1080i25/000023.m4s
Debug.js:127 [42123] Buffered Range for type: video : 0 - 88.32
Debug.js:127 [44941] Start Event 2 at 28.39705
Debug.js:127 [45134] AbrController (video) stay on 12/12 (buffer: 59.88)
Debug.js:127 [45135] ScheduleController - getNextFragment
Debug.js:127 [45136] Getting the request for video time : 88.32
Debug.js:127 [45137] Index for video time 88.32 is 22
Debug.js:127 [45138] SegmentTemplate: 84.47999999999999 / 3600.04
Debug.js:127 [45139] Getting the next request at index: 23
Debug.js:127 [45140] SegmentTemplate: 88.32 / 3600.04
Debug.js:127 [45141] ScheduleController - getNextFragment - request is http://rdmedia.bbc.co.uk/dash/ondemand/testcard/1/avc3-events/1920x1080i25/000024.m4s
Debug.js:127 [45943] Add inband event with id 6
Debug.js:127 [45948] Buffered Range for type: video : 0 - 92.16
Debug.js:127 [46150] BOLA ABR rule invoked for media type 'audio' with only one bitrate.
Debug.js:127 [46152] AbrController (audio) stay on 0/0 (buffer: 58.739)
Debug.js:127 [46153] ScheduleController - getNextFragment
Debug.js:127 [46154] Getting the request for audio time : 88.32
Debug.js:127 [46156] Index for audio time 88.32 is 22
Debug.js:127 [46157] SegmentTemplate: 84.47999999999999 / 3600.04
Debug.js:127 [46158] Getting the next request at index: 23
Debug.js:127 [46160] SegmentTemplate: 88.32 / 3600.04
Debug.js:127 [46162] ScheduleController - getNextFragment - request is http://rdmedia.bbc.co.uk/dash/ondemand/testcard/1/audio/320kbps-5_1/000024.m4s
Debug.js:127 [46276] Buffered Range for type: audio : 0 - 92.159999
Debug.js:127 [46279] BOLA ABR rule invoked for media type 'audio' with only one bitrate.
Debug.js:127 [46279] AbrController (audio) stay on 0/0 (buffer: 62.427)
Debug.js:127 [46279] ScheduleController - getNextFragment
Debug.js:127 [46279] Getting the request for audio time : 92.16
Debug.js:127 [46280] Index for audio time 92.16 is 23
Debug.js:127 [46280] SegmentTemplate: 88.32 / 3600.04
Debug.js:127 [46280] Getting the next request at index: 24
Debug.js:127 [46280] SegmentTemplate: 92.16 / 3600.04
Debug.js:127 [46280] ScheduleController - getNextFragment - request is http://rdmedia.bbc.co.uk/dash/ondemand/testcard/1/audio/320kbps-5_1/000025.m4s
Debug.js:127 [46389] Buffered Range for type: audio : 0 - 95.999999
Debug.js:127 [48968] AbrController (video) stay on 12/12 (buffer: 59.969)
Debug.js:127 [48968] ScheduleController - getNextFragment
Debug.js:127 [48969] Getting the request for video time : 92.16
Debug.js:127 [48969] Index for video time 92.16 is 23
Debug.js:127 [48969] SegmentTemplate: 88.32 / 3600.04
Debug.js:127 [48969] Getting the next request at index: 24
Debug.js:127 [48970] SegmentTemplate: 92.16 / 3600.04
Debug.js:127 [48970] ScheduleController - getNextFragment - request is http://rdmedia.bbc.co.uk/dash/ondemand/testcard/1/avc3-events/1920x1080i25/000025.m4s
Debug.js:127 [49765] Buffered Range for type: video : 0 - 96
Debug.js:127 [53276] AbrController (video) stay on 12/12 (buffer: 59.558)
Debug.js:127 [53277] ScheduleController - getNextFragment
Debug.js:127 [53278] Getting the request for video time : 96
Debug.js:127 [53279] Index for video time 96 is 24
Debug.js:127 [53280] SegmentTemplate: 92.16 / 3600.04
Debug.js:127 [53281] Getting the next request at index: 25
Debug.js:127 [53282] SegmentTemplate: 96 / 3600.04
Debug.js:127 [53283] ScheduleController - getNextFragment - request is http://rdmedia.bbc.co.uk/dash/ondemand/testcard/1/avc3-events/1920x1080i25/000026.m4s
Debug.js:127 [58255] Start Event 3 at 41.710641
Debug.js:127 [60755] Remove Event 3 at time 44.211105
Debug.js:127 [73015] BOLA ABR rule invoked for media type 'audio' with only one bitrate.
Debug.js:127 [73018] AbrController (audio) stay on 0/0 (buffer: 39.559)
Debug.js:127 [73019] ScheduleController - getNextFragment
Debug.js:127 [73021] Getting the request for audio time : 96
Debug.js:127 [73023] Index for audio time 96 is 24
Debug.js:127 [73025] SegmentTemplate: 92.16 / 3600.04
Debug.js:127 [73027] Getting the next request at index: 25
Debug.js:127 [73029] SegmentTemplate: 96 / 3600.04
Debug.js:127 [73032] ScheduleController - getNextFragment - request is http://rdmedia.bbc.co.uk/dash/ondemand/testcard/1/audio/320kbps-5_1/000026.m4s
Debug.js:127 [73707] pruning buffer: 27.161935999999997 seconds.
Debug.js:127 [73708] pruning buffer: 27.161935999999997 seconds.
Debug.js:127 [77056] Start Event 4 at 60.511142
Debug.js:127 [77960] Buffered Range for type: audio : 27.008 - 99.839999
Debug.js:127 [88056] Start Event 5 at 71.510555
Debug.js:127 [90556] Remove Event 5 at time 74.010896
Debug.js:127 [102736] AbrController (video) switching from buffer occupancy to throughput ABR rule (buffer: 9.810).
Debug.js:127 [104955] pruning buffer: 27.689237000000006 seconds.
Debug.js:127 [104955] pruning buffer: 31.40123700000001 seconds.
Debug.js:127 [106736] AbrController (audio) switching from buffer occupancy to throughput ABR rule (buffer: 9.650).
Debug.js:127 [106756] Start Event 6 at 90.211065
Debug.js:127 [112236] Buffer is empty! Stalling!
Debug.js:127 [112236] Waiting for more buffer before starting playback.
Debug.js:127 [112237] Native video element event: ratechange: 0
Debug.js:127 [117839] Buffered Range for type: video : 61.44 - 99.84
Debug.js:127 [117839] Native video element event: playing
Debug.js:127 [117839] Got enough buffer to start.
Debug.js:127 [117840] Native video element event: ratechange: 1
Debug.js:127 [117841] ThroughputRule requesting switch to index: 12 type: video Average throughput 27648 kbps
Debug.js:127 [117842] AbrController (video) stay on 12/12 (buffer: 4.149)
Debug.js:127 [117842] ScheduleController - getNextFragment
Debug.js:127 [117842] Getting the request for video time : 99.84
Debug.js:127 [117842] Index for video time 99.84 is 25
Debug.js:127 [117842] SegmentTemplate: 96 / 3600.04
Debug.js:127 [117843] Getting the next request at index: 26
Debug.js:127 [117843] SegmentTemplate: 99.84 / 3600.04
Debug.js:127 [117843] ScheduleController - getNextFragment - request is http://rdmedia.bbc.co.uk/dash/ondemand/testcard/1/avc3-events/1920x1080i25/000027.m4s
Debug.js:127 [118548] ThroughputRule requesting switch to index: 0 type: audio Average throughput 34136 kbps
Debug.js:127 [118551] AbrController (audio) stay on 0/0 (buffer: 3.5)
Debug.js:127 [118552] ScheduleController - getNextFragment
Debug.js:127 [118554] Getting the request for audio time : 99.84
Debug.js:127 [118556] Index for audio time 99.84 is 25
Debug.js:127 [118558] SegmentTemplate: 96 / 3600.04
Debug.js:127 [118561] Getting the next request at index: 26
Debug.js:127 [118563] SegmentTemplate: 99.84 / 3600.04
Debug.js:127 [118566] ScheduleController - getNextFragment - request is http://rdmedia.bbc.co.uk/dash/ondemand/testcard/1/audio/320kbps-5_1/000027.m4s
Debug.js:127 [121486] Buffer is empty! Stalling!
Debug.js:127 [121487] Waiting for more buffer before starting playback.
Debug.js:127 [121487] Buffer is empty! Stalling!
Debug.js:127 [121487] Waiting for more buffer before starting playback.
Debug.js:127 [121490] Native video element event: ratechange: 0
Debug.js:127 [123390] Buffered Range for type: audio : 58.005333 - 103.679999
Debug.js:127 [123390] Got enough buffer to start.
Debug.js:127 [136059] pruning buffer: 7.901007000000007 seconds.
Debug.js:127 [136060] pruning buffer: 11.335674000000004 seconds.
Debug.js:127 [167109] pruning buffer: 0.22100700000000018 seconds.
Debug.js:127 [167110] pruning buffer: 0.3276740000000018 seconds.
Debug.js:127 [183050] Add inband event with id 7
Debug.js:127 [183054] Buffered Range for type: video : 69.12 - 103.68
Debug.js:127 [183055] Native video element event: playing
Debug.js:127 [183055] Got enough buffer to start.
Debug.js:127 [183055] Native video element event: ratechange: 1
Debug.js:127 [183057] ThroughputRule requesting switch to index: 12 type: video Average throughput 18335 kbps
Debug.js:127 [183057] AbrController (video) stay on 12/12 (buffer: 4.339)
Debug.js:127 [183057] ScheduleController - getNextFragment
Debug.js:127 [183058] Getting the request for video time : 103.68
Debug.js:127 [183058] Index for video time 103.68 is 26
Debug.js:127 [183058] SegmentTemplate: 99.84 / 3600.04
Debug.js:127 [183058] Getting the next request at index: 27
Debug.js:127 [183058] SegmentTemplate: 103.67999999999999 / 3600.04
Debug.js:127 [183058] ScheduleController - getNextFragment - request is http://rdmedia.bbc.co.uk/dash/ondemand/testcard/1/avc3-events/1920x1080i25/000028.m4s
Debug.js:127 [184078] ThroughputRule requesting switch to index: 0 type: audio Average throughput 22208 kbps
Debug.js:127 [184079] AbrController (audio) stay on 0/0 (buffer: 3.65)
Debug.js:127 [184080] ScheduleController - getNextFragment
Debug.js:127 [184081] Getting the request for audio time : 103.68
Debug.js:127 [184082] Index for audio time 103.68 is 26
Debug.js:127 [184083] SegmentTemplate: 99.84 / 3600.04
Debug.js:127 [184084] Getting the next request at index: 27
Debug.js:127 [184085] SegmentTemplate: 103.67999999999999 / 3600.04
Debug.js:127 [184086] ScheduleController - getNextFragment - request is http://rdmedia.bbc.co.uk/dash/ondemand/testcard/1/audio/320kbps-5_1/000028.m4s
Debug.js:127 [184359] Start Event 7 at 100.650802
Debug.js:127 [186972] Remove Event 7 at time 103.263447
Debug.js:127 [186988] Buffer is empty! Stalling!
Debug.js:127 [186988] Waiting for more buffer before starting playback.
Debug.js:127 [186988] Buffer is empty! Stalling!
Debug.js:127 [186988] Waiting for more buffer before starting playback.
Debug.js:127 [186989] Native video element event: ratechange: 0
Debug.js:127 [188981] Buffered Range for type: audio : 69.013333 - 107.519999
Debug.js:127 [188982] Got enough buffer to start.
Debug.js:127 [198061] pruning buffer: 4.159593000000001 seconds.
Debug.js:127 [198062] pruning buffer: 4.266260000000003 seconds.