Playback freezes to first frame if user seeks to the very beginning of the timeline
Created by: tomraut
Environment
-
The MPD passes the DASH-IF Conformance Tool on https://conformance.dashif.org/ -
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://mtvdashvodcloud-a.akamaized.net/video/won/ismvol1/2019-07-04/SuomiAreena(1114335_ISMUSPWV).ism/SuomiAreena(1114335_ISMUSPWV).mpd?vbegin=184&vend=3980
- Dash.js version: 3.0.0
- Browser name/version: Chrome 75
- OS name/version: MacOS Mojave 10.14.5
Steps to reproduce
Start to play asset and after some time try to seek to very beginning on the timeline.
Observed behaviour
Initial playback of the asset starts just fine but if user then seeks back to very beginning, dash.js is not able to play stream from there unless user seeks a little bit back to forward.
Console output
ELE - SeekTarget 0
ScheduleController.js:627 ELE - SeekTarget 0
ScheduleController.js:627 ELE - SeekTarget 0
ScheduleController.js:627 ELE - SeekTarget 0
BufferController.js:260 ELE - Buffered Range for type: video idx 0 : 0.001 - 4.481 currentTime = 0
DashHandler.js:316 ELE - time 0 range {start: 0, end: 4024.042666} period defaultId_0
SegmentsController.js:117 ELE - Segment Request by time 0 1562756306782
SegmentsController.js:121 ELE - Segment {indexRange: null, index: null, mediaRange: undefined, media: "Putous(1071568_ISMUSPWV)-$RepresentationID$-5000.dash", duration: 2, …}
DashHandler.js:356 ELE - Getting the next request at index: 1, type: video period defaultId_0
SegmentsController.js:108 ELE - Segment Request by index 1 lastTime 200
DashHandler.js:356 ELE - Getting the next request at index: 2, type: video period defaultId_0
SegmentsController.js:108 ELE - Segment Request by index 2 lastTime 202
ScheduleController.js:627 ELE - SeekTarget NaN
DashHandler.js:316 ELE - time 0 range {start: 0, end: 4024.042666} period defaultId_0
SegmentsController.js:117 ELE - Segment Request by time 0 1562756306787
SegmentsController.js:121 ELE - Segment {indexRange: null, index: null, mediaRange: undefined, media: "Putous(1071568_ISMUSPWV)-$RepresentationID$-9625600.dash", duration: 2.005333333333333, …}
ScheduleController.js:627 ELE - SeekTarget NaN
BufferController.js:260 ELE - Buffered Range for type: audio idx 0 : 0.534333 - 2.539666 currentTime = 0
DashHandler.js:356 ELE - Getting the next request at index: 1, type: audio period defaultId_0
SegmentsController.js:108 ELE - Segment Request by index 1 lastTime 200.53333333333333
ScheduleController.js:627 ELE - SeekTarget NaN
BufferController.js:260 ELE - Buffered Range for type: video idx 0 : 0.001 - 6.001 currentTime = 0
BufferController.js:260 ELE - Buffered Range for type: audio idx 0 : 0.534333 - 4.544999 currentTime = 0
DashHandler.js:356 ELE - Getting the next request at index: 3, type: video period defaultId_0
SegmentsController.js:108 ELE - Segment Request by index 3 lastTime 204
ScheduleController.js:627 ELE - SeekTarget NaN
DashHandler.js:356 ELE - Getting the next request at index: 2, type: audio period defaultId_0
SegmentsController.js:108 ELE - Segment Request by index 2 lastTime 202.53866666666667
ScheduleController.js:627 ELE - SeekTarget NaN
BufferController.js:260 ELE - Buffered Range for type: audio idx 0 : 0.534333 - 6.550332 currentTime = 0
BufferController.js:260 ELE - Buffered Range for type: video idx 0 : 0.001 - 8.001 currentTime = 0
DashHandler.js:356 ELE - Getting the next request at index: 3, type: audio period defaultId_0
SegmentsController.js:108 ELE - Segment Request by index 3 lastTime 204.544
ScheduleController.js:627 ELE - SeekTarget NaN
DashHandler.js:356 ELE - Getting the next request at index: 4, type: video period defaultId_0
SegmentsController.js:108 ELE - Segment Request by index 4 lastTime 206
ScheduleController.js:627 ELE - SeekTarget NaN
BufferController.js:260 ELE - Buffered Range for type: audio idx 0 : 0.534333 - 8.555666 currentTime = 0
DashHandler.js:356 ELE - Getting the next request at index: 4, type: audio period defaultId_0
SegmentsController.js:108 ELE - Segment Request by index 4 lastTime 206.54933333333332
ScheduleController.js:627 ELE - SeekTarget NaN
BufferController.js:260 ELE - Buffered Range for type: video idx 0 : 0.001 - 10.001 currentTime = 0
DashHandler.js:356 ELE - Getting the next request at index: 5, type: video period defaultId_0
SegmentsController.js:108 ELE - Segment Request by index 5 lastTime 208
ScheduleController.js:627 ELE - SeekTarget NaN
BufferController.js:260 ELE - Buffered Range for type: audio idx 0 : 0.534333 - 10.560999 currentTime = 0
DashHandler.js:356 ELE - Getting the next request at index: 5, type: audio period defaultId_0
SegmentsController.js:108 ELE - Segment Request by index 5 lastTime 208.55466666666666
ScheduleController.js:627 ELE - SeekTarget NaN
BufferController.js:260 ELE - Buffered Range for type: audio idx 0 : 0.534333 - 12.566332 currentTime = 0
BufferController.js:260 ELE - Buffered Range for type: video idx 0 : 0.001 - 12.001 currentTime = 0
DashHandler.js:356 ELE - Getting the next request at index: 6, type: audio period defaultId_0
SegmentsController.js:108 ELE - Segment Request by index 6 lastTime 210.56
ScheduleController.js:627 ELE - SeekTarget NaN
DashHandler.js:356 ELE - Getting the next request at index: 6, type: video period defaultId_0
SegmentsController.js:108 ELE - Segment Request by index 6 lastTime 210
ScheduleController.js:627 ELE - SeekTarget NaN
BufferController.js:260 ELE - Buffered Range for type: audio idx 0 : 0.534333 - 14.571666 currentTime = 0
DashHandler.js:356 ELE - Getting the next request at index: 7, type: audio period defaultId_0
SegmentsController.js:108 ELE - Segment Request by index 7 lastTime 212.56533333333334
ScheduleController.js:627 ELE - SeekTarget NaN
BufferController.js:260 ELE - Buffered Range for type: video idx 0 : 0.001 - 14.001 currentTime = 0
DashHandler.js:356 ELE - Getting the next request at index: 7, type: video period defaultId_0
SegmentsController.js:108 ELE - Segment Request by index 7 lastTime 212
ScheduleController.js:627 ELE - SeekTarget NaN
BufferController.js:260 ELE - Buffered Range for type: audio idx 0 : 0.534333 - 16.576999 currentTime = 0
DashHandler.js:356 ELE - Getting the next request at index: 8, type: audio period defaultId_0
SegmentsController.js:108 ELE - Segment Request by index 8 lastTime 214.57066666666665
ScheduleController.js:627 ELE - SeekTarget NaN
BufferController.js:260 ELE - Buffered Range for type: video idx 0 : 0.001 - 16.001 currentTime = 0
DashHandler.js:356 ELE - Getting the next request at index: 8, type: video period defaultId_0
SegmentsController.js:108 ELE - Segment Request by index 8 lastTime 214
ScheduleController.js:627 ELE - SeekTarget NaN
BufferController.js:260 ELE - Buffered Range for type: audio idx 0 : 0.534333 - 18.582332 currentTime = 0
DashHandler.js:356 ELE - Getting the next request at index: 9, type: audio period defaultId_0
SegmentsController.js:108 ELE - Segment Request by index 9 lastTime 216.576
ScheduleController.js:627 ELE - SeekTarget NaN
BufferController.js:260 ELE - Buffered Range for type: audio idx 0 : 0.534333 - 20.587666 currentTime = 0
BufferController.js:260 ELE - Buffered Range for type: video idx 0 : 0.001 - 18.001 currentTime = 0
DashHandler.js:356 ELE - Getting the next request at index: 10, type: audio period defaultId_0
SegmentsController.js:108 ELE - Segment Request by index 10 lastTime 218.58133333333333
ScheduleController.js:627 ELE - SeekTarget NaN
DashHandler.js:356 ELE - Getting the next request at index: 9, type: video period defaultId_0
SegmentsController.js:108 ELE - Segment Request by index 9 lastTime 216
ScheduleController.js:627 ELE - SeekTarget NaN
BufferController.js:260 ELE - Buffered Range for type: audio idx 0 : 0.534333 - 22.592999 currentTime = 0
DashHandler.js:356 ELE - Getting the next request at index: 11, type: audio period defaultId_0
SegmentsController.js:108 ELE - Segment Request by index 11 lastTime 220.58666666666667
ScheduleController.js:627 ELE - SeekTarget NaN
BufferController.js:260 ELE - Buffered Range for type: video idx 0 : 0.001 - 20.001 currentTime = 0
DashHandler.js:356 ELE - Getting the next request at index: 10, type: video period defaultId_0
SegmentsController.js:108 ELE - Segment Request by index 10 lastTime 218
ScheduleController.js:627 ELE - SeekTarget NaN
BufferController.js:260 ELE - Buffered Range for type: audio idx 0 : 0.534333 - 24.598332 currentTime = 0
DashHandler.js:356 ELE - Getting the next request at index: 12, type: audio period defaultId_0
SegmentsController.js:108 ELE - Segment Request by index 12 lastTime 222.592
ScheduleController.js:627 ELE - SeekTarget NaN
BufferController.js:260 ELE - Buffered Range for type: audio idx 0 : 0.534333 - 26.603666 currentTime = 0
BufferController.js:260 ELE - Buffered Range for type: video idx 0 : 0.001 - 22.001 currentTime = 0
DashHandler.js:356 ELE - Getting the next request at index: 13, type: audio period defaultId_0
SegmentsController.js:108 ELE - Segment Request by index 13 lastTime 224.59733333333332
ScheduleController.js:627 ELE - SeekTarget NaN
DashHandler.js:356 ELE - Getting the next request at index: 11, type: video period defaultId_0
SegmentsController.js:108 ELE - Segment Request by index 11 lastTime 220
ScheduleController.js:627 ELE - SeekTarget NaN
BufferController.js:260 ELE - Buffered Range for type: audio idx 0 : 0.534333 - 28.608999 currentTime = 0
DashHandler.js:356 ELE - Getting the next request at index: 14, type: audio period defaultId_0
SegmentsController.js:108 ELE - Segment Request by index 14 lastTime 226.60266666666666
ScheduleController.js:627 ELE - SeekTarget NaN
BufferController.js:260 ELE - Buffered Range for type: video idx 0 : 0.001 - 24.001 currentTime = 0
DashHandler.js:356 ELE - Getting the next request at index: 12, type: video period defaultId_0
SegmentsController.js:108 ELE - Segment Request by index 12 lastTime 222
ScheduleController.js:627 ELE - SeekTarget NaN
BufferController.js:260 ELE - Buffered Range for type: audio idx 0 : 0.534333 - 30.614332 currentTime = 0
DashHandler.js:356 ELE - Getting the next request at index: 15, type: audio period defaultId_0
SegmentsController.js:108 ELE - Segment Request by index 15 lastTime 228.608
ScheduleController.js:627 ELE - SeekTarget NaN
BufferController.js:260 ELE - Buffered Range for type: video idx 0 : 0.001 - 26.001 currentTime = 0
DashHandler.js:356 ELE - Getting the next request at index: 13, type: video period defaultId_0
SegmentsController.js:108 ELE - Segment Request by index 13 lastTime 224
ScheduleController.js:627 ELE - SeekTarget NaN
BufferController.js:260 ELE - Buffered Range for type: audio idx 0 : 0.534333 - 32.619666 currentTime = 0
DashHandler.js:356 ELE - Getting the next request at index: 16, type: audio period defaultId_0
SegmentsController.js:108 ELE - Segment Request by index 16 lastTime 230.61333333333334
ScheduleController.js:627 ELE - SeekTarget NaN
BufferController.js:260 ELE - Buffered Range for type: audio idx 0 : 0.534333 - 34.624999 currentTime = 0
BufferController.js:260 ELE - Buffered Range for type: video idx 0 : 0.001 - 28.001 currentTime = 0
DashHandler.js:356 ELE - Getting the next request at index: 17, type: audio period defaultId_0
SegmentsController.js:108 ELE - Segment Request by index 17 lastTime 232.61866666666666
ScheduleController.js:627 ELE - SeekTarget NaN
DashHandler.js:356 ELE - Getting the next request at index: 14, type: video period defaultId_0
SegmentsController.js:108 ELE - Segment Request by index 14 lastTime 226
ScheduleController.js:627 ELE - SeekTarget NaN
BufferController.js:260 ELE - Buffered Range for type: audio idx 0 : 0.534333 - 36.630332 currentTime = 0
DashHandler.js:356 ELE - Getting the next request at index: 18, type: audio period defaultId_0
SegmentsController.js:108 ELE - Segment Request by index 18 lastTime 234.624
ScheduleController.js:627 ELE - SeekTarget NaN
BufferController.js:260 ELE - Buffered Range for type: video idx 0 : 0.001 - 30.001 currentTime = 0
DashHandler.js:356 ELE - Getting the next request at index: 15, type: video period defaultId_0
SegmentsController.js:108 ELE - Segment Request by index 15 lastTime 228
ScheduleController.js:627 ELE - SeekTarget NaN
BufferController.js:260 ELE - Buffered Range for type: audio idx 0 : 0.534333 - 38.635666 currentTime = 0
DashHandler.js:356 ELE - Getting the next request at index: 19, type: audio period defaultId_0
SegmentsController.js:108 ELE - Segment Request by index 19 lastTime 236.62933333333334
ScheduleController.js:627 ELE - SeekTarget NaN
BufferController.js:260 ELE - Buffered Range for type: audio idx 0 : 0.534333 - 40.640999 currentTime = 0
BufferController.js:260 ELE - Buffered Range for type: video idx 0 : 0.001 - 32.001 currentTime = 0
DashHandler.js:356 ELE - Getting the next request at index: 20, type: audio period defaultId_0
SegmentsController.js:108 ELE - Segment Request by index 20 lastTime 238.63466666666667
ScheduleController.js:627 ELE - SeekTarget NaN
DashHandler.js:356 ELE - Getting the next request at index: 16, type: video period defaultId_0
SegmentsController.js:108 ELE - Segment Request by index 16 lastTime 230
ScheduleController.js:627 ELE - SeekTarget NaN
It feels that this might be caused by the fact that presentationTimeOffset has different value than first segment's t attribute. In case of example MPD these are following:
presentationTimeOffset="8663040"
<S t="8759296" d="96256" r="1893" />
The difference between t and presentationTimeOffset is ~2,485s. Same MPD file works fine with dash.js 2.9.3 when overlapSegmentToleranceTime is set to 3s but with dash.js 3.0.0 overlapSegmentToleranceTime is gone.