Dash-Industry-Forum / dash.js

A reference client implementation for the playback of MPEG DASH via Javascript and compliant browsers.
http://reference.dashif.org/dash.js/nightly/samples/dash-if-reference-player/index.html
Other
5.15k stars 1.68k forks source link

>= 2.3.0 faulty decoding with almost complete green screen #1569

Closed abuisine closed 8 years ago

abuisine commented 8 years ago

500+ videos were working fine with 2.2.0. The video produces, right from the beginning, green screen during the full playback, even after a seek, with rare jerky artifacts of the video. A simple reload of the page usually solves the problem. This occurs randomly. A video that finally play correctly after a reload will never fail again.

The video is rendered as a webgl texture, which complexifies the debugging a lot, but again the problem disappear when rolling back to 2.2.0

Environment

All videos reports a problem through the validation tool (but again this was working perfectly in 2.2.0):

### error: ftyp-1 
### The brand 'isom' can only be a compatible, not major, brand
### error: moov-1:trak-1:mdia-1:minf-1:stbl-1:stsd-1 
### Validate_AVCConfigRecord: -2020
### error: 
### 'sidx' found for self-initializing media, violating Section 6.3.5.2. of ISO/IEC 23009-1:2012(E): The Indexed Self-Initializing Media Segment ... shall carry 'dash' as a compatible brand. 
WARNING: unknown file atom 'mfra'
### error: 
### Buffer underrun conformance error: first (and only one reported here) for sample 1 of run 1 of track fragment 1 of fragment 7 of track id 1 (sample absolute file offset 726040, fragment absolute file offset 724496, bandwidth: 448002)

The streams have 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 I did not succeed in my tests to reproduce the problem with the latest reference client on http://dashif.org/reference/players/javascript/

davemevans commented 8 years ago

It's pretty poor form not to warn people that this is adult content.

That said, I don't see the errors you describe.

A simple reload of the page usually solves the problem. This occurs randomly. A video that finally play correctly after a reload will never fail again.

Even if you clear the cache?

There was a change around self-initialising streams in 2.3 but this should only affect manifests which do not signal indexRange. The behaviour around reloading probably implies this isn't causing the problem anyway.

abuisine commented 8 years ago

Sorry for the adult stuff, I have a test video produced through the same encoding farm here

Might be linked to a cache problem as the problem disappears until I wait a day and launch a new run of tests.

The first time is faulty, and

if I reload the problem disappears.

Just had it on this one

I am attaching a picture of the result, looking at the bottom of the 3D scene (which is a semi sphere), the video is a cubemap projection so you can infer the cube faces screen shot 2016-09-05 at 12 28 30

