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

Frag Loop Loading Error on Edge/IE11 #517

Closed
riderodd opened this issue Jun 21, 2016 · 10 comments
Closed

Frag Loop Loading Error on Edge/IE11 #517

riderodd opened this issue Jun 21, 2016 · 10 comments
Labels

Comments

@riderodd
Copy link

Hey guys,

I've got a "Frag Loop Loading Error" on some videos, but only in Edge/IE11 (works fine in Chrome). It keeps loading frag 2 & 3 again and again and never plays (stream stops after some seconds). Example here : http://dailymotion.github.io/hls.js/demo/?src=https%3A%2F%2Fsmart.biptv.tv%2Ffiles%2Fmt_575702f014836%2C-360%2C-480%2C-720%2C-1080%2C.mp4.urlset%2Fmaster.m3u8&enableStreaming=true&autoRecoverError=true&enableWorker=true&levelCapping=-1&defaultAudioCodec=undefined

Here are the stats that I get every time:
image

I'm on Edge 25, but it's the same thing on IE11.

@riderodd
Copy link
Author

I noticed that in Chrome I get errors in console, but the playback continues. On IE it fails.
Here is the console in chrome:

[log] > fragLoadedDelay/bufferStarvationDelay/fragLevelNextLoadedDelay[0] :3.5/3.5/7.2 logger.js:37 
[log] > fragLoadedDelay/bufferStarvationDelay/fragLevelNextLoadedDelay[0] :3.6/3.4/7.4 logger.js:37 
[log] > fragLoadedDelay/bufferStarvationDelay/fragLevelNextLoadedDelay[0] :3.6/3.3/7.5 logger.js:37 
[log] > fragLoadedDelay/bufferStarvationDelay/fragLevelNextLoadedDelay[0] :3.5/3.2/7.4 logger.js:37 
[log] > fragLoadedDelay/bufferStarvationDelay/fragLevelNextLoadedDelay[0] :3.5/3.1/7.5 logger.js:37 
[log] > fragLoadedDelay/bufferStarvationDelay/fragLevelNextLoadedDelay[0] :3.6/3.0/7.6 logger.js:37 
[log] > fragLoadedDelay/bufferStarvationDelay/fragLevelNextLoadedDelay[0] :3.6/2.9/7.7 logger.js:37 
[log] > fragLoadedDelay/bufferStarvationDelay/fragLevelNextLoadedDelay[0] :3.7/2.8/7.9 logger.js:37 
[log] > fragLoadedDelay/bufferStarvationDelay/fragLevelNextLoadedDelay[0] :3.7/2.7/8.0 logger.js:37 
[log] > fragLoadedDelay/bufferStarvationDelay/fragLevelNextLoadedDelay[0] :3.6/2.6/7.9 logger.js:37 
[log] > fragLoadedDelay/bufferStarvationDelay/fragLevelNextLoadedDelay[0] :3.6/2.5/8.0 logger.js:37 
[log] > fragLoadedDelay/bufferStarvationDelay/fragLevelNextLoadedDelay[0] :3.4/2.4/8.0 logger.js:37 
[log] > fragLoadedDelay/bufferStarvationDelay/fragLevelNextLoadedDelay[0] :3.5/2.3/8.1 logger.js:37 
[log] > fragLoadedDelay/bufferStarvationDelay/fragLevelNextLoadedDelay[0] :3.5/2.2/8.2 logger.js:37 
[log] > fragLoadedDelay/bufferStarvationDelay/fragLevelNextLoadedDelay[0] :3.3/2.1/8.1 logger.js:37 
[log] > fragLoadedDelay/bufferStarvationDelay/fragLevelNextLoadedDelay[0] :3.4/2.0/8.2 logger.js:37 
[log] > fragLoadedDelay/bufferStarvationDelay/fragLevelNextLoadedDelay[0] :3.4/1.9/8.3 logger.js:37 
[log] > fragLoadedDelay/bufferStarvationDelay/fragLevelNextLoadedDelay[0] :3.5/1.8/8.4 logger.js:37 
[log] > fragLoadedDelay/bufferStarvationDelay/fragLevelNextLoadedDelay[0] :3.5/1.7/8.5 logger.js:37 
[log] > fragLoadedDelay/bufferStarvationDelay/fragLevelNextLoadedDelay[0] :3.6/1.6/8.6 logger.js:37 
[log] > fragLoadedDelay/bufferStarvationDelay/fragLevelNextLoadedDelay[0] :3.6/1.5/8.7 logger.js:37 
[log] > fragLoadedDelay/bufferStarvationDelay/fragLevelNextLoadedDelay[0] :3.6/1.4/8.8 logger.js:37 
[log] > fragLoadedDelay/bufferStarvationDelay/fragLevelNextLoadedDelay[0] :3.4/1.3/8.8 logger.js:37 
[log] > fragLoadedDelay/bufferStarvationDelay/fragLevelNextLoadedDelay[0] :3.5/1.2/8.9 logger.js:37 
[log] > fragLoadedDelay/bufferStarvationDelay/fragLevelNextLoadedDelay[0] :3.5/1.1/9.0 logger.js:37 
[log] > fragLoadedDelay/bufferStarvationDelay/fragLevelNextLoadedDelay[0] :3.6/1.0/9.1 logger.js:37 
[log] > fragLoadedDelay/bufferStarvationDelay/fragLevelNextLoadedDelay[0] :3.6/0.9/9.2 logger.js:37 
[log] > fragLoadedDelay/bufferStarvationDelay/fragLevelNextLoadedDelay[0] :3.6/0.8/9.3 logger.js:37 
[log] > fragLoadedDelay/bufferStarvationDelay/fragLevelNextLoadedDelay[0] :3.4/0.7/9.2 logger.js:37 
[log] > fragLoadedDelay/bufferStarvationDelay/fragLevelNextLoadedDelay[0] :3.2/0.6/9.1 logger.js:37 
[log] > fragLoadedDelay/bufferStarvationDelay/fragLevelNextLoadedDelay[0] :3.3/0.5/9.2 logger.js:37 
[log] > fragLoadedDelay/bufferStarvationDelay/fragLevelNextLoadedDelay[0] :3.3/0.4/9.3 logger.js:37 
[log] > fragLoadedDelay/bufferStarvationDelay/fragLevelNextLoadedDelay[0] :3.3/0.3/9.4 logger.js:37 
[log] > fragLoadedDelay/bufferStarvationDelay/fragLevelNextLoadedDelay[0] :3.1/0.2/9.3 logger.js:37 
[log] > fragLoadedDelay/bufferStarvationDelay/fragLevelNextLoadedDelay[0] :3.2/0.1/9.4 logger.js:37 
[log] > fragLoadedDelay/bufferStarvationDelay/fragLevelNextLoadedDelay[0] :3.2/0.0/9.5 logger.js:37 
[log] > fragLoadedDelay/bufferStarvationDelay/fragLevelNextLoadedDelay[0] :3.2/0.0/9.6 logger.js:37 
[log] > playback seems stuck @10.005333 logger.js:37
[log] > fragLoadedDelay/bufferStarvationDelay/fragLevelNextLoadedDelay[0] :3.0/0.0/9.5 logger.js:37 
[log] > fragLoadedDelay/bufferStarvationDelay/fragLevelNextLoadedDelay[0] :2.8/0.0/9.5 logger.js:37 
[log] > fragLoadedDelay/bufferStarvationDelay/fragLevelNextLoadedDelay[0] :2.8/0.0/9.6 logger.js:37 
[log] > fragLoadedDelay/bufferStarvationDelay/fragLevelNextLoadedDelay[0] :2.6/0.0/9.5 logger.js:37 
[log] > fragLoadedDelay/bufferStarvationDelay/fragLevelNextLoadedDelay[0] :2.7/0.0/9.6 logger.js:37 
[log] > fragLoadedDelay/bufferStarvationDelay/fragLevelNextLoadedDelay[0] :2.7/0.0/9.7 logger.js:37 
[log] > fragLoadedDelay/bufferStarvationDelay/fragLevelNextLoadedDelay[0] :2.7/0.0/9.8 logger.js:37 
[log] > fragLoadedDelay/bufferStarvationDelay/fragLevelNextLoadedDelay[0] :2.5/0.0/9.7 logger.js:37 
[log] > fragLoadedDelay/bufferStarvationDelay/fragLevelNextLoadedDelay[0] :2.5/0.0/9.8 logger.js:37 
[log] > fragLoadedDelay/bufferStarvationDelay/fragLevelNextLoadedDelay[0] :2.3/0.0/9.7 logger.js:37 
[log] > fragLoadedDelay/bufferStarvationDelay/fragLevelNextLoadedDelay[0] :2.3/0.0/9.8 logger.js:37 
[log] > fragLoadedDelay/bufferStarvationDelay/fragLevelNextLoadedDelay[0] :2.4/0.0/9.9 logger.js:37 
[log] > fragLoadedDelay/bufferStarvationDelay/fragLevelNextLoadedDelay[0] :2.2/0.0/9.8 logger.js:37 
[log] > fragLoadedDelay/bufferStarvationDelay/fragLevelNextLoadedDelay[0] :2.2/0.0/9.9 logger.js:37 
[log] > fragLoadedDelay/bufferStarvationDelay/fragLevelNextLoadedDelay[0] :2.2/0.0/10.0 logger.js:37 
[log] > fragLoadedDelay/bufferStarvationDelay/fragLevelNextLoadedDelay[0] :2.0/0.0/9.9

mangui referenced this issue Jun 23, 2016
just reduce max buffer length, and switch back to IDLE state, waiting for natural buffer eviction is safer
related to https://github.com/dailymotion/hls.js/issues/517
mangui referenced this issue Jun 23, 2016
…nts not starting with K-Frames

when there is a significant startPTS offset between audio and video and frag look up always detect that same fragment,
force loading previous fragment, to try to get last keyframe ... this usually helps fill the buffer hole

related to https://github.com/dailymotion/hls.js/issues/517
@mangui mangui added the Bug label Jun 23, 2016
@mangui
Copy link
Member

mangui commented Jun 23, 2016

Hi @riderodd plz recheck on latest v0.5.x, issue should be fixed on Edge.
I am now avoiding the flush of the buffer in case of buffer full error (QuotaExceededError) reported by sourcebuffers.
I also improved the handling of fragments not starting with KF, generating buffer holes (in your case it was the main reason of the fragLoopLoadingError)

@JHartman5
Copy link
Contributor

JHartman5 commented Jun 27, 2016

@mangui, can you please try your change with the following m3u8:

https://recordings.boxcast.com/recordings/ukuxchqgynys1bbiti8t/298/310/all.m3u8

There are several fragments here with gaps > maxBufferHole, but there are discontinuities between them, so I wouldn't have expected to see this behavior. Also, it just gets stuck in a frag loop loading error after some time.

For what it's worth, it seems to play through without issue on master.

@riderodd
Copy link
Author

Well done @mangui , it works now 😄

@JHartman5
Copy link
Contributor

@mangui, please see my comment above. Should I open a new issue for this? Your commit to resolve this issue broke my use case.

@mangui
Copy link
Member

mangui commented Jun 29, 2016

@JHartman5 checking

@mangui
Copy link
Member

mangui commented Jun 29, 2016

@JHartman5 definitely a regression from dailymotion@fe399f9
a better way to handle this would be that demux/remux will tell to stream controller if video does not start with KF. so that this logic of reloading frag N-1 would only happen in that case.
I will look into it tomorrow

@JHartman5
Copy link
Contributor

Thanks for checking! 👍

@JHartman5
Copy link
Contributor

Works! Thanks! 👍

mangui referenced this issue Jul 4, 2016
just reduce max buffer length, and switch back to IDLE state, waiting for natural buffer eviction is safer
related to https://github.com/dailymotion/hls.js/issues/517
mangui referenced this issue Jul 4, 2016
…nts not starting with K-Frames

when there is a significant startPTS offset between audio and video and frag look up always detect that same fragment,
force loading previous fragment, to try to get last keyframe ... this usually helps fill the buffer hole

related to https://github.com/dailymotion/hls.js/issues/517
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

3 participants