-
Notifications
You must be signed in to change notification settings - Fork 2.6k
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
LL-HLS skips parts on segment break #5028
Comments
This very well could be my mistake in how i am calculating the offsets with the blocking request however I believe I followed the spec correctly. Would just like to know if I am doing something wrong. |
Upon triage what seems to be happening is that since our part cut is 0.25s This value is https://github.com/video-dev/hls.js/blob/master/docs/API.md#maxfraglookuptolerance too high for our usecase. This was the part list upon triage
I then noticed that the value of A high level breakdown was that the hls.js/src/controller/fragment-finders.ts Lines 81 to 84 in 966fec0
However that claim has no base other than me briefly looking at the code. To fix the issue I simply set the maxFragLookUpTolerance to 0.1 however I should not have to do that since, that setting should not cause buffer gaps as its intended (I think) to patch small buffer gaps.
|
This may be fixed in v1.3 with #5084. See https://hls-js-dev.netlify.app/demo/. #5122 should also help with streams that have a mix of more than one independent part and non-independent parts. |
While behavior is improved in v1.3.0, I can still reproduce this issue as described. It's more common in streams with sub-second parts where blocking playlist requests cannot complete in time. Playing streams with many small parts (0.2s) in large segments (>=6s) make the issue more prevalent. I don't see it in streams with 1s parts unless I throttle throughput in such a way that would already cause stalling. Moved to v1.4. |
Hi @TroyKomodo, I wasn't able to confirm whether or not we fixed this in v1.4.0. There were some improvements to segment and part selection. Are you able to reproduce as described? The only way I could think the player would skip loading a part is if the playhead moved past it instead of stalling (perhaps with audio but no video buffered). But since you sample is muxed, that doesn't seem to be the case. |
Hey @robwalch , If that is the case it would nudge too far forward eagerly. The fix is to simply lower the nudge fragment duration. However this ticket remained open because it is a bit strange that the nudge fragment behavior is eager to seek before using the next closest fragment. As in if there are 2 fragments avaliable, one fragment is immediately sequential and the other fragment is <= the nudge distance away, because the sequential fragment is very small, hls.js would opt to nudge over the small fragment. |
This should be fixed with changes in v1.4.0.
I did a little testing (Flussonic LL-HLS with 0.192s parts and |
There are still less severe issues with selecting and appending parts before currentTime. These are being tracked and discussed in #3596 (comment) |
Hi @TroyKomodo, Fixes have been merged. I plan to tag and release 1.4.2 tomorrow. |
@robwalch sounds great thanks for merging the fix! I'll test tomorrow on the demo page and report here. |
v1.4.2 is out! |
@robwalch https://notre-seeks-theaters-emily.trycloudflare.com/09fb76e3-6034-4d16-97cb-aefedbbf6471/master.m3u8 Try on a chrome browser on desktop it wont work on safari since its AV1 + Opus |
Hi @TroyKomodo, I can't access that stream, and don't understand what codec compatibility has to do with this issue. I'm closing this issue as it is resolved as described by v1.4.3 (parts are not skipped). Please file new bug reports against the latest release for any issues you may be having. Thanks! |
What version of Hls.js are you using?
v1.2.7
What browser (including version) are you using?
Chrome Version 107.0.5304.107 (Official Build) (64-bit)
What OS (including version) are you using?
Windows 11
Test stream
No response
Configuration
Additional player setup steps
Using https://hls-js.netlify.app/demo/
What ive noticed is the player seems to skip fragments if the media playlist publishes multiple parts at the same time. For example
If we do LL-HLS and do a blocking request on media-segment 0 part 3 and the request responds, however the playlist contains media-segment 1 part 1 the player wont load media-segment 0 part 4
In the image above the segment 118 has 8 parts.
Playlist
playlist.m3u8?_HLS_msn=118&_HLS_part=6
Playlist
playlist.m3u8?_HLS_msn=118&_HLS_part=7
And then it seems to never request segment
118.7.mp4
as it skips to119.0.mp4
I am not sure if this is a bug with how I am generating the manifests or if this is a bug in the player, regardless even if I am generating the playlists wrong this seems like strange behaviour to skip a part because of the next independent part is ready, if anything it should request both.
Checklist
Steps to reproduce
Expected behaviour
The player requests the last part index of the previous segment and does not have a time gap in buffer state.
What actually happened?
The player skips the last part of the previous segment and create a time gap.
Console output
Chrome media internals output
No response
The text was updated successfully, but these errors were encountered: