dash.js
dash.js copied to clipboard
Stability at high bitrate playback
Environment
- [x] The MPD passes the DASH-IF Conformance Tool on https://conformance.dashif.org/
- [x] The stream has correct Access-Control-Allow-Origin headers (CORS)
- [x] There are no network errors such as 404s in the browser console when trying to play the stream
- [x] The issue observed is not mentioned on https://github.com/Dash-Industry-Forum/dash.js/wiki/FAQ
- [x] 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://speed.leading-edge.io/stream/v2/speedtest.mpd
- Dash.js version: 4.2.1
- Browser name/version: Chrome 97
- OS name/version: Mac 10.15.7
Steps to reproduce
- Play the MPD in dash.js reference player
Observed behavior
The provided manifest is a special test version of BBB, encoded at 1080p30 in AVC, but with bitrates from 5Mbps to 100 Mbps, with a visual confirmation of each bitrate burned in. It is designed to test the throughput dimension of 8K playback without forcing the player to use a new codec or actually decode that resolution. I notice two behaviors with the reference client with default settings:
- There is a sourcebuffer error thrown as the sourcebuffer becomes full.
Debug.js:169 [39849][SourceBufferSink][video] SourceBuffer append failed "QuotaExceededError: Failed to execute 'appendBuffer' on 'SourceBuffer': The SourceBuffer is full, and cannot free space to append additional buffers."
dash.js could perhaps manage this by reducing target buffer length for high bitrate streams, or at least take buffer size in to account when trying to append.
- The player does not have good stability at the start and switches bitrates often.
Debug.js:169 [11311][AbrController] Stream ID: defaultId_0 [video] switch from 0 to 10/10 (buffer: 4) {"throughput":110952.90000000001,"latency":113} 09:00:55.789 Debug.js:169 [13645][AbrController] Stream ID: defaultId_0 [video] switch from 10 to 3/10 (buffer: 1.833) "InsufficientBufferRule: being conservative to avoid immediate rebuffering" 09:00:56.539 Debug.js:169 [14395][AbrController] Stream ID: defaultId_0 [video] switch from 3 to 2/10 (buffer: 1.082) "InsufficientBufferRule: being conservative to avoid immediate rebuffering" 09:00:57.108 Debug.js:169 [14964][AbrController] Stream ID: defaultId_0 [video] switch from 2 to 9/10 (buffer: 4.514) {"index":9,"drops":2,"noDrops":4,"dropSize":8} 09:00:58.849 Debug.js:169 [16705][AbrController] Stream ID: defaultId_0 [video] switch from 9 to 2/10 (buffer: 2.773) {"index":2,"drops":1,"noDrops":5,"dropSize":1} 09:01:00.556 Debug.js:169 [18411][AbrController] [video] switching from throughput to buffer occupancy ABR rule (buffer: 13.164). 09:01:06.030 Debug.js:169 [23886][AbrController] Stream ID: defaultId_0 [video] switch from 2 to 8/10 (buffer: 11.899) {"index":8,"drops":1,"noDrops":7,"dropSize":7} 09:01:10.440 Debug.js:169 [28296][AbrController] Stream ID: defaultId_0 [video] switch from 8 to 10/10 (buffer: 7.282) {"state":2,"throughput":278335.75,"latency":169,"bufferLevel":7.282,"placeholderBuffer":31.40302417212097,"delay":0} 09:01:11.831 Debug.js:169 [29687][AbrController] [video] switching from buffer occupancy to throughput ABR rule (buffer: 5.889).
Expected behavior
Set up bitrates to a stable level that is maintained and either don't invoke any sourcebuffer errors, or handle sourcebuffer full errors well.
This issue has been automatically marked as stale because it has not had recent activity. However, it might still be relevant so please leave a short comment if it should remain open. Otherwise the issue will be closed automatically after two weeks. Thank you for your contributions.
unstale
This issue has been automatically marked as stale because it has not had recent activity. However, it might still be relevant so please leave a short comment if it should remain open. Otherwise the issue will be closed automatically after two weeks. Thank you for your contributions.
unstale
Any updates on this?