Launching PlayerBase PlayerDesktop
Launching VideoElement DashVideoElement
[8] Playback Initialized 
[17] [dash.js 2.3.0] MediaPlayer has been initialized 
THREE.WebGLRenderer 75
[169] Parsing complete: ( xml2json: 2.30ms, objectiron: 1.86ms, total: 0.00416s) 
[170] Manifest has been refreshed at Mon Sep 05 2016 11:54:21 GMT+0200 (CEST)[1473069261.7]  
[176] MediaSource attached to element.  Waiting on open... 
[177] MediaSource is open! 
[177] Duration successfully set to: 30.013 
[178] Added 0 inline events 
[179] video codec: video/mp4;codecs="avc1.64001F" 
[185] Schedule controller stopping for video 
[187] Start searching for initialization. 
[187] Perform init search: https://dbbqdof8c1gf3.cloudfront.net/videos/93/77/dash_cubemap/media-video-1.mp4 
[187] Perform SIDX load: https://dbbqdof8c1gf3.cloudfront.net/videos/93/77/dash_cubemap/media-video-1.mp4 
[187] Start searching for initialization. 
[187] Perform init search: https://dbbqdof8c1gf3.cloudfront.net/videos/93/77/dash_cubemap/media-video-2.mp4 
[188] Perform SIDX load: https://dbbqdof8c1gf3.cloudfront.net/videos/93/77/dash_cubemap/media-video-2.mp4 
[188] Start searching for initialization. 
[188] Perform init search: https://dbbqdof8c1gf3.cloudfront.net/videos/93/77/dash_cubemap/media-video-3.mp4 
[188] Perform SIDX load: https://dbbqdof8c1gf3.cloudfront.net/videos/93/77/dash_cubemap/media-video-3.mp4 
[188] Start searching for initialization. 
[188] Perform init search: https://dbbqdof8c1gf3.cloudfront.net/videos/93/77/dash_cubemap/media-video-4.mp4 
[188] Perform SIDX load: https://dbbqdof8c1gf3.cloudfront.net/videos/93/77/dash_cubemap/media-video-4.mp4 
[188] Start searching for initialization. 
[188] Perform init search: https://dbbqdof8c1gf3.cloudfront.net/videos/93/77/dash_cubemap/media-video-5.mp4 
[189] Perform SIDX load: https://dbbqdof8c1gf3.cloudfront.net/videos/93/77/dash_cubemap/media-video-5.mp4 
[189] audio codec: audio/mp4;codecs="mp4a.40.2" 
[190] Schedule controller stopping for audio 
[190] Start searching for initialization. 
[190] Perform init search: https://dbbqdof8c1gf3.cloudfront.net/videos/93/77/dash_cubemap/media-audio-en-mp4a.mp4 
[190] Perform SIDX load: https://dbbqdof8c1gf3.cloudfront.net/videos/93/77/dash_cubemap/media-audio-en-mp4a.mp4 
[190] No text data. 
[190] No fragmentedText data. 
[191] No embeddedText data. 
[191] No muxed data. 
[277] Searching for initialization. 
[277] Found the initialization.  Range: 0-727 
[281] Parsing segments from SIDX. 
[310] Searching for initialization. 
[310] Found the initialization.  Range: 0-659 
[314] Parsing segments from SIDX. 
[317] Parsing segments from SIDX. 
[318] Searching for initialization. 
[319] Found the initialization.  Range: 0-726 
[319] Searching for initialization. 
[319] Found the initialization.  Range: 0-726 
[329] Searching for initialization. 
[329] Found the initialization.  Range: 0-726 
[355] Searching for initialization. 
[355] Found the initialization.  Range: 0-727 
[357] Parsing segments from SIDX. 
[374] Parsing segments from SIDX. 
[379] Start Event Controller 
[380] Schedule controller starting for video 
[380] Schedule controller starting for audio 
[384] Init fragment finished loading saving to video's init cache 
[385] Init fragment finished loading saving to audio's init cache 
[388] Native video element event: loadedmetadata 
[390] Getting the request for audio time : 0 
[391] SegmentBase: 0 / 30.013 
[391] Init fragment finished loading saving to video's init cache 
[394] Getting the request for video time : 0 
[394] SegmentBase: 0 / 30.013 
[395] Buffered Range for type: audio : 0.042666  -  2.005333 
[395] Got enough buffer to start. 
[395] Requesting seek to time: 0.042666 
[398] Seeking to: 0.042666 
[400] Prior to making a request for time, NextFragmentRequestRule is aligning index handler's currentTime with bufferedRange.end. 0.042666  was changed to  2.005333 
[400] Getting the request for audio time : 2.005333 
[400] SegmentBase: 0 / 30.013 
[400] Getting the next request at index: 1 
[400] SegmentBase: 2.005333333333333 / 30.013 
[403] Buffered Range for type: audio : 0.042666  -  4.010666 
[409] Buffered Range for type: video : 0  -  2.001999 
[410] Got enough buffer to start. 
[412] Prior to making a request for time, NextFragmentRequestRule is aligning index handler's currentTime with bufferedRange.end. 0.042666  was changed to  2.001999 
[412] Getting the request for video time : 2.001999 
[412] SegmentBase: 0 / 30.013 
[412] Getting the next request at index: 1 
[412] SegmentBase: 2.002 / 30.013 
[418] Native video element event: seeked 
[969] Buffered Range for type: video : 0  -  4.003999 
[970] Getting the request for video time : 4.003999 
[970] Index for video time 4.003999 is 1 
[970] SegmentBase: 2.002 / 30.013 
[971] Getting the next request at index: 2 
[971] SegmentBase: 4.004 / 30.013 
[1119] Buffered Range for type: video : 0  -  6.005999 
[1121] Getting the request for video time : 6.005999 
[1121] Index for video time 6.005999 is 2 
[1121] SegmentBase: 4.004 / 30.013 
[1121] Getting the next request at index: 3 
[1121] SegmentBase: 6.006 / 30.013 
[1223] Buffered Range for type: video : 0  -  8.007999 
[1225] Getting the request for video time : 8.007999 
[1225] Index for video time 8.007999 is 3 
[1225] SegmentBase: 6.006 / 30.013 
[1225] Getting the next request at index: 4 
[1225] SegmentBase: 8.008 / 30.013 
[1250] Buffered Range for type: video : 0  -  10.009999 
[1251] Getting the request for video time : 10.009999 
[1252] Index for video time 10.009999 is 4 
[1252] SegmentBase: 8.008 / 30.013 
[1252] Getting the next request at index: 5 
[1252] SegmentBase: 10.01 / 30.013 
[1348] Buffered Range for type: video : 0  -  12.011999 
[1349] Getting the request for video time : 12.011999 
[1349] Index for video time 12.011999 is 5 
[1349] SegmentBase: 10.01 / 30.013 
[1350] Getting the next request at index: 6 
[1350] SegmentBase: 12.012 / 30.013 
[1407] Getting the request for audio time : 4.010666666666666 
[1407] Index for audio time 4.010666666666666 is 1 
[1407] SegmentBase: 2.005333333333333 / 30.013 
[1407] Getting the next request at index: 2 
[1407] SegmentBase: 4.010666666666666 / 30.013 
[1409] Buffered Range for type: audio : 0.042666  -  6.015999 
[1426] Getting the request for audio time : 6.016 
[1427] Index for audio time 6.016 is 2 
[1427] SegmentBase: 4.010666666666666 / 30.013 
[1427] Getting the next request at index: 3 
[1427] SegmentBase: 6.016 / 30.013 
[1430] Buffered Range for type: audio : 0.042666  -  7.999999 
[1432] Getting the request for audio time : 8 
[1432] Index for audio time 8 is 3 
[1432] SegmentBase: 6.016 / 30.013 
[1433] Getting the next request at index: 4 
[1433] SegmentBase: 8 / 30.013 
[1435] Buffered Range for type: audio : 0.042666  -  10.005333 
[1436] Getting the request for audio time : 10.005333333333333 
[1436] Index for audio time 10.005333333333333 is 4 
[1436] SegmentBase: 8 / 30.013 
[1437] Getting the next request at index: 5 
[1437] SegmentBase: 10.005333333333333 / 30.013 
[1439] Buffered Range for type: audio : 0.042666  -  12.010666 
[1865] Buffered Range for type: video : 0  -  14.013999 
[1867] Getting the request for video time : 14.013999 
[1867] Index for video time 14.013999 is 6 
[1867] SegmentBase: 12.012 / 30.013 
[1867] Getting the next request at index: 7 
[1867] SegmentBase: 14.014 / 30.013 
[1941] Getting the request for audio time : 12.010666666666665 
[1941] Index for audio time 12.010666666666665 is 5 
[1941] SegmentBase: 10.005333333333333 / 30.013 
[1941] Getting the next request at index: 6 
[1941] SegmentBase: 12.010666666666667 / 30.013 
[1944] Buffered Range for type: audio : 0.042666  -  14.015999 
[2191] Native video element event: play 
[2192] Native video element event: playing 
[2345] Buffered Range for type: video : 0  -  16.015999 
[2346] Getting the request for video time : 16.017583000000002 
[2346] Index for video time 16.017583000000002 is 7 
[2346] SegmentBase: 14.014 / 30.013 
[2347] Getting the next request at index: 8 
[2347] SegmentBase: 16.016 / 30.013 
[2446] Getting the request for audio time : 14.016 
[2446] Index for audio time 14.016 is 6 
[2446] SegmentBase: 12.010666666666667 / 30.013 
[2446] Getting the next request at index: 7 
[2446] SegmentBase: 14.016 / 30.013 
[2448] Buffered Range for type: audio : 0.042666  -  16.021333 
[2878] Buffered Range for type: video : 0  -  18.017999 
[2881] Getting the request for video time : 18.020569 
[2881] Index for video time 18.020569 is 8 
[2881] SegmentBase: 16.016 / 30.013 
[2881] Getting the next request at index: 9 
[2881] SegmentBase: 18.018 / 30.013 
[2951] Getting the request for audio time : 16.021333333333335 
[2951] Index for audio time 16.021333333333335 is 7 
[2951] SegmentBase: 14.016 / 30.013 
[2951] Getting the next request at index: 8 
[2951] SegmentBase: 16.021333333333335 / 30.013 
[2954] Buffered Range for type: audio : 0.042666  -  18.026666 
[3451] Buffered Range for type: video : 0  -  20.019999 
[3453] Getting the request for video time : 20.021863 
[3453] Index for video time 20.021863 is 9 
[3453] SegmentBase: 18.018 / 30.013 
[3453] Getting the next request at index: 10 
[3453] SegmentBase: 20.02 / 30.013 
[3456] Getting the request for audio time : 18.026666666666667 
[3456] Index for audio time 18.026666666666667 is 8 
[3456] SegmentBase: 16.021333333333335 / 30.013 
[3456] Getting the next request at index: 9 
[3456] SegmentBase: 18.026666666666667 / 30.013 
[3461] Buffered Range for type: audio : 0.042666  -  20.010666 
[3469] Buffered Range for type: video : 0  -  22.021999 
[3471] Getting the request for video time : 22.024343000000002 
[3471] Index for video time 22.024343000000002 is 10 
[3471] SegmentBase: 20.02 / 30.013 
[3471] Getting the next request at index: 11 
[3471] SegmentBase: 22.022 / 30.013 
[3964] Getting the request for audio time : 20.010666666666665 
[3964] Index for audio time 20.010666666666665 is 9 
[3964] SegmentBase: 18.026666666666667 / 30.013 
[3964] Getting the next request at index: 10 
[3964] SegmentBase: 20.010666666666665 / 30.013 
[3966] Buffered Range for type: audio : 0.042666  -  22.015999 
[3986] Buffered Range for type: video : 0  -  24.023999 
[3988] Getting the request for video time : 24.025971000000002 
[3988] Index for video time 24.025971000000002 is 11 
[3988] SegmentBase: 22.022 / 30.013 
[3988] Getting the next request at index: 12 
[3988] SegmentBase: 24.024 / 30.013 
[4420] Buffered Range for type: video : 0  -  26.025999 
[4422] Getting the request for video time : 26.027411 
[4422] Index for video time 26.027411 is 12 
[4422] SegmentBase: 24.024 / 30.013 
[4422] Getting the next request at index: 13 
[4422] SegmentBase: 26.026 / 30.013 
[4469] Getting the request for audio time : 22.016 
[4469] Index for audio time 22.016 is 10 
[4469] SegmentBase: 20.010666666666665 / 30.013 
[4469] Getting the next request at index: 11 
[4469] SegmentBase: 22.016 / 30.013 
[4472] Buffered Range for type: audio : 0.042666  -  24.021333 
[4473] Getting the request for audio time : 24.02133333333333 
[4473] Index for audio time 24.02133333333333 is 11 
[4473] SegmentBase: 22.016 / 30.013 
[4474] Getting the next request at index: 12 
[4474] SegmentBase: 24.021333333333335 / 30.013 
[4478] Buffered Range for type: audio : 0.042666  -  26.026666 
[4964] Buffered Range for type: video : 0  -  28.027999 
[4966] Getting the request for video time : 28.029512000000004 
[4966] Index for video time 28.029512000000004 is 13 
[4966] SegmentBase: 26.026 / 30.013 
[4966] Getting the next request at index: 14 
[4966] SegmentBase: 28.028 / 30.013 
[4981] Getting the request for audio time : 26.026666666666667 
[4981] Index for audio time 26.026666666666667 is 12 
[4981] SegmentBase: 24.021333333333335 / 30.013 
[4981] Getting the next request at index: 13 
[4981] SegmentBase: 26.026666666666667 / 30.013 
[4983] Buffered Range for type: audio : 0.042666  -  28.031999 
[5074] Buffered Range for type: video : 0  -  30.013316 
[5078] Getting the request for video time : 30.017227 
[5078] Index for video time 30.017227 is 14 
[5078] SegmentBase: 28.028 / 30.013 
[5078] Getting the next request at index: 15 
[5078] Signal complete. 
[5079] Schedule controller stopping for video 
[5079] Stream is complete 
[5486] Getting the request for audio time : 28.032 
[5486] Index for audio time 28.032 is 13 
[5486] SegmentBase: 26.026666666666667 / 30.013 
[5486] Getting the next request at index: 14 
[5486] SegmentBase: 28.032 / 30.013 
[5489] Buffered Range for type: audio : 0.042666  -  30.013316 
[22349] Native video element event: pause 
abuisine commented 8 years ago

Ok, seems to be a wrong init on my part

I have the video element being created and initialized before attaching it to the dash player.

The video.src was set with the manifest, and almost immediately after (in a child class constructor) the dash initialize() was called with the video element and the same src. Of course this is not good for a couple of reasons:

In any case, when reloading, I suspect that there is much less delay between both initialization which makes the video and dashplayer init to collide differently, which makes the dash player to run correctly (no green screen).

So I corrected my code and now avoid to set src to the video element, which seems to solve everything.

I'll close the ticket in a couple of days, once I got sufficient logs and stats to confirm all this !

PS: I even tried to set video.src to null, which caused the same issues (green screen).

abuisine commented 8 years ago

Bad news, I still have the problem.

If I bind the video element as a normal 2D canvas, I see a kind of green blinking screen which alternates between the following two kind of frames: screen shot 2016-09-06 at 18 50 33 screen shot 2016-09-06 at 18 51 08

I can play pause seek etc ... no problem, but it stays green

dsparacio commented 8 years ago

Are you using Ref player to reproduce this issue? If so, can you open the Show Options Tab and uncheck Fast Switch to see if anything changes. just want to make sure that is not the case.

bwidtmann commented 8 years ago

The disabling of the "Fast Switch" feature is a really good hint, as I experienced those "green screens" mostly when the init fragment has not been appended to source buffer correctly before switching video quality levels. So you have to ensure that BEFORE any video chunk is appended to source buffer, its corresponding init frame has to be appended before, otherwise the video decoder gets wrong metadata and therefore is not able to render the frames correctly.

abuisine commented 8 years ago

Very good point indeed, I actually do change the quality level just after initialization based on user configuration (cookies), let me do a run of test today !

abuisine commented 8 years ago

I am not able to reproduce the problem on the reference player.

But looking at my code, I set a quality as soon as streaminitialized is triggered

this.player.on('streaminitialized' ...

if user has quality set as auto

this.player.setAutoSwitchQualityFor('video', true);

if user has a specific quality value

this.player.setAutoSwitchQualityFor('video', false);
this.player.setQualityFor('video', quality);

During all my previous tests (from the posts on this page) I had my user setting at maximum quality value.

my player init is as follows:

this.player.initialize(this.v, video_s, false);
this.player.getDebug().setLogToBrowserConsole(true);
this.player.setStableBufferTime(20);
this.player.setTrackSwitchModeFor('video', 'alwaysReplace');

I did a few tests here and it seems to confirm that setQualityFor just after initialization makes the decoding fail (from time to time) as I never saw the problem when auto switch quality is on.

Fast Switch

I did another run of tests with setFastSwitchEnabled to either true or false, and quality always set to highest value, like this:

this.player.initialize(this.v, video_s, false);
this.player.getDebug().setLogToBrowserConsole(true);
this.player.setStableBufferTime(20);
this.player.setFastSwitchEnabled(false);

And I got decoding failures, from time tot time, in both cases.

dsparacio commented 8 years ago

@bwidtmann we insure init before media chunk fast switch will not affect that. But if a media chunk is inserted at a point that the playhead has elapsed, then you may get some odd artifacts. That is the tricky part. @abuisine are you fairly confident that fast switch is not your issue. Sounds like it is happening either way. I will take a deeper look at this today.

abuisine commented 8 years ago

@AkamaiDASH I can only talk based on the tests I made, and unfortunately there is a lot of noise on my page (WebGL, js, etc ...) What I am sure about is that I saw the decoding problem with fast switch being set to false, at least a couple of times. As soon as I get a bit more time I will try to build the simplest page that reproduces the problem.

dsparacio commented 8 years ago

Great thanks for confirming you saw same issues with and without the feature enabled. You should be able to set right at stream init event the auto switch state and quality. I do something close with the ControlBar.js in contrib lib. That fact that you can not produce this in our player may point to something in your page that is causing the issue.

dsparacio commented 8 years ago

I have a feeling this is not an issue in Dash.js but want to make sure. Seems like related to specific setup/player. @abuisine please reopen with an update if you feel this should stay open.

abuisine commented 7 years ago

I was able to reproduce the problem with 2.4.0 on my setup, will check with lighter webpage

trakout commented 7 years ago

@abuisine I just had this same issue -- have you tried setting quality inside 'BUFFER_LOADED' instead of 'STREAM_INITIALIZED'?

http://cdn.dashjs.org/latest/jsdoc/MediaPlayerEvents.html

abuisine commented 7 years ago

Nope I just tried the 2.4.0 and had the same problems, I am working on VP9 encoding to see if the problems persists.

It might be linked to high resolutions, I am @ level 5.2

On Thu, Jul 13, 2017 at 10:22 PM, Travis Nischuk notifications@github.com wrote:

@abuisine https://github.com/abuisine I just had this same issue -- have you tried setting quality inside 'BUFFER_LOADED' instead of 'STREAM_INITIALIZED'?

http://cdn.dashjs.org/latest/jsdoc/MediaPlayerEvents.html

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/Dash-Industry-Forum/dash.js/issues/1569#issuecomment-315191285, or mute the thread https://github.com/notifications/unsubscribe-auth/ABB1mZGzhqh2LIXZtarP60UNfkmzLlRsks5sNnyMgaJpZM4J0Tih .

iamprem commented 5 years ago

@abuisine Did you find a solution for this issue. I have the same problem with DashJS v2.9.2 where i get green artifacts when I seek to different timestamp while player attempts to switch quality (also happens when i switch quality manually and seek to different position immediately). I tried this with both enabling and disabling the "fast switching", resulting same issue.

iamprem commented 5 years ago

After looking at the logs produced, it looks like the onPlaybackSeeking method in ScheduleController is aborting the Init Fragment request made by the quality switch request when the two events happen very quickly in order to support faster seek response.

You can see on line 36857 it is loading video_5 and later on line 36862 the quality change is triggered to load video_4 fragment url. But if you look even further on line 37013 the init fragment request for video_4 is aborted to support faster seek.

Debug.js:98 [36745][AbrController] AbrController (video) switch from 4 to 3/7 (buffer: 7.147) . 
Debug.js:98 [36857][ScheduleController][video] OnFragmentLoadingCompleted - Url: https://example.com/dash_video_5.mp4 , Range: 47795811-47954319 
Debug.js:98 [36859][BufferController][video] Buffered Range for type: video : 622.622  -  632.631999  currentTime =  623.483259 
Debug.js:98 [36862][ScheduleController][video] Quality has changed, get init request for representationid = video_eng=450000 
Debug.js:98 [36862][ScheduleController][video] isFragmentProcessingInProgress is already equal to true 
Debug.js:98 [36913][AbrController] AbrController (audio) stay on 0/0 (buffer: 6.533) 
Debug.js:98 [36913][NextFragmentRequestRule] Prior to making a request for time, NextFragmentRequestRule is aligning index handler's currentTime with bufferedRange.end for audio . 630 was changed to 630.015999 
Debug.js:98 [36914][DashHandler] Getting the request for audio time : 630.015999 
Debug.js:98 [36914][DashHandler] Index for audio time 630.015999 is 314 
Debug.js:98 [36914][DashHandler] SegmentList: 628 / 1195.861334 
Debug.js:98 [36915][DashHandler] Getting the next request at index: 315, type: audio 
Debug.js:98 [36915][DashHandler] SegmentList: 630 / 1195.861334 
Debug.js:98 [36916][ScheduleController][audio] Next fragment request url is https://example.com/dash_audio_3.mp4 
Debug.js:98 [37011][PlaybackController] Seeking to: 998.254617 
Debug.js:98 [37012][BufferController][video] getAllRangesWithSafetyFactor for video - No request found in current time position, removing full buffer 0 - 633.131999 
Debug.js:98 [37012][BufferController][video] Removing video buffer from: 0 to 633.131999 
Debug.js:98 [37013][ScheduleController][video] onPlaybackSeeking for video, call fragmentModel.abortRequests in order to seek quicker 
Debug.js:98 [37014][ScheduleController][video] onFragmentLoadingAbandoned for video, request: https://example.com/dash_video_4.mp4 has been aborted 
Debug.js:98 [37015][ScheduleController][video] onFragmentLoadingAbandoned for video, request: https://example.com/dash_video_4.mp4 has been aborted 
Debug.js:98 [37015][ScheduleController][video] isFragmentProcessingInProgress is already equal to false 
Debug.js:98 [37016][BufferController][audio] getAllRangesWithSafetyFactor for audio - No request found in current time position, removing full buffer 0 - 630.515999 
Debug.js:98 [37017][BufferController][audio] Removing audio buffer from: 0 to 630.515999 
Debug.js:98 [37017][ScheduleController][audio] onPlaybackSeeking for audio, call fragmentModel.abortRequests in order to seek quicker 
Debug.js:98 [37018][ScheduleController][audio] onFragmentLoadingAbandoned for audio, request: https://example.com/dash_audio_3.mp4 has been aborted 
Debug.js:98 [37019][ScheduleController][audio] onFragmentLoadingAbandoned for audio, request: https://example.com/dash_audio_3.mp4 has been aborted 
Debug.js:98 [37019][ScheduleController][audio] isFragmentProcessingInProgress is already equal to false 
Debug.js:98 [37022][BufferController][video] onRemoved buffer from: 0 to 633.131999 
Debug.js:98 [37024][BufferController][video] onRemoved : call updateBufferLevel 
Debug.js:98 [37025][BufferController][audio] onRemoved buffer from: 0 to 630.515999 
Debug.js:98 [37026][BufferController][audio] onRemoved : call updateBufferLevel 
Debug.js:98 [37032][AbrController] AbrController (audio) stay on 0/0 (buffer: 6.533) 
Debug.js:98 [37033][DashHandler] Getting the request for audio time : 998.254617 
Debug.js:98 [37034][DashHandler] Index for audio time 998.254617 is 499 
Debug.js:98 [37035][DashHandler] SegmentList: 998 / 1195.861334 
Debug.js:98 [37036][ScheduleController][audio] Next fragment request url is https://example.com/dash_audio_3.mp4 
Debug.js:98 [37331][ScheduleController][audio] OnFragmentLoadingCompleted - Url: https://example.com/dash_audio_3.mp4 , Range: 15897380-15928973 
Debug.js:98 [37333][BufferController][audio] Buffered Range for type: audio : 998.016  -  999.999999  currentTime =  998.254617 
Debug.js:98 [37335][AbrController] AbrController (audio) stay on 0/0 (buffer: 1.745) 
Debug.js:98 [37335][NextFragmentRequestRule] Prior to making a request for time, NextFragmentRequestRule is aligning index handler's currentTime with bufferedRange.end for audio . 1000 was changed to 999.999999 
Debug.js:98 [37335][DashHandler] Getting the request for audio time : 999.999999 
Debug.js:98 [37336][DashHandler] Index for audio time 999.999999 is 499 
Debug.js:98 [37336][DashHandler] SegmentList: 998 / 1195.861334 
Debug.js:98 [37337][DashHandler] Getting the next request at index: 500, type: audio 
Debug.js:98 [37337][DashHandler] SegmentList: 1000 / 1195.861334 
Debug.js:98 [37338][ScheduleController][audio] Next fragment request url is https://example.com/dash_audio_3.mp4 
Debug.js:98 [37523][DashHandler] Getting the request for video time : 998.254617 
Debug.js:98 [37524][DashHandler] Index for video time 998.254617 is 498 
Debug.js:98 [37524][DashHandler] SegmentList: 996.996 / 1195.861334 
Debug.js:98 [37525][ScheduleController][video] Next fragment request url is https://example.com/dash_video_4.mp4 
Debug.js:98 [37628][ScheduleController][audio] OnFragmentLoadingCompleted - Url: https://example.com/dash_audio_3.mp4 , Range: 15928974-15960868 
Debug.js:98 [37630][BufferController][audio] Buffered Range for type: audio : 998.016  -  1002.005333  currentTime =  998.254617 
Debug.js:98 [38179][ScheduleController][video] OnFragmentLoadingCompleted - Url: https://example.com/dash_video_4.mp4 , Range: 56774647-56881567 
Debug.js:98 [38181][BufferController][video] Buffered Range for type: video : 996.996  -  998.997999  currentTime =  998.254617 
Debug.js:98 [38184][NextFragmentRequestRule] Prior to making a request for time, NextFragmentRequestRule is aligning index handler's currentTime with bufferedRange.end for video . 998.9979999999999 was changed to 998.997999 
Debug.js:98 [38184][DashHandler] Getting the request for video time : 998.997999 
Debug.js:98 [38184][DashHandler] Index for video time 998.997999 is 498 
Debug.js:98 [38185][DashHandler] SegmentList: 996.996 / 1195.861334 
Debug.js:98 [38185][DashHandler] Getting the next request at index: 499, type: video 
Debug.js:98 [38186][DashHandler] SegmentList: 998.998 / 1195.861334 
Debug.js:98 [38186][ScheduleController][video] Next fragment request url is https://example.com/dash_video_4.mp4 
Debug.js:98 [38231][PlaybackController] Native video element event: seeked 
Debug.js:98 [38604][ScheduleController][video] OnFragmentLoadingCompleted - Url: https://example.com/dash_video_4.mp4 , Range: 56881568-56987813 
Debug.js:98 [38607][BufferController][video] Buffered Range for type: video : 996.996  -  1000.999999  currentTime =  998.254617 
Debug.js:98 [38609][NextFragmentRequestRule] Prior to making a request for time, NextFragmentRequestRule is aligning index handler's currentTime with bufferedRange.end for video . 1001 was changed to 1000.999999 
Debug.js:98 [38609][DashHandler] Getting the request for video time : 1000.999999 
Debug.js:98 [38610][DashHandler] Index for video time 1000.999999 is 499 
Debug.js:98 [38610][DashHandler] SegmentList: 998.998 / 1195.861334 
Debug.js:98 [38611][DashHandler] Getting the next request at index: 500, type: video 
Debug.js:98 [38611][DashHandler] SegmentList: 1001 / 1195.861334 
Debug.js:98 [38612][ScheduleController][video] Next fragment request url is https://example.com/dash_video_4.mp4 
Debug.js:98 [39032][ScheduleController][video] OnFragmentLoadingCompleted - Url: https://example.com/dash_video_4.mp4 , Range: 56987814-57101481 
Debug.js:98 [39033][BufferController][video] Buffered Range for type: video : 996.996  -  1003.001999  currentTime =  998.254617 
Debug.js:98 [39035][NextFragmentRequestRule] Prior to making a request for time, NextFragmentRequestRule is aligning index handler's currentTime with bufferedRange.end for video . 1003.002 was changed to 1003.001999 
Debug.js:98 [39036][DashHandler] Getting the request for video time : 1003.001999 
Debug.js:98 [39036][DashHandler] Index for video time 1003.001999 is 500 
Debug.js:98 [39036][DashHandler] SegmentList: 1001 / 1195.861334 
Debug.js:98 [39037][DashHandler] Getting the next request at index: 501, type: video 
Debug.js:98 [39038][DashHandler] SegmentList: 1003.002 / 1195.861334 
Debug.js:98 [39039][ScheduleController][video] Next fragment request url is https://example.com/dash_video_4.mp4 
Debug.js:98 [39134][AbrController] AbrController (audio) stay on 0/0 (buffer: 3.751) 
Debug.js:98 [39135][NextFragmentRequestRule] Prior to making a request for time, NextFragmentRequestRule is aligning index handler's currentTime with bufferedRange.end for audio . 1002 was changed to 1002.005333 
Debug.js:98 [39136][DashHandler] Getting the request for audio time : 1002.005333 
Debug.js:98 [39137][DashHandler] Index for audio time 1002.005333 is 500 
Debug.js:98 [39137][DashHandler] SegmentList: 1000 / 1195.861334 
Debug.js:98 [39138][DashHandler] Getting the next request at index: 501, type: audio 
Debug.js:98 [39139][DashHandler] SegmentList: 1002 / 1195.861334 
Debug.js:98 [39140][ScheduleController][audio] Next fragment request url is https://example.com/dash_audio_3.mp4 
Debug.js:98 [39455][ScheduleController][video] OnFragmentLoadingCompleted - Url: https://example.com/dash_video_4.mp4 , Range: 57101482-57217549 
Debug.js:98 [39457][BufferController][video] Buffered Range for type: video : 996.996  -  1005.003999  currentTime =  998.254617 
Debug.js:98 [39459][NextFragmentRequestRule] Prior to making a request for time, NextFragmentRequestRule is aligning index handler's currentTime with bufferedRange.end for video . 1005.0039999999999 was changed to 1005.003999 
Debug.js:98 [39460][DashHandler] Getting the request for video time : 1005.003999 
Debug.js:98 [39460][DashHandler] Index for video time 1005.003999 is 501 
Debug.js:98 [39461][DashHandler] SegmentList: 1003.002 / 1195.861334 
Debug.js:98 [39462][DashHandler] Getting the next request at index: 502, type: video 
Debug.js:98 [39464][DashHandler] SegmentList: 1005.004 / 1195.861334 
Debug.js:98 [39466][ScheduleController][video] Next fragment request url is https://example.com/dash_video_4.mp4 
Debug.js:98 [39584][ScheduleController][audio] OnFragmentLoadingCompleted - Url: https://example.com/dash_audio_3.mp4 , Range: 15960869-15992817 
Debug.js:98 [39585][BufferController][audio] Buffered Range for type: audio : 998.016  -  1004.010666  currentTime =  998.254617 
Debug.js:98 [39588][AbrController] AbrController (audio) stay on 0/0 (buffer: 5.756) 
Debug.js:98 [39589][NextFragmentRequestRule] Prior to making a request for time, NextFragmentRequestRule is aligning index handler's currentTime with bufferedRange.end for audio . 1004 was changed to 1004.010666 
Debug.js:98 [39589][DashHandler] Getting the request for audio time : 1004.010666 
Debug.js:98 [39590][DashHandler] Index for audio time 1004.010666 is 501 
Debug.js:98 [39590][DashHandler] SegmentList: 1002 / 1195.861334 
Debug.js:98 [39591][DashHandler] Getting the next request at index: 502, type: audio 
Debug.js:98 [39591][DashHandler] SegmentList: 1004 / 1195.861334 
Debug.js:98 [39591][ScheduleController][audio] Next fragment request url is https://example.com/dash_audio_3.mp4 
Debug.js:98 [39760][ScheduleController][video] OnFragmentLoadingCompleted - Url: https://example.com/dash_video_4.mp4 , Range: 57217550-57335087 
Debug.js:98 [39761][BufferController][video] Buffered Range for type: video : 996.996  -  1007.005999  currentTime =  998.254617 
Debug.js:98 [39763][NextFragmentRequestRule] Prior to making a request for time, NextFragmentRequestRule is aligning index handler's currentTime with bufferedRange.end for video . 1007.006 was changed to 1007.005999 
Debug.js:98 [39764][DashHandler] Getting the request for video time : 1007.005999 
Debug.js:98 [39764][DashHandler] Index for video time 1007.005999 is 502 
Debug.js:98 [39764][DashHandler] SegmentList: 1005.004 / 1195.861334 
Debug.js:98 [39765][DashHandler] Getting the next request at index: 503, type: video 
Debug.js:98 [39765][DashHandler] SegmentList: 1007.006 / 1195.861334 
Debug.js:98 [39766][ScheduleController][video] Next fragment request url is https://example.com/dash_video_4.mp4 
Debug.js:98 [39886][ScheduleController][audio] OnFragmentLoadingCompleted - Url: https://example.com/dash_audio_3.mp4 , Range: 15992818-16024697 
Debug.js:98 [39887][BufferController][audio] Buffered Range for type: audio : 998.016  -  1006.015999  currentTime =  998.254617 
Debug.js:98 [39890][AbrController] AbrController (audio) stay on 0/0 (buffer: 7.761) 
Debug.js:98 [39890][NextFragmentRequestRule] Prior to making a request for time, NextFragmentRequestRule is aligning index handler's currentTime with bufferedRange.end for audio . 1006 was changed to 1006.015999 
Debug.js:98 [39890][DashHandler] Getting the request for audio time : 1006.015999 
Debug.js:98 [39891][DashHandler] Index for audio time 1006.015999 is 502 
Debug.js:98 [39891][DashHandler] SegmentList: 1004 / 1195.861334 
Debug.js:98 [39892][DashHandler] Getting the next request at index: 503, type: audio 
Debug.js:98 [39892][DashHandler] SegmentList: 1006 / 1195.861334 
Debug.js:98 [39892][ScheduleController][audio] Next fragment request url is https://example.com/dash_audio_3.mp4 
Debug.js:98 [40060][ScheduleController][video] OnFragmentLoadingCompleted - Url: https://example.com/dash_video_4.mp4 , Range: 57335088-57448002 
Debug.js:98 [40062][BufferController][video] Buffered Range for type: video : 996.996  -  1009.007999  currentTime =  998.254617 
Debug.js:98 [40064][NextFragmentRequestRule] Prior to making a request for time, NextFragmentRequestRule is aligning index handler's currentTime with bufferedRange.end for video . 1009.0079999999999 was changed to 1009.007999 
Debug.js:98 [40064][DashHandler] Getting the request for video time : 1009.007999 
Debug.js:98 [40064][DashHandler] Index for video time 1009.007999 is 503 
Debug.js:98 [40065][DashHandler] SegmentList: 1007.006 / 1195.861334 
Debug.js:98 [40065][DashHandler] Getting the next request at index: 504, type: video 
Debug.js:98 [40065][DashHandler] SegmentList: 1009.008 / 1195.861334 
Debug.js:98 [40066][ScheduleController][video] Next fragment request url is https://example.com/dash_video_4.mp4 
Debug.js:98 [40185][ScheduleController][audio] OnFragmentLoadingCompleted - Url: https://example.com/dash_audio_3.mp4 , Range: 16024698-16056328 
Debug.js:98 [40186][BufferController][audio] Buffered Range for type: audio : 998.016  -  1007.999999  currentTime =  998.254617 
Debug.js:98 [40188][AbrController] AbrController (audio) stay on 0/0 (buffer: 9.745) 
Debug.js:98 [40188][NextFragmentRequestRule] Prior to making a request for time, NextFragmentRequestRule is aligning index handler's currentTime with bufferedRange.end for audio . 1008 was changed to 1007.999999 
Debug.js:98 [40189][DashHandler] Getting the request for audio time : 1007.999999 
Debug.js:98 [40189][DashHandler] Index for audio time 1007.999999 is 503 
Debug.js:98 [40189][DashHandler] SegmentList: 1006 / 1195.861334 
Debug.js:98 [40190][DashHandler] Getting the next request at index: 504, type: audio 
Debug.js:98 [40190][DashHandler] SegmentList: 1008 / 1195.861334 
Debug.js:98 [40191][ScheduleController][audio] Next fragment request url is https://example.com/dash_audio_3.mp4 
Debug.js:98 [40355][ScheduleController][video] OnFragmentLoadingCompleted - Url: https://example.com/dash_video_4.mp4 , Range: 57448003-57561904 
Debug.js:98 [40357][BufferController][video] Buffered Range for type: video : 996.996  -  1011.009999  currentTime =  998.254617 
Debug.js:98 [40357][AbrController] AbrController (video) switching from throughput to buffer occupancy ABR rule (buffer: 12.755). 
Debug.js:98 [40358][BufferController][video] Got enough buffer to start for video 
Debug.js:98 [40484][ScheduleController][audio] OnFragmentLoadingCompleted - Url: https://example.com/dash_audio_3.mp4 , Range: 16056329-16088258 
Debug.js:98 [40486][BufferController][audio] Buffered Range for type: audio : 998.016  -  1010.005333  currentTime =  998.254617 
Debug.js:98 [40488][AbrController] AbrController (audio) stay on 0/0 (buffer: 11.751) 
Debug.js:98 [40489][NextFragmentRequestRule] Prior to making a request for time, NextFragmentRequestRule is aligning index handler's currentTime with bufferedRange.end for audio . 1010 was changed to 1010.005333 
Debug.js:98 [40489][DashHandler] Getting the request for audio time : 1010.005333 
Debug.js:98 [40489][DashHandler] Index for audio time 1010.005333 is 504 
Debug.js:98 [40490][DashHandler] SegmentList: 1008 / 1195.861334 
Debug.js:98 [40490][DashHandler] Getting the next request at index: 505, type: audio 
Debug.js:98 [40491][DashHandler] SegmentList: 1010 / 1195.861334 
Debug.js:98 [40491][ScheduleController][audio] Next fragment request url is https://example.com/dash_audio_3.mp4 
Debug.js:98 [40790][ScheduleController][audio] OnFragmentLoadingCompleted - Url: https://example.com/dash_audio_3.mp4 , Range: 16088259-16120146 
Debug.js:98 [40791][BufferController][audio] Buffered Range for type: audio : 998.016  -  1012.010666  currentTime =  998.254617 
Debug.js:98 [40792][AbrController] AbrController (audio) switching from throughput to buffer occupancy ABR rule (buffer: 13.756). 
Debug.js:98 [40792][BufferController][audio] Got enough buffer to start for audio