Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Seek - Buffer Management causes playback to stop #240

Closed
jmortimer opened this issue Oct 1, 2014 · 7 comments
Closed

Seek - Buffer Management causes playback to stop #240

jmortimer opened this issue Oct 1, 2014 · 7 comments

Comments

@jmortimer
Copy link

Hi there - I seem to have provoked a problem with the Buffer management in dash.js v 1.2.0 release.

Steps to reproduce:

  1. Load http://l3cdn.azbbdev.com/441328a0-c214-4c88-9b62-36780f102309/Purge_Trailer.ism/Manifest(format=mpd-time-csf)
  2. Play for about 6 minutes (you'll notice that the debug console now reports the buffers starting from a non-zero time value)
  3. Seek back to the start.
  4. Observe breakdown in playback.

HTTP requests are still made for the timestamps at the end of the buffer but because there is nothing to play back at time = 0 you are pretty knackered. I'm not really sure that given the presence of a local Internet Cache and CDN Caches, that there is any need to buffer media from before the playhead...

Anyway - log below:

Buffered video Range: 28 - 308 Debug.js:29
XHR finished loading: GET "http://l3cdn.azbbdev.com/441328a0-c214-4c88-9b62-36780f102309/Purge_Trailer…evels(125435)/Fragments(AAC_und_ch2_128kbps=3068160000,format=mpd-time-csf)". FragmentLoader.js:169
loaded audio:Media Segment:306.816 (200, 356ms, 5ms) Debug.js:29
Buffered audio Range: 0 - 308.821333 Debug.js:29
Getting the request for time: 308 Debug.js:29
Getting the request for time: 308.821333 Debug.js:29
Index for time 308 is 154 Debug.js:29
SegmentTimeline: 308 / 5638.592 Debug.js:29
Index for time 308.821333 is 153 Debug.js:29
SegmentTimeline: 306.816 / 5638.592 Debug.js:29
XHR finished loading: GET "http://l3cdn.azbbdev.com/441328a0-c214-4c88-9b62-36780f102309/Purge_Trailer…evels(125435)/Fragments(AAC_und_ch2_128kbps=3088213333,format=mpd-time-csf)". FragmentLoader.js:169
loaded audio:Media Segment:308.8213333 (200, 88ms, 5ms) Debug.js:29
Buffered audio Range: 0 - 310.826666 Debug.js:29
XHR finished loading: GET "http://l3cdn.azbbdev.com/441328a0-c214-4c88-9b62-36780f102309/Purge_Trailer.ism/QualityLevels(4495803)/Fragments(video=3080000000,format=mpd-time-csf)". FragmentLoader.js:169
loaded video:Media Segment:308 (200, 146ms, 71ms) Debug.js:29
Buffered video Range: 28 - 310 Debug.js:29
BufferController video stop. Debug.js:29
BufferController audio stop. Debug.js:29
BufferController video seek: 265.81618 Debug.js:29
BufferController video start. Debug.js:29
Got enough video buffer to start. Debug.js:29
BufferController video stop. Debug.js:29
BufferController audio seek: 265.81618 Debug.js:29
BufferController audio start. Debug.js:29
Got enough audio buffer to start. Debug.js:29
BufferController audio stop. Debug.js:29
BufferController video seek: 254.383226 Debug.js:29
BufferController video start. Debug.js:29
Got enough video buffer to start. Debug.js:29
BufferController video stop. Debug.js:29
BufferController audio seek: 254.383226 Debug.js:29
BufferController audio start. Debug.js:29
Got enough audio buffer to start. Debug.js:29
BufferController audio stop. Debug.js:29
BufferController video seek: 242.950272 Debug.js:29
BufferController video start. Debug.js:29
Got enough video buffer to start. Debug.js:29
BufferController video stop. Debug.js:29
BufferController audio seek: 242.950272 Debug.js:29
BufferController audio start. Debug.js:29
Got enough audio buffer to start. Debug.js:29
BufferController audio stop. Debug.js:29
BufferController video seek: 220.084364 Debug.js:29
BufferController video start. Debug.js:29
Got enough video buffer to start. Debug.js:29
BufferController video stop. Debug.js:29
BufferController audio seek: 220.084364 Debug.js:29
BufferController audio start. Debug.js:29
Got enough audio buffer to start. Debug.js:29
BufferController audio stop. Debug.js:29
BufferController video seek: 197.218456 Debug.js:29
BufferController video start. Debug.js:29
Got enough video buffer to start. Debug.js:29
BufferController video stop. Debug.js:29
BufferController audio seek: 197.218456 Debug.js:29
BufferController audio start. Debug.js:29
Got enough audio buffer to start. Debug.js:29
BufferController audio stop. Debug.js:29
BufferController video seek: 105.754824 Debug.js:29
BufferController video start. Debug.js:29
Got enough video buffer to start. Debug.js:29
BufferController video stop. Debug.js:29
BufferController audio seek: 105.754824 Debug.js:29
BufferController audio start. Debug.js:29
Got enough audio buffer to start. Debug.js:29
BufferController audio stop. Debug.js:29
BufferController video seek: 71.455962 Debug.js:29
BufferController video start. Debug.js:29
Got enough video buffer to start. Debug.js:29
BufferController video stop. Debug.js:29
BufferController audio seek: 71.455962 Debug.js:29
BufferController audio start. Debug.js:29
Got enough audio buffer to start. Debug.js:29
BufferController audio stop. Debug.js:29
BufferController video seek: 60.023008 Debug.js:29
BufferController video start. Debug.js:29
Got enough video buffer to start. Debug.js:29
BufferController video stop. Debug.js:29
BufferController audio seek: 60.023008 Debug.js:29
BufferController audio start. Debug.js:29
Got enough audio buffer to start. Debug.js:29
BufferController audio stop. Debug.js:29
BufferController video seek: 14.291192 Debug.js:29
BufferController video start. Debug.js:29
Waiting for more video buffer before starting playback. Debug.js:29
BufferController video stop. Debug.js:29
BufferController audio seek: 14.291192 Debug.js:29
BufferController audio start. Debug.js:29
Got enough audio buffer to start. Debug.js:29
BufferController audio stop. Debug.js:29
BufferController video seek: 0 Debug.js:29
BufferController video start. Debug.js:29
BufferController video stop. Debug.js:29
BufferController audio seek: 0 Debug.js:29
BufferController audio start. Debug.js:29
Got enough audio buffer to start. Debug.js:29
BufferController audio stop. Debug.js:29
BufferController video start. Debug.js:29
BufferController audio start. Debug.js:29
Got enough audio buffer to start. Debug.js:29
Getting the request for time: 0 Debug.js:29
Couldn't figure out a time! Debug.js:29
Time: 0 Debug.js:29
[Dash.vo.Segment, Dash.vo.Segment, Dash.vo.Segment, Dash.vo.Segment, Dash.vo.Segment, Dash.vo.Segment, Dash.vo.Segment, Dash.vo.Segment, Dash.vo.Segment, Dash.vo.Segment, Dash.vo.Segment, Dash.vo.Segment, Dash.vo.Segment] Debug.js:29
Index for time 0 is 0 Debug.js:29
Getting the request for time: 0 Debug.js:29
Index for time 0 is 0 Debug.js:29
SegmentTimeline: 0 / 5638.592 Debug.js:29
Getting the request for time: 0 Debug.js:29
Index for time 0 is 0 Debug.js:29
SegmentTimeline: 0 / 5638.592 Debug.js:29
SegmentTimeline: 2 / 5638.592 Debug.js:29
Getting the request for time: 2 Debug.js:29
Index for time 2 is 1 Debug.js:29
SegmentTimeline: 2 / 5638.592 Debug.js:29
SegmentTimeline: 4 / 5638.592 Debug.js:29
XHR finished loading: GET "http://l3cdn.azbbdev.com/441328a0-c214-4c88-9b62-36780f102309/Purge_Trailer.ism/QualityLevels(4495803)/Fragments(video=0,format=mpd-time-csf)". FragmentLoader.js:169
loaded video:Media Segment:0 (200, 128ms, 66ms) Debug.js:29
Buffered video Range: 0 - 2 Debug.js:29
Buffered video Range: 28 - 306 Debug.js:29
XHR finished loading: GET "http://l3cdn.azbbdev.com/441328a0-c214-4c88-9b62-36780f102309/Purge_Trailer.ism/QualityLevels(4495803)/Fragments(video=20000000,format=mpd-time-csf)". FragmentLoader.js:169
loaded video:Media Segment:2 (200, 104ms, 105ms) Debug.js:29
Buffered video Range: 0 - 4 Debug.js:29
Buffered video Range: 28 - 302 Debug.js:29
Getting the request for time: 4 Debug.js:29
Index for time 4 is 2 Debug.js:29
SegmentTimeline: 4 / 5638.592 Debug.js:29
SegmentTimeline: 6 / 5638.592 Debug.js:29
Getting the request for time: 6 Debug.js:29
Index for time 6 is 3 Debug.js:29
SegmentTimeline: 6 / 5638.592 Debug.js:29
SegmentTimeline: 8 / 5638.592 Debug.js:29
XHR finished loading: GET "http://l3cdn.azbbdev.com/441328a0-c214-4c88-9b62-36780f102309/Purge_Trailer.ism/QualityLevels(4495803)/Fragments(video=40000000,format=mpd-time-csf)". FragmentLoader.js:169
loaded video:Media Segment:4 (200, 102ms, 36ms) Debug.js:29
Buffered video Range: 0 - 6 Debug.js:29
Buffered video Range: 28 - 302 Debug.js:29
XHR finished loading: GET "http://l3cdn.azbbdev.com/441328a0-c214-4c88-9b62-36780f102309/Purge_Trailer.ism/QualityLevels(4495803)/Fragments(video=60000000,format=mpd-time-csf)". FragmentLoader.js:169
loaded video:Media Segment:6 (200, 126ms, 46ms) Debug.js:29
Buffered video Range: 0 - 8 Debug.js:29
Buffered video Range: 28 - 300 Debug.js:29
Got enough video buffer to start. Debug.js:29
Getting the request for time: 8 Debug.js:29
Index for time 8 is 4 Debug.js:29
SegmentTimeline: 8 / 5638.592 Debug.js:29
SegmentTimeline: 10 / 5638.592 Debug.js:29
SegmentTimeline: 12 / 5638.592 Debug.js:29
SegmentTimeline: 14 / 5638.592 Debug.js:29
SegmentTimeline: 16 / 5638.592 Debug.js:29
SegmentTimeline: 18 / 5638.592 Debug.js:29
SegmentTimeline: 20 / 5638.592 Debug.js:29
SegmentTimeline: 24 / 5638.592 Debug.js:29
SegmentTimeline: 26 / 5638.592 Debug.js:29
SegmentTimeline: 28 / 5638.592 Debug.js:29
SegmentTimeline: 30 / 5638.592 Debug.js:29
SegmentTimeline: 32 / 5638.592 Debug.js:29
SegmentTimeline: 34 / 5638.592 Debug.js:29
SegmentTimeline: 36 / 5638.592 Debug.js:29
SegmentTimeline: 38 / 5638.592 Debug.js:29
SegmentTimeline: 40 / 5638.592 Debug.js:29
SegmentTimeline: 42 / 5638.592 Debug.js:29
SegmentTimeline: 46 / 5638.592 Debug.js:29
SegmentTimeline: 48 / 5638.592 Debug.js:29
SegmentTimeline: 50 / 5638.592 Debug.js:29
SegmentTimeline: 52 / 5638.592 Debug.js:29
SegmentTimeline: 54 / 5638.592 Debug.js:29
SegmentTimeline: 56 / 5638.592 Debug.js:29
SegmentTimeline: 58 / 5638.592 Debug.js:29
SegmentTimeline: 60 / 5638.592 Debug.js:29
SegmentTimeline: 62 / 5638.592 Debug.js:29
SegmentTimeline: 64 / 5638.592 Debug.js:29
SegmentTimeline: 68 / 5638.592 Debug.js:29
SegmentTimeline: 70 / 5638.592 Debug.js:29
SegmentTimeline: 72 / 5638.592 Debug.js:29
SegmentTimeline: 74 / 5638.592 Debug.js:29
SegmentTimeline: 76 / 5638.592 Debug.js:29
SegmentTimeline: 78 / 5638.592 Debug.js:29
SegmentTimeline: 80 / 5638.592 Debug.js:29
SegmentTimeline: 82 / 5638.592 Debug.js:29
SegmentTimeline: 84 / 5638.592 Debug.js:29
SegmentTimeline: 86 / 5638.592 Debug.js:29
SegmentTimeline: 90 / 5638.592 Debug.js:29
SegmentTimeline: 92 / 5638.592 Debug.js:29
SegmentTimeline: 94 / 5638.592 Debug.js:29
SegmentTimeline: 96 / 5638.592 Debug.js:29
SegmentTimeline: 98 / 5638.592 Debug.js:29
SegmentTimeline: 100 / 5638.592 Debug.js:29
SegmentTimeline: 102 / 5638.592 Debug.js:29
SegmentTimeline: 104 / 5638.592 Debug.js:29
SegmentTimeline: 106 / 5638.592 Debug.js:29
SegmentTimeline: 108 / 5638.592 Debug.js:29
SegmentTimeline: 112 / 5638.592 Debug.js:29
SegmentTimeline: 114 / 5638.592 Debug.js:29
SegmentTimeline: 116 / 5638.592 Debug.js:29
SegmentTimeline: 118 / 5638.592 Debug.js:29
SegmentTimeline: 120 / 5638.592 Debug.js:29
SegmentTimeline: 122 / 5638.592 Debug.js:29
SegmentTimeline: 124 / 5638.592 Debug.js:29
SegmentTimeline: 126 / 5638.592 Debug.js:29
SegmentTimeline: 128 / 5638.592 Debug.js:29
SegmentTimeline: 130 / 5638.592 Debug.js:29
SegmentTimeline: 134 / 5638.592 Debug.js:29
SegmentTimeline: 136 / 5638.592 Debug.js:29
SegmentTimeline: 138 / 5638.592 Debug.js:29
SegmentTimeline: 140 / 5638.592 Debug.js:29
SegmentTimeline: 142 / 5638.592 Debug.js:29
SegmentTimeline: 144 / 5638.592 Debug.js:29
SegmentTimeline: 146 / 5638.592 Debug.js:29
SegmentTimeline: 148 / 5638.592 Debug.js:29
SegmentTimeline: 150 / 5638.592 Debug.js:29
SegmentTimeline: 152 / 5638.592 Debug.js:29
SegmentTimeline: 156 / 5638.592 Debug.js:29
SegmentTimeline: 158 / 5638.592 Debug.js:29
SegmentTimeline: 160 / 5638.592 Debug.js:29
SegmentTimeline: 162 / 5638.592 Debug.js:29
SegmentTimeline: 164 / 5638.592 Debug.js:29
SegmentTimeline: 166 / 5638.592 Debug.js:29
SegmentTimeline: 168 / 5638.592 Debug.js:29
SegmentTimeline: 170 / 5638.592 Debug.js:29
SegmentTimeline: 172 / 5638.592 Debug.js:29
SegmentTimeline: 174 / 5638.592 Debug.js:29
SegmentTimeline: 178 / 5638.592 Debug.js:29
SegmentTimeline: 180 / 5638.592 Debug.js:29
SegmentTimeline: 182 / 5638.592 Debug.js:29
SegmentTimeline: 184 / 5638.592 Debug.js:29
SegmentTimeline: 186 / 5638.592 Debug.js:29
SegmentTimeline: 188 / 5638.592 Debug.js:29
SegmentTimeline: 190 / 5638.592 Debug.js:29
SegmentTimeline: 192 / 5638.592 Debug.js:29
SegmentTimeline: 194 / 5638.592 Debug.js:29
SegmentTimeline: 196 / 5638.592 Debug.js:29
SegmentTimeline: 200 / 5638.592 Debug.js:29
SegmentTimeline: 202 / 5638.592 Debug.js:29
SegmentTimeline: 204 / 5638.592 Debug.js:29
SegmentTimeline: 206 / 5638.592 Debug.js:29
SegmentTimeline: 208 / 5638.592 Debug.js:29
SegmentTimeline: 210 / 5638.592 Debug.js:29
SegmentTimeline: 212 / 5638.592 Debug.js:29
SegmentTimeline: 214 / 5638.592 Debug.js:29
SegmentTimeline: 216 / 5638.592 Debug.js:29
SegmentTimeline: 218 / 5638.592 Debug.js:29
SegmentTimeline: 222 / 5638.592 Debug.js:29
SegmentTimeline: 224 / 5638.592 Debug.js:29
SegmentTimeline: 226 / 5638.592 Debug.js:29
SegmentTimeline: 228 / 5638.592 Debug.js:29
SegmentTimeline: 230 / 5638.592 Debug.js:29
SegmentTimeline: 232 / 5638.592 Debug.js:29
SegmentTimeline: 234 / 5638.592 Debug.js:29
SegmentTimeline: 236 / 5638.592 Debug.js:29
SegmentTimeline: 238 / 5638.592 Debug.js:29
SegmentTimeline: 240 / 5638.592 Debug.js:29
SegmentTimeline: 244 / 5638.592 Debug.js:29
SegmentTimeline: 246 / 5638.592 Debug.js:29
SegmentTimeline: 248 / 5638.592 Debug.js:29
XHR finished loading: GET "http://l3cdn.azbbdev.com/441328a0-c214-4c88-9b62-36780f102309/Purge_Trailer.ism/QualityLevels(4495803)/Fragments(video=80000000,format=mpd-time-csf)". FragmentLoader.js:169
loaded video:Media Segment:8 (200, 25ms, 18ms) Debug.js:29
Getting the request for time: 300 Debug.js:29
Index for time 300 is 132 Debug.js:29
Buffered video Range: 2 - 10 Debug.js:29
Buffered video Range: 28 - 300 Debug.js:29
XHR finished loading: GET "http://l3cdn.azbbdev.com/441328a0-c214-4c88-9b62-36780f102309/Purge_Trailer.ism/QualityLevels(4495803)/Fragments(video=2480000000,format=mpd-time-csf)". FragmentLoader.js:169
loaded video:Media Segment:248 (200, 35ms, 5ms) Debug.js:29
Buffered video Range: 2 - 10 Debug.js:29
Buffered video Range: 28 - 300 Debug.js:29
Getting the request for time: 300 Debug.js:29
Index for time 300 is 150 Debug.js:29
SegmentTimeline: 300 / 5638.592 Debug.js:29
SegmentTimeline: 302 / 5638.592 Debug.js:29
SegmentTimeline: 304 / 5638.592 Debug.js:29
SegmentTimeline: 306 / 5638.592 Debug.js:29
SegmentTimeline: 308 / 5638.592 Debug.js:29
SegmentTimeline: 310 / 5638.592 Debug.js:29
Getting the request for time: 310 Debug.js:29
Index for time 310 is 155 Debug.js:29
SegmentTimeline: 310 / 5638.592 Debug.js:29
SegmentTimeline: 312 / 5638.592 Debug.js:29
Getting the request for time: 312 Debug.js:29
Index for time 312 is 156 Debug.js:29
SegmentTimeline: 312 / 5638.592 Debug.js:29
SegmentTimeline: 314 / 5638.592 Debug.js:29
XHR finished loading: GET "http://l3cdn.azbbdev.com/441328a0-c214-4c88-9b62-36780f102309/Purge_Trailer.ism/QualityLevels(4495803)/Fragments(video=3100000000,format=mpd-time-csf)". FragmentLoader.js:169
loaded video:Media Segment:310 (200, 126ms, 50ms) Debug.js:29
XHR finished loading: GET "http://l3cdn.azbbdev.com/441328a0-c214-4c88-9b62-36780f102309/Purge_Trailer.ism/QualityLevels(4495803)/Fragments(video=3120000000,format=mpd-time-csf)". FragmentLoader.js:169
loaded video:Media Segment:312 (200, 109ms, 79ms) Debug.js:29
Buffered video Range: 4 - 10 Debug.js:29
Buffered video Range: 28 - 300 Debug.js:29
Buffered video Range: 310 - 312 Debug.js:29
Buffered video Range: 4 - 10 Debug.js:29
Buffered video Range: 28 - 300 Debug.js:29
Buffered video Range: 310 - 314 Debug.js:29
Getting the request for time: 314 Debug.js:29
Index for time 314 is 157 Debug.js:29
SegmentTimeline: 314 / 5638.592 Debug.js:29
SegmentTimeline: 316 / 5638.592 Debug.js:29
Getting the request for time: 316 Debug.js:29
Index for time 316 is 158 Debug.js:29
SegmentTimeline: 316 / 5638.592 Debug.js:29
SegmentTimeline: 318 / 5638.592 Debug.js:29
XHR finished loading: GET "http://l3cdn.azbbdev.com/441328a0-c214-4c88-9b62-36780f102309/Purge_Trailer.ism/QualityLevels(4495803)/Fragments(video=3140000000,format=mpd-time-csf)". FragmentLoader.js:169
loaded video:Media Segment:314 (200, 95ms, 51ms) Debug.js:29
Buffered video Range: 6 - 10 Debug.js:29
Buffered video Range: 28 - 300 Debug.js:29
Buffered video Range: 310 - 312 Debug.js:29
Buffered video Range: 314 - 316 Debug.js:29
XHR finished loading: GET "http://l3cdn.azbbdev.com/441328a0-c214-4c88-9b62-36780f102309/Purge_Trailer.ism/QualityLevels(4495803)/Fragments(video=3160000000,format=mpd-time-csf)". FragmentLoader.js:169
loaded video:Media Segment:316 (200, 119ms, 41ms) Debug.js:29
Buffered video Range: 6 - 10 Debug.js:29
Buffered video Range: 28 - 300 Debug.js:29
Buffered video Range: 310 - 312 Debug.js:29
Buffered video Range: 314 - 318 Debug.js:29
Getting the request for time: 318 Debug.js:29
Index for time 318 is 159 Debug.js:29
SegmentTimeline: 318 / 5638.592 Debug.js:29
Getting the request for time: 320 Debug.js:29
Index for time 320 is 160 Debug.js:29
SegmentTimeline: 320 / 5638.592 Debug.js:29
SegmentTimeline: 322 / 5638.592 Debug.js:29
XHR finished loading: GET "http://l3cdn.azbbdev.com/441328a0-c214-4c88-9b62-36780f102309/Purge_Trailer.ism/QualityLevels(4495803)/Fragments(video=3200000000,format=mpd-time-csf)". FragmentLoader.js:169
loaded video:Media Segment:320 (200, 415ms, 47ms) Debug.js:29
Buffered video Range: 8 - 10 Debug.js:29
Buffered video Range: 28 - 300 Debug.js:29
Buffered video Range: 310 - 312 Debug.js:29
Buffered video Range: 314 - 318 Debug.js:29
Buffered video Range: 320 - 322 Debug.js:29
XHR finished loading: GET "http://l3cdn.azbbdev.com/441328a0-c214-4c88-9b62-36780f102309/Purge_Trailer.ism/QualityLevels(4495803)/Fragments(video=3180000000,format=mpd-time-csf)". FragmentLoader.js:169
loaded video:Media Segment:318 (200, 468ms, 79ms) Debug.js:29
Buffered video Range: 8 - 10 Debug.js:29
Buffered video Range: 28 - 300 Debug.js:29
Buffered video Range: 310 - 312 Debug.js:29
Buffered video Range: 314 - 316 Debug.js:29
Buffered video Range: 318 - 320 Debug.js:29
Stalling video Buffer: video Debug.js:29
Getting the request for time: 322 Debug.js:29
Index for time 322 is 161 Debug.js:29
SegmentTimeline: 322 / 5638.592 Debug.js:29
SegmentTimeline: 324 / 5638.592 Debug.js:29
Getting the request for time: 324 Debug.js:29
Index for time 324 is 162 Debug.js:29
SegmentTimeline: 324 / 5638.592 Debug.js:29
SegmentTimeline: 326 / 5638.592 Debug.js:29
XHR finished loading: GET "http://l3cdn.azbbdev.com/441328a0-c214-4c88-9b62-36780f102309/Purge_Trailer.ism/QualityLevels(4495803)/Fragments(video=3220000000,format=mpd-time-csf)". FragmentLoader.js:169
loaded video:Media Segment:322 (200, 132ms, 56ms) Debug.js:29
XHR finished loading: GET "http://l3cdn.azbbdev.com/441328a0-c214-4c88-9b62-36780f102309/Purge_Trailer.ism/QualityLevels(4495803)/Fragments(video=3240000000,format=mpd-time-csf)". FragmentLoader.js:169
loaded video:Media Segment:324 (200, 91ms, 84ms) Debug.js:29
Buffered video Range: 8 - 10 Debug.js:29
Buffered video Range: 28 - 300 Debug.js:29
Buffered video Range: 310 - 312 Debug.js:29
Buffered video Range: 314 - 316 Debug.js:29
Buffered video Range: 322 - 324 Debug.js:29
Buffered video Range: 8 - 10 Debug.js:29
Buffered video Range: 28 - 300 Debug.js:29
Buffered video Range: 310 - 312 Debug.js:29
Buffered video Range: 314 - 316 Debug.js:29
Buffered video Range: 324 - 326 Debug.js:29
Number of times the buffer has run dry: 1 Debug.js:29
The buffer ran dry recently, switch down. Debug.js:29
Getting the request for time: 326 Debug.js:29
Index for time 326 is 163 Debug.js:29
SegmentTimeline: 326 / 5638.592 Debug.js:29
Buffered video Range: 8 - 10 Debug.js:29
Buffered video Range: 28 - 300 Debug.js:29
Buffered video Range: 310 - 312 Debug.js:29
Buffered video Range: 314 - 316 Debug.js:29
Buffered video Range: 324 - 326 Debug.js:29
Getting the request for time: 326 Debug.js:29
Index for time 326 is 163 Debug.js:29
SegmentTimeline: 326 / 5638.592 Debug.js:29
SegmentTimeline: 328 / 5638.592 Debug.js:29
Getting the request for time: 328 Debug.js:29
Index for time 328 is 164 Debug.js:29
SegmentTimeline: 328 / 5638.592 Debug.js:29
SegmentTimeline: 330 / 5638.592 Debug.js:29
XHR finished loading: GET "http://l3cdn.azbbdev.com/441328a0-c214-4c88-9b62-36780f102309/Purge_Trailer.ism/QualityLevels(3395714)/Fragments(video=3260000000,format=mpd-time-csf)". FragmentLoader.js:169
loaded video:Media Segment:326 (200, 135ms, 61ms) Debug.js:29
Buffered video Range: 8 - 10 Debug.js:29
Buffered video Range: 28 - 300 Debug.js:29
Buffered video Range: 310 - 312 Debug.js:29
Buffered video Range: 314 - 316 Debug.js:29
Buffered video Range: 324 - 328 Debug.js:29
XHR finished loading: GET "http://l3cdn.azbbdev.com/441328a0-c214-4c88-9b62-36780f102309/Purge_Trailer.ism/QualityLevels(3395714)/Fragments(video=3280000000,format=mpd-time-csf)". FragmentLoader.js:169
loaded video:Media Segment:328 (200, 160ms, 43ms) Debug.js:29
Buffered video Range: 8 - 10 Debug.js:29
Buffered video Range: 28 - 300 Debug.js:29
Buffered video Range: 310 - 312 Debug.js:29
Buffered video Range: 314 - 316 Debug.js:29
Buffered video Range: 324 - 326 Debug.js:29
Buffered video Range: 328 - 330 Debug.js:29
Just enough bandwidth available, switch up one. Debug.js:29
Getting the request for time: 330 Debug.js:29
Index for time 330 is 165 Debug.js:29
SegmentTimeline: 330 / 5638.592 Debug.js:29
Buffered video Range: 8 - 10 Debug.js:29
Buffered video Range: 28 - 300 Debug.js:29
Buffered video Range: 310 - 312 Debug.js:29
Buffered video Range: 314 - 316 Debug.js:29
Buffered video Range: 324 - 326 Debug.js:29
Buffered video Range: 328 - 330 Debug.js:29
Getting the request for time: 330 Debug.js:29
Index for time 330 is 165 Debug.js:29
SegmentTimeline: 330 / 5638.592 Debug.js:29
SegmentTimeline: 332 / 5638.592 Debug.js:29
Getting the request for time: 332 Debug.js:29
Index for time 332 is 166 Debug.js:29
SegmentTimeline: 332 / 5638.592 Debug.js:29
SegmentTimeline: 334 / 5638.592 Debug.js:29
XHR finished loading: GET "http://l3cdn.azbbdev.com/441328a0-c214-4c88-9b62-36780f102309/Purge_Trailer.ism/QualityLevels(4495803)/Fragments(video=3300000000,format=mpd-time-csf)". FragmentLoader.js:169
loaded video:Media Segment:330 (200, 100ms, 10ms) Debug.js:29
Buffered video Range: 8 - 10 Debug.js:29
Buffered video Range: 28 - 300 Debug.js:29
Buffered video Range: 310 - 312 Debug.js:29
Buffered video Range: 314 - 316 Debug.js:29
Buffered video Range: 324 - 326 Debug.js:29
Buffered video Range: 330 - 332 Debug.js:29
XHR finished loading: GET "http://l3cdn.azbbdev.com/441328a0-c214-4c88-9b62-36780f102309/Purge_Trailer.ism/QualityLevels(4495803)/Fragments(video=3320000000,format=mpd-time-csf)". FragmentLoader.js:169
loaded video:Media Segment:332 (200, 105ms, 126ms) Debug.js:29
Buffered video Range: 8 - 10 Debug.js:29
Buffered video Range: 28 - 300 Debug.js:29
Buffered video Range: 310 - 312 Debug.js:29
Buffered video Range: 314 - 316 Debug.js:29
Buffered video Range: 332 - 334 Debug.js:29
Getting the request for time: 334 Debug.js:29
Index for time 334 is 167 Debug.js:29
SegmentTimeline: 334 / 5638.592 Debug.js:29
SegmentTimeline: 336 / 5638.592 Debug.js:29
Getting the request for time: 336 Debug.js:29
Index for time 336 is 168 Debug.js:29
SegmentTimeline: 336 / 5638.592 Debug.js:29
SegmentTimeline: 338 / 5638.592 Debug.js:29
XHR finished loading: GET "http://l3cdn.azbbdev.com/441328a0-c214-4c88-9b62-36780f102309/Purge_Trailer.ism/QualityLevels(4495803)/Fragments(video=3340000000,format=mpd-time-csf)". FragmentLoader.js:169
loaded video:Media Segment:334 (200, 115ms, 146ms) Debug.js:29
XHR finished loading: GET "http://l3cdn.azbbdev.com/441328a0-c214-4c88-9b62-36780f102309/Purge_Trailer.ism/QualityLevels(4495803)/Fragments(video=3360000000,format=mpd-time-csf)". FragmentLoader.js:169
loaded video:Media Segment:336 (200, 108ms, 60ms) Debug.js:29
Buffered video Range: 8 - 10 Debug.js:29
Buffered video Range: 28 - 300 Debug.js:29
Buffered video Range: 310 - 312 Debug.js:29
Buffered video Range: 314 - 316 Debug.js:29
Buffered video Range: 334 - 336 Debug.js:29
Buffered video Range: 8 - 10 Debug.js:29
Buffered video Range: 28 - 300 Debug.js:29
Buffered video Range: 310 - 312 Debug.js:29
Buffered video Range: 314 - 316 Debug.js:29
Buffered video Range: 336 - 338 Debug.js:29
Getting the request for time: 338 Debug.js:29
Index for time 338 is 169 Debug.js:29
SegmentTimeline: 338 / 5638.592 Debug.js:29
SegmentTimeline: 340 / 5638.592 Debug.js:29
Getting the request for time: 340 Debug.js:29
Index for time 340 is 170 Debug.js:29
SegmentTimeline: 340 / 5638.592 Debug.js:29
XHR finished loading: GET "http://l3cdn.azbbdev.com/441328a0-c214-4c88-9b62-36780f102309/Purge_Trailer.ism/QualityLevels(4495803)/Fragments(video=3380000000,format=mpd-time-csf)". FragmentLoader.js:169
loaded video:Media Segment:338 (200, 103ms, 63ms) Debug.js:29
Buffered video Range: 8 - 10 Debug.js:29
Buffered video Range: 28 - 300 Debug.js:29
Buffered video Range: 310 - 312 Debug.js:29
Buffered video Range: 314 - 316 Debug.js:29
Buffered video Range: 336 - 340 Debug.js:29
XHR finished loading: GET "http://l3cdn.azbbdev.com/441328a0-c214-4c88-9b62-36780f102309/Purge_Trailer.ism/QualityLevels(4495803)/Fragments(video=3400000000,format=mpd-time-csf)". FragmentLoader.js:169
loaded video:Media Segment:340 (200, 88ms, 81ms) Debug.js:29
Buffered video Range: 8 - 10 Debug.js:29
Buffered video Range: 28 - 300 Debug.js:29
Buffered video Range: 310 - 312 Debug.js:29
Buffered video Range: 314 - 316 Debug.js:29
Buffered video Range: 336 - 338 Debug.js:29
Buffered video Range: 340 - 342 Debug.js:29
Getting the request for time: 342 Debug.js:29
Index for time 342 is 171 Debug.js:29
SegmentTimeline: 342 / 5638.592 Debug.js:29
SegmentTimeline: 344 / 5638.592 Debug.js:29
Getting the request for time: 344 Debug.js:29
Index for time 344 is 172 Debug.js:29
SegmentTimeline: 344 / 5638.592 Debug.js:29
SegmentTimeline: 346 / 5638.592 Debug.js:29
XHR finished loading: GET "http://l3cdn.azbbdev.com/441328a0-c214-4c88-9b62-36780f102309/Purge_Trailer.ism/QualityLevels(4495803)/Fragments(video=3420000000,format=mpd-time-csf)". FragmentLoader.js:169
loaded video:Media Segment:342 (200, 88ms, 52ms) Debug.js:29
Buffered video Range: 8 - 10 Debug.js:29
Buffered video Range: 28 - 300 Debug.js:29
Buffered video Range: 310 - 312 Debug.js:29
Buffered video Range: 314 - 316 Debug.js:29
Buffered video Range: 336 - 338 Debug.js:29
Buffered video Range: 342 - 344 Debug.js:29
XHR finished loading: GET "http://l3cdn.azbbdev.com/441328a0-c214-4c88-9b62-36780f102309/Purge_Trailer.ism/QualityLevels(4495803)/Fragments(video=3440000000,format=mpd-time-csf)". FragmentLoader.js:169
loaded video:Media Segment:344 (200, 115ms, 30ms) Debug.js:29
Buffered video Range: 8 - 10 Debug.js:29
Buffered video Range: 28 - 300 Debug.js:29
Buffered video Range: 310 - 312 Debug.js:29
Buffered video Range: 314 - 316 Debug.js:29
Buffered video Range: 336 - 338 Debug.js:29
Buffered video Range: 344 - 346 Debug.js:29
BufferController video stop. Debug.js:29
BufferController audio stop. Debug.js:29

@dsparacio
Copy link
Contributor

@KozhinM I can confirm this is reproducible in the latest dev branch. I am looking into it right now. Used the repro steps at top of issue with this stream

http://l3cdn.azbbdev.com/441328a0-c214-4c88-9b62-36780f102309/Purge_Trailer.ism/Manifest(format=mpd-time-csf)

@KozhinM
Copy link
Contributor

KozhinM commented Jan 6, 2015

@AkamaiDASH, I was able to reproduce this in Chrome (no repro in IE for me). I have a theory about the issue.
Some background first:

Chrome and IE seem to have different buffer management logic. As I remember IE has time (about 5 minutes) and size (~200Mb) buffer limits. Once the limit is reached the browser throws Quota Exceeded Error after each attempt to append more data into SourceBuffer. Dash.js handles this error and 'manually' clears the buffer by removing the data from the beginning till the start time of a segment closest to the current playback time.
The key point here is that dash.js also removes the requests (for which startTime < endPositionOfRemovedData) from the list of executed requests. This allows to reload the same segments in case of seeking back to the cleared position.

At the same time Chrome does not throw Quota Exceeded exception. Instead it seems that it has an internal mechanism of clearing the buffer. It is run when the buffer also reaches some critical level (do not know the exact numbers). Dash.js has nothing to do with this process. As a result the player keep all the requests in the 'executed' list preventing them to be reloaded after seeking to the cleared position. This causes the playback break that we observe.

I am considering possible solutions now. We may try to track the changes of buffered ranges and update a list of the executed requests according to these changes. Any other ideas are welcome.

@dsparacio
Copy link
Contributor

Thanks for info @KozhinM. So essentially we do not know when chrome is pruning the buffer. Seems like this could be part of the enhancement work that is coming up regarding clearing buffers that have lower bitrates in them if we seek back..... May have to track time ranges and qualities in some data structure and do some manual pruning...

@dsparacio dsparacio self-assigned this Feb 24, 2015
@dsparacio dsparacio added this to the 1.4 Release milestone Feb 24, 2015
@dsparacio dsparacio removed their assignment Feb 25, 2015
@dsparacio dsparacio added Bug and removed 0 - Backlog labels Feb 25, 2015
wyell added a commit to bbc/dash.js that referenced this issue Jun 15, 2015
@qpSHiNqp
Copy link

qpSHiNqp commented Jul 2, 2015

Hi
I'm trying to seek with 1.4.1 player and now a problem related to this issue is observed.
As referred, Chrome prunes the buffer without any notification. The problem is that when I seeked back to the buffer range which is implicitly pruned by Chrome, dash.js player forcefully seeks the position to the "commonEarliestTime" in https://github.com/Dash-Industry-Forum/dash.js/blob/development/src/streaming/controllers/PlaybackController.js#L277 .
Though playback starts after the "force-seek", I think it is not the operation which users intend and playback should be restarted at the position which the user seeked back to.

This is at least reproduced with Google Chrome 43.0.2357.130 (64-bit) on Mac OS X Yosemite.

Is there any update or plan about the implicit pruning on Chrome, and about the correct seek process?

Here is a log while seeking / force-seek.

[video] Waiting for more buffer before starting playback.
Debug.js:115

@rincedd
Copy link
Contributor

rincedd commented Jul 3, 2015

I get the same behaviour as described by @qpSHiNqp with dash.js 1.4 in Chrome and IE11 on Windows 8.1. Hooking into SourceBufferExtensions.append() I do not see any QuotaExceededException in IE11, so it seems to discard buffered ranges silently. The same seems to happen in Edge browser on Windows 10 preview versions, too.

@bwidtmann
Copy link
Contributor

can we upvote this issue? this really impacts our overall user experience.

@bwidtmann
Copy link
Contributor

This particular problem is a combination of different issues:

  1. The "commonEarliestTime" should be reseted every time the user seeks (in function onBytesAppended in PlaybackController.js). This is because the videoElement discards buffered ranges silently and to avoid a very complex detection and tracking, I think it is OK to just reset the commonEarliestTime when seeking. Then you do not have the unwanted seeking back to the position where you started the seeking. But still the playback stops at the new seeked position -> this is solved in 2.
  2. To solve the problem with the silently discarded buffered ranges, we have discussed quite a lot scenarios. The main problem is, that the videoElement buffers until a defined threshold and then it removes the chunks 1 by 1. If you seek back, the buffer is still on limit and instantly removes chunks from the beginning(!!) -> so the videoElement is discarding the chunks it now needs and therefore the playback stops after 1s.
    At the end we realized that this only leads to a real problem if the user wants to seek. So we came up with the simple solution just to clear all the buffer every time the user seeks, which also implicitly removes all the executedRequests and therefore in combination with 1. the playback resumes correctly on the right position (add this.bufferController.clearBuffer(); in onPlaybackSeeking in ScheduleController.js)

I will prepare a pull request...

br
Bernhard

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

6 participants