regression after "use threshold in removeExecutedRequestsAfterTime" commit
Created by: fvalleeHbbTV
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://github.com/Dash-Industry-Forum/dash.js/files/2167363/lorraine.zip
- Dash.js version: 2.9.1
- Browser name/version:
- OS name/version:
Steps to reproduce
Use html in attached zip (for clearkey support) using dash.js 2.9.1 (you may have to deactivate native clearkey support). Start playback and wait 2 minutes
Obviously the stream has many issues and and had similar problems before (e.g. https://github.com/Dash-Industry-Forum/dash.js/issues/2690)
Observed behaviour
This is a regression after https://github.com/Dash-Industry-Forum/dash.js/commit/1363719d55a34e04d37dbc49cb242a7d6abe5c24
During playback, we get following log:
[NextFragmentRequestRule] Prior to making a request for time, NextFragmentRequestRule is aligning index handler's currentTime with bufferedRange.end for audio . 168 was changed to 155.285333
FragmentModel::removeExecutedRequestsAfterTime is called with time = 155.285333. The audio segments duration is 12. The threshold in the FragmentModel is (12/8 = 1.5s). A segment with startTime = 144 is detected. Before the commit, 144+12 = 156 > 155.28. After the commit, 156 < (155.28+ 1.5) so behavior changed. (For reference, next segment startTime is 156)
As the behavior chanegd, dash.js starts an infinite loop, downloading the same segment again and again and calling removeExecutedRequestsAfterTime.
The threshold in removeExecutedRequestsAfterTime is actually fixing many playback issues, but the threshold value can be up to 1.875s, maybe that's too much ? (it's much larger than SegmentOverlapTolerance or smallGapLimit)
Any comment or feedback welcome! Thanks,