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

LL-HLS skips parts on segment break #5028

Closed
5 tasks done
TroyKomodo opened this issue Nov 13, 2022 · 14 comments
Closed
5 tasks done

LL-HLS skips parts on segment break #5028

TroyKomodo opened this issue Nov 13, 2022 · 14 comments

Comments

@TroyKomodo
Copy link
Contributor

TroyKomodo commented Nov 13, 2022

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

{
  "debug": true,
  "enableWorker": true,
  "lowLatencyMode": true,
  "backBufferLength": 90
}

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

image

image

In the image above the segment 118 has 8 parts.

1. 118.0.mp4
2. 118.1.mp4
3. 118.2.mp4
4. 118.3.mp4
5. 118.4.mp4
6. 118.5.mp4
7. 118.6.mp4
8. 118.7.mp4

Playlist playlist.m3u8?_HLS_msn=118&_HLS_part=6

#EXTM3U
#EXT-X-VERSION:7
#EXT-X-TARGETDURATION:6
#EXT-X-PART-INF:PART-TARGET=0.75
#EXT-X-MEDIA-SEQUENCE:109
#EXT-X-MAP:URI="init.mp4"
#EXT-X-SERVER-CONTROL:CAN-BLOCK-RELOAD=YES,PART-HOLD-BACK=2.25
#EXT-X-PROGRAM-DATE-TIME:2022-11-13T15:26:14.359Z
#EXTINF:2,
109.mp4
#EXT-X-PROGRAM-DATE-TIME:2022-11-13T15:26:16.345Z
#EXTINF:2,
110.mp4
#EXT-X-PART:DURATION=0.25,URI="111.0.mp4",INDEPENDENT=YES
#EXT-X-PART:DURATION=0.25,URI="111.1.mp4"
#EXT-X-PART:DURATION=0.25,URI="111.2.mp4"
#EXT-X-PART:DURATION=0.25,URI="111.3.mp4"
#EXT-X-PART:DURATION=0.25,URI="111.4.mp4"
#EXT-X-PART:DURATION=0.25,URI="111.5.mp4"
#EXT-X-PART:DURATION=0.25,URI="111.6.mp4"
#EXT-X-PART:DURATION=0.25,URI="111.7.mp4"
#EXT-X-PROGRAM-DATE-TIME:2022-11-13T15:26:18.359Z
#EXTINF:2,
111.mp4
#EXT-X-PART:DURATION=0.25,URI="112.0.mp4",INDEPENDENT=YES
#EXT-X-PART:DURATION=0.25,URI="112.1.mp4"
#EXT-X-PART:DURATION=0.25,URI="112.2.mp4"
#EXT-X-PART:DURATION=0.25,URI="112.3.mp4"
#EXT-X-PART:DURATION=0.25,URI="112.4.mp4"
#EXT-X-PART:DURATION=0.25,URI="112.5.mp4"
#EXT-X-PART:DURATION=0.25,URI="112.6.mp4"
#EXT-X-PART:DURATION=0.25,URI="112.7.mp4"
#EXT-X-PROGRAM-DATE-TIME:2022-11-13T15:26:20.343Z
#EXTINF:2,
112.mp4
#EXT-X-PART:DURATION=0.25,URI="113.0.mp4",INDEPENDENT=YES
#EXT-X-PART:DURATION=0.25,URI="113.1.mp4"
#EXT-X-PART:DURATION=0.25,URI="113.2.mp4"
#EXT-X-PART:DURATION=0.25,URI="113.3.mp4"
#EXT-X-PART:DURATION=0.25,URI="113.4.mp4"
#EXT-X-PART:DURATION=0.25,URI="113.5.mp4"
#EXT-X-PART:DURATION=0.25,URI="113.6.mp4"
#EXT-X-PART:DURATION=0.25,URI="113.7.mp4"
#EXT-X-PROGRAM-DATE-TIME:2022-11-13T15:26:22.339Z
#EXTINF:2,
113.mp4
#EXT-X-PART:DURATION=0.25,URI="114.0.mp4",INDEPENDENT=YES
#EXT-X-PART:DURATION=0.25,URI="114.1.mp4"
#EXT-X-PART:DURATION=0.25,URI="114.2.mp4"
#EXT-X-PART:DURATION=0.25,URI="114.3.mp4"
#EXT-X-PART:DURATION=0.25,URI="114.4.mp4"
#EXT-X-PART:DURATION=0.25,URI="114.5.mp4"
#EXT-X-PART:DURATION=0.25,URI="114.6.mp4"
#EXT-X-PART:DURATION=0.25,URI="114.7.mp4"
#EXT-X-PROGRAM-DATE-TIME:2022-11-13T15:26:24.363Z
#EXTINF:2,
114.mp4
#EXT-X-PART:DURATION=0.25,URI="115.0.mp4",INDEPENDENT=YES
#EXT-X-PART:DURATION=0.25,URI="115.1.mp4"
#EXT-X-PART:DURATION=0.25,URI="115.2.mp4"
#EXT-X-PART:DURATION=0.25,URI="115.3.mp4"
#EXT-X-PART:DURATION=0.25,URI="115.4.mp4"
#EXT-X-PART:DURATION=0.25,URI="115.5.mp4"
#EXT-X-PART:DURATION=0.25,URI="115.6.mp4"
#EXT-X-PART:DURATION=0.25,URI="115.7.mp4"
#EXT-X-PROGRAM-DATE-TIME:2022-11-13T15:26:26.359Z
#EXTINF:2,
115.mp4
#EXT-X-PART:DURATION=0.25,URI="116.0.mp4",INDEPENDENT=YES
#EXT-X-PART:DURATION=0.25,URI="116.1.mp4"
#EXT-X-PART:DURATION=0.25,URI="116.2.mp4"
#EXT-X-PART:DURATION=0.25,URI="116.3.mp4"
#EXT-X-PART:DURATION=0.25,URI="116.4.mp4"
#EXT-X-PART:DURATION=0.25,URI="116.5.mp4"
#EXT-X-PART:DURATION=0.25,URI="116.6.mp4"
#EXT-X-PART:DURATION=0.25,URI="116.7.mp4"
#EXT-X-PROGRAM-DATE-TIME:2022-11-13T15:26:28.359Z
#EXTINF:2,
116.mp4
#EXT-X-PART:DURATION=0.25,URI="117.0.mp4",INDEPENDENT=YES
#EXT-X-PART:DURATION=0.25,URI="117.1.mp4"
#EXT-X-PART:DURATION=0.25,URI="117.2.mp4"
#EXT-X-PART:DURATION=0.25,URI="117.3.mp4"
#EXT-X-PART:DURATION=0.25,URI="117.4.mp4"
#EXT-X-PART:DURATION=0.25,URI="117.5.mp4"
#EXT-X-PART:DURATION=0.25,URI="117.6.mp4"
#EXT-X-PART:DURATION=0.25,URI="117.7.mp4"
#EXT-X-PROGRAM-DATE-TIME:2022-11-13T15:26:30.359Z
#EXTINF:2,
117.mp4
#EXT-X-PART:DURATION=0.25,URI="118.0.mp4",INDEPENDENT=YES
#EXT-X-PART:DURATION=0.25,URI="118.1.mp4"
#EXT-X-PART:DURATION=0.25,URI="118.2.mp4"
#EXT-X-PART:DURATION=0.25,URI="118.3.mp4"
#EXT-X-PART:DURATION=0.25,URI="118.4.mp4"
#EXT-X-PART:DURATION=0.25,URI="118.5.mp4"
#EXT-X-PART:DURATION=0.25,URI="118.6.mp4"
#EXT-X-PRELOAD-HINT:TYPE=PART,URI="118.7.mp4"

Playlist playlist.m3u8?_HLS_msn=118&_HLS_part=7

#EXTM3U
#EXT-X-VERSION:7
#EXT-X-TARGETDURATION:6
#EXT-X-PART-INF:PART-TARGET=0.75
#EXT-X-MEDIA-SEQUENCE:110
#EXT-X-MAP:URI="init.mp4"
#EXT-X-SERVER-CONTROL:CAN-BLOCK-RELOAD=YES,PART-HOLD-BACK=2.25
#EXT-X-PROGRAM-DATE-TIME:2022-11-13T15:26:16.345Z
#EXTINF:2,
110.mp4
#EXT-X-PROGRAM-DATE-TIME:2022-11-13T15:26:18.359Z
#EXTINF:2,
111.mp4
#EXT-X-PART:DURATION=0.25,URI="112.0.mp4",INDEPENDENT=YES
#EXT-X-PART:DURATION=0.25,URI="112.1.mp4"
#EXT-X-PART:DURATION=0.25,URI="112.2.mp4"
#EXT-X-PART:DURATION=0.25,URI="112.3.mp4"
#EXT-X-PART:DURATION=0.25,URI="112.4.mp4"
#EXT-X-PART:DURATION=0.25,URI="112.5.mp4"
#EXT-X-PART:DURATION=0.25,URI="112.6.mp4"
#EXT-X-PART:DURATION=0.25,URI="112.7.mp4"
#EXT-X-PROGRAM-DATE-TIME:2022-11-13T15:26:20.343Z
#EXTINF:2,
112.mp4
#EXT-X-PART:DURATION=0.25,URI="113.0.mp4",INDEPENDENT=YES
#EXT-X-PART:DURATION=0.25,URI="113.1.mp4"
#EXT-X-PART:DURATION=0.25,URI="113.2.mp4"
#EXT-X-PART:DURATION=0.25,URI="113.3.mp4"
#EXT-X-PART:DURATION=0.25,URI="113.4.mp4"
#EXT-X-PART:DURATION=0.25,URI="113.5.mp4"
#EXT-X-PART:DURATION=0.25,URI="113.6.mp4"
#EXT-X-PART:DURATION=0.25,URI="113.7.mp4"
#EXT-X-PROGRAM-DATE-TIME:2022-11-13T15:26:22.339Z
#EXTINF:2,
113.mp4
#EXT-X-PART:DURATION=0.25,URI="114.0.mp4",INDEPENDENT=YES
#EXT-X-PART:DURATION=0.25,URI="114.1.mp4"
#EXT-X-PART:DURATION=0.25,URI="114.2.mp4"
#EXT-X-PART:DURATION=0.25,URI="114.3.mp4"
#EXT-X-PART:DURATION=0.25,URI="114.4.mp4"
#EXT-X-PART:DURATION=0.25,URI="114.5.mp4"
#EXT-X-PART:DURATION=0.25,URI="114.6.mp4"
#EXT-X-PART:DURATION=0.25,URI="114.7.mp4"
#EXT-X-PROGRAM-DATE-TIME:2022-11-13T15:26:24.363Z
#EXTINF:2,
114.mp4
#EXT-X-PART:DURATION=0.25,URI="115.0.mp4",INDEPENDENT=YES
#EXT-X-PART:DURATION=0.25,URI="115.1.mp4"
#EXT-X-PART:DURATION=0.25,URI="115.2.mp4"
#EXT-X-PART:DURATION=0.25,URI="115.3.mp4"
#EXT-X-PART:DURATION=0.25,URI="115.4.mp4"
#EXT-X-PART:DURATION=0.25,URI="115.5.mp4"
#EXT-X-PART:DURATION=0.25,URI="115.6.mp4"
#EXT-X-PART:DURATION=0.25,URI="115.7.mp4"
#EXT-X-PROGRAM-DATE-TIME:2022-11-13T15:26:26.359Z
#EXTINF:2,
115.mp4
#EXT-X-PART:DURATION=0.25,URI="116.0.mp4",INDEPENDENT=YES
#EXT-X-PART:DURATION=0.25,URI="116.1.mp4"
#EXT-X-PART:DURATION=0.25,URI="116.2.mp4"
#EXT-X-PART:DURATION=0.25,URI="116.3.mp4"
#EXT-X-PART:DURATION=0.25,URI="116.4.mp4"
#EXT-X-PART:DURATION=0.25,URI="116.5.mp4"
#EXT-X-PART:DURATION=0.25,URI="116.6.mp4"
#EXT-X-PART:DURATION=0.25,URI="116.7.mp4"
#EXT-X-PROGRAM-DATE-TIME:2022-11-13T15:26:28.359Z
#EXTINF:2,
116.mp4
#EXT-X-PART:DURATION=0.25,URI="117.0.mp4",INDEPENDENT=YES
#EXT-X-PART:DURATION=0.25,URI="117.1.mp4"
#EXT-X-PART:DURATION=0.25,URI="117.2.mp4"
#EXT-X-PART:DURATION=0.25,URI="117.3.mp4"
#EXT-X-PART:DURATION=0.25,URI="117.4.mp4"
#EXT-X-PART:DURATION=0.25,URI="117.5.mp4"
#EXT-X-PART:DURATION=0.25,URI="117.6.mp4"
#EXT-X-PART:DURATION=0.25,URI="117.7.mp4"
#EXT-X-PROGRAM-DATE-TIME:2022-11-13T15:26:30.359Z
#EXTINF:2,
117.mp4
#EXT-X-PART:DURATION=0.25,URI="118.0.mp4",INDEPENDENT=YES
#EXT-X-PART:DURATION=0.25,URI="118.1.mp4"
#EXT-X-PART:DURATION=0.25,URI="118.2.mp4"
#EXT-X-PART:DURATION=0.25,URI="118.3.mp4"
#EXT-X-PART:DURATION=0.25,URI="118.4.mp4"
#EXT-X-PART:DURATION=0.25,URI="118.5.mp4"
#EXT-X-PART:DURATION=0.25,URI="118.6.mp4"
#EXT-X-PART:DURATION=0.25,URI="118.7.mp4"
#EXT-X-PROGRAM-DATE-TIME:2022-11-13T15:26:32.359Z
#EXTINF:2,
118.mp4
#EXT-X-PART:DURATION=0.25,URI="119.0.mp4",INDEPENDENT=YES
#EXT-X-PRELOAD-HINT:TYPE=PART,URI="119.1.mp4"

And then it seems to never request segment 118.7.mp4 as it skips to 119.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

  1. Serve a playlist which adds 2 parts, one at the end of a segment and one at the beginning of a new segment on the same request.
  2. Notice how the player does not request the last part of the previous segment.
  3. If you are a bit behind this happens more frequently it seems.
  4. I enabled stop on first stall on the demo player so the player stopping is unrelated.

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

content-script.js:95 Failed to get subsystem status for purpose {rejected: true, message: {…}}
main.js:341 Using Hls.js config: {debug: true, enableWorker: true, lowLatencyMode: true, backBufferLength: 90}
logger.ts:74 [log] > Debug logs enabled for "Hls instance"
hls.ts:375 [log] > stopLoad
hls.ts:343 [log] > loadSource:https://adventures-twenty-dinner-sacrifice.trycloudflare.com/edcf6c00-7be2-4258-a120-d36b1b498bde/source/playlist.m3u8
stream-controller.ts:543 [log] > [stream-controller]: Trigger BUFFER_RESET
hls.ts:314 [log] > attachMedia
buffer-controller.ts:756 [log] > [buffer-controller]: Media source opened
base-stream-controller.ts:1396 [log] > [subtitle-stream-controller]: STOPPED->IDLE
level-controller.ts:172 [log] > [level-controller]: manifest loaded, 1 level(s) found, first bitrate: 0
buffer-controller.ts:136 [log] > 1 bufferCodec event(s) expected
hls.ts:365 [log] > startLoad(-1)
level-controller.ts:251 [log] > [level-controller]: switching to level 0 from -1
level-controller.ts:537 [log] > [level-controller]: Attempt loading level index 0 with URL-id 0 https://adventures-twenty-dinner-sacrifice.trycloudflare.com/edcf6c00-7be2-4258-a120-d36b1b498bde/source/playlist.m3u8
base-stream-controller.ts:1396 [log] > [stream-controller]: STOPPED->IDLE
base-stream-controller.ts:1396 [log] > [subtitle-stream-controller]: IDLE->STOPPED
base-stream-controller.ts:1396 [log] > [subtitle-stream-controller]: STOPPED->IDLE
base-playlist-controller.ts:120 [log] > [level-controller]: live playlist 0 MISSED
base-playlist-controller.ts:211 [log] > [level-controller]: reload live playlist 0 in 333 ms
stream-controller.ts:608 [log] > [stream-controller]: Level 0 loaded [108,116], cc [0, 0] duration:18.75
base-stream-controller.ts:1134 [log] > [stream-controller]: Live playlist sliding: 0.00 start-sn: 108->108 prev-sn: na fragments: 9
buffer-controller.ts:648 [log] > [buffer-controller]: Updating Media Source duration to 18.750
base-stream-controller.ts:612 [log] > [stream-controller]: Loading fragment initSegment cc: 0 level: 0, target: 0
base-stream-controller.ts:1396 [log] > [stream-controller]: IDLE->FRAG_LOADING
base-playlist-controller.ts:120 [log] > [level-controller]: live playlist 0 MISSED
base-playlist-controller.ts:211 [log] > [level-controller]: reload live playlist 0 in 666 ms
stream-controller.ts:608 [log] > [stream-controller]: Level 0 loaded [108,116], cc [0, 0] duration:18.75
base-stream-controller.ts:1134 [log] > [stream-controller]: Live playlist sliding: 0.00 start-sn: 108->108 prev-sn: na fragments: 9
base-stream-controller.ts:1396 [log] > [stream-controller]: FRAG_LOADING->IDLE
base-stream-controller.ts:506 [log] > [stream-controller]: Buffered main sn: initSegment of level 0 
base-stream-controller.ts:578 [log] > [stream-controller]: Loading part sn: 116 p: 0 cc: 0 of playlist [108-116] parts [0-48-58] level: 0, target: 16.507
base-stream-controller.ts:1396 [log] > [stream-controller]: IDLE->FRAG_LOADING
transmuxer-interface.ts:68 [log] > demuxing in webworker
transmuxer-interface.ts:200 [log] > [transmuxer-interface, main]: Starting new transmux session for sn: 116 p: 0 level: 0 id: 1
        discontinuity: true
        trackSwitch: true
        contiguous: false
        accurateTimeOffset: false
        timeOffset: 16
        initSegmentChange: true
blob:https://hls-js.netlify.app/5c15b2fa-c897-4475-b074-6d6f2698ad46:540 [log] > Debug logs enabled for "main"
base-stream-controller.ts:1396 [log] > [stream-controller]: FRAG_LOADING->PARSING
stream-controller.ts:1251 [log] > [stream-controller]: Init audiovideo buffer, container:video/mp4, codecs[level/parsed]=[/mp4a.40.5,avc1.42e01e]
buffer-controller.ts:717 [log] > [buffer-controller]: creating sourceBuffer(video/mp4;codecs=mp4a.40.5,avc1.42e01e)
audio-stream-controller.ts:113 [log] > [audio-stream-controller]: InitPTS for cc: 0 found from main: 215.866
level-controller.ts:537 [log] > [level-controller]: Attempt loading level index 0 at sn undefined part undefined with URL-id 0 https://adventures-twenty-dinner-sacrifice.trycloudflare.com/edcf6c00-7be2-4258-a120-d36b1b498bde/source/playlist.m3u8
base-playlist-controller.ts:120 [log] > [level-controller]: live playlist 0 REFRESHED 117-4
level-controller.ts:537 [log] > [level-controller]: Attempt loading level index 0 at sn 117 part 5 with URL-id 0 https://adventures-twenty-dinner-sacrifice.trycloudflare.com/edcf6c00-7be2-4258-a120-d36b1b498bde/source/playlist.m3u8?_HLS_msn=117&_HLS_part=5
stream-controller.ts:608 [log] > [stream-controller]: Level 0 loaded [108,116], cc [0, 0] duration:19.25
base-stream-controller.ts:1134 [log] > [stream-controller]: Live playlist sliding: 0.00 start-sn: 108->108 prev-sn: na fragments: 9
buffer-controller.ts:648 [log] > [buffer-controller]: Updating Media Source duration to 19.250
base-playlist-controller.ts:120 [log] > [level-controller]: live playlist 0 REFRESHED 117-5
level-controller.ts:537 [log] > [level-controller]: Attempt loading level index 0 at sn 117 part 6 with URL-id 0 https://adventures-twenty-dinner-sacrifice.trycloudflare.com/edcf6c00-7be2-4258-a120-d36b1b498bde/source/playlist.m3u8?_HLS_msn=117&_HLS_part=6
stream-controller.ts:608 [log] > [stream-controller]: Level 0 loaded [108,116], cc [0, 0] duration:19.5
base-stream-controller.ts:1134 [log] > [stream-controller]: Live playlist sliding: 0.00 start-sn: 108->108 prev-sn: na fragments: 9
buffer-controller.ts:648 [log] > [buffer-controller]: Updating Media Source duration to 19.500
transmuxer-interface.ts:306 [log] > [transmuxer.ts]: Flushed fragment 116 p: 7 of level 0
base-stream-controller.ts:1396 [log] > [stream-controller]: PARSING->PARSED
base-stream-controller.ts:506 [log] > [stream-controller]: Buffered main sn: 116 part: 7 of level 0 [16.033,18.001]
base-stream-controller.ts:1396 [log] > [stream-controller]: PARSED->IDLE
stream-controller.ts:995 [log] > [stream-controller]: seek to target start position 16.506699951171875 from current time 0
base-stream-controller.ts:578 [log] > [stream-controller]: Loading part sn: 117 p: 0 cc: 0 of playlist [108-116] parts [0-56-61] level: 0, target: 18.001
base-stream-controller.ts:1396 [log] > [stream-controller]: IDLE->FRAG_LOADING
base-stream-controller.ts:220 [log] > [stream-controller]: media seeking to 16.507, state: FRAG_LOADING
base-stream-controller.ts:220 [log] > [audio-stream-controller]: media seeking to 16.507, state: STOPPED
base-stream-controller.ts:220 [log] > [subtitle-stream-controller]: media seeking to 16.507, state: IDLE
base-stream-controller.ts:1396 [log] > [stream-controller]: FRAG_LOADING->PARSING
base-playlist-controller.ts:120 [log] > [level-controller]: live playlist 0 REFRESHED 117-6
level-controller.ts:537 [log] > [level-controller]: Attempt loading level index 0 at sn 117 part 7 with URL-id 0 https://adventures-twenty-dinner-sacrifice.trycloudflare.com/edcf6c00-7be2-4258-a120-d36b1b498bde/source/playlist.m3u8?_HLS_msn=117&_HLS_part=7
stream-controller.ts:608 [log] > [stream-controller]: Level 0 loaded [108,116], cc [0, 0] duration:19.75
base-stream-controller.ts:1134 [log] > [stream-controller]: Live playlist sliding: 0.00 start-sn: 108->108 prev-sn: 116 fragments: 9
buffer-controller.ts:648 [log] > [buffer-controller]: Updating Media Source duration to 19.750
stream-controller.ts:534 [log] > [stream-controller]: Media seeked to 16.507
base-playlist-controller.ts:120 [log] > [level-controller]: live playlist 0 REFRESHED 117-7
level-controller.ts:537 [log] > [level-controller]: Attempt loading level index 0 at sn 117 part 8 with URL-id 0 https://adventures-twenty-dinner-sacrifice.trycloudflare.com/edcf6c00-7be2-4258-a120-d36b1b498bde/source/playlist.m3u8?_HLS_msn=117&_HLS_part=8
stream-controller.ts:608 [log] > [stream-controller]: Level 0 loaded [108,116], cc [0, 0] duration:20
base-stream-controller.ts:1134 [log] > [stream-controller]: Live playlist sliding: 0.00 start-sn: 108->108 prev-sn: 116 fragments: 9
buffer-controller.ts:648 [log] > [buffer-controller]: Updating Media Source duration to 20.000
transmuxer-interface.ts:306 [log] > [transmuxer.ts]: Flushed fragment 117 p: 5 of level 0
base-stream-controller.ts:1396 [log] > [stream-controller]: PARSING->PARSED
base-stream-controller.ts:506 [log] > [stream-controller]: Buffered main sn: 117 part: 5 of level 0 [16.033,19.516]
base-stream-controller.ts:1396 [log] > [stream-controller]: PARSED->IDLE
base-stream-controller.ts:578 [log] > [stream-controller]: Loading part sn: 117 p: 6 cc: 0 of playlist [108-116] parts [0-62-63] level: 0, target: 19.516
base-stream-controller.ts:1396 [log] > [stream-controller]: IDLE->FRAG_LOADING
base-stream-controller.ts:1396 [log] > [stream-controller]: FRAG_LOADING->PARSING
base-playlist-controller.ts:120 [log] > [level-controller]: live playlist 0 REFRESHED 118-0
level-controller.ts:537 [log] > [level-controller]: Attempt loading level index 0 at sn 118 part 1 with URL-id 0 https://adventures-twenty-dinner-sacrifice.trycloudflare.com/edcf6c00-7be2-4258-a120-d36b1b498bde/source/playlist.m3u8?_HLS_msn=118&_HLS_part=1
stream-controller.ts:608 [log] > [stream-controller]: Level 0 loaded [109,117], cc [0, 0] duration:18.25
buffer-controller.ts:648 [log] > [buffer-controller]: Updating Media Source duration to 20.250
transmuxer-interface.ts:306 [log] > [transmuxer.ts]: Flushed fragment 117 p: 7 of level 0
base-stream-controller.ts:1396 [log] > [stream-controller]: PARSING->PARSED
base-stream-controller.ts:506 [log] > [stream-controller]: Buffered main sn: 117 part: 7 of level 0 [16.033,20.007]
base-stream-controller.ts:1396 [log] > [stream-controller]: PARSED->IDLE
base-stream-controller.ts:578 [log] > [stream-controller]: Loading part sn: 118 p: 0 cc: 0 of playlist [109-117] parts [0-56-56] level: 0, target: 20.007
base-stream-controller.ts:1396 [log] > [stream-controller]: IDLE->FRAG_LOADING
base-stream-controller.ts:1396 [log] > [stream-controller]: FRAG_LOADING->PARSING
transmuxer-interface.ts:306 [log] > [transmuxer.ts]: Flushed fragment 118 p: 0 of level 0
base-stream-controller.ts:1396 [log] > [stream-controller]: PARSING->PARSED
base-stream-controller.ts:506 [log] > [stream-controller]: Buffered main sn: 118 part: 0 of level 0 [16.033,20.263]
base-stream-controller.ts:1396 [log] > [stream-controller]: PARSED->IDLE
base-playlist-controller.ts:120 [log] > [level-controller]: live playlist 0 REFRESHED 118-1
level-controller.ts:537 [log] > [level-controller]: Attempt loading level index 0 at sn 118 part 2 with URL-id 0 https://adventures-twenty-dinner-sacrifice.trycloudflare.com/edcf6c00-7be2-4258-a120-d36b1b498bde/source/playlist.m3u8?_HLS_msn=118&_HLS_part=2
stream-controller.ts:608 [log] > [stream-controller]: Level 0 loaded [109,117], cc [0, 0] duration:18.5
base-stream-controller.ts:578 [log] > [stream-controller]: Loading part sn: 118 p: 1 cc: 0 of playlist [109-117] parts [0-57-57] level: 0, target: 20.263
base-stream-controller.ts:1396 [log] > [stream-controller]: IDLE->FRAG_LOADING
buffer-controller.ts:648 [log] > [buffer-controller]: Updating Media Source duration to 20.500
base-stream-controller.ts:1396 [log] > [stream-controller]: FRAG_LOADING->PARSING
transmuxer-interface.ts:306 [log] > [transmuxer.ts]: Flushed fragment 118 p: 1 of level 0
base-stream-controller.ts:1396 [log] > [stream-controller]: PARSING->PARSED
base-stream-controller.ts:506 [log] > [stream-controller]: Buffered main sn: 118 part: 1 of level 0 [16.033,20.519]
base-stream-controller.ts:1396 [log] > [stream-controller]: PARSED->IDLE
base-playlist-controller.ts:120 [log] > [level-controller]: live playlist 0 REFRESHED 118-2
level-controller.ts:537 [log] > [level-controller]: Attempt loading level index 0 at sn 118 part 3 with URL-id 0 https://adventures-twenty-dinner-sacrifice.trycloudflare.com/edcf6c00-7be2-4258-a120-d36b1b498bde/source/playlist.m3u8?_HLS_msn=118&_HLS_part=3
stream-controller.ts:608 [log] > [stream-controller]: Level 0 loaded [109,117], cc [0, 0] duration:18.75
base-stream-controller.ts:578 [log] > [stream-controller]: Loading part sn: 118 p: 2 cc: 0 of playlist [109-117] parts [0-58-58] level: 0, target: 20.519
base-stream-controller.ts:1396 [log] > [stream-controller]: IDLE->FRAG_LOADING
buffer-controller.ts:648 [log] > [buffer-controller]: Updating Media Source duration to 20.750
base-stream-controller.ts:1396 [log] > [stream-controller]: FRAG_LOADING->PARSING
transmuxer-interface.ts:306 [log] > [transmuxer.ts]: Flushed fragment 118 p: 2 of level 0
base-stream-controller.ts:1396 [log] > [stream-controller]: PARSING->PARSED
base-stream-controller.ts:506 [log] > [stream-controller]: Buffered main sn: 118 part: 2 of level 0 [16.033,20.753]
base-stream-controller.ts:1396 [log] > [stream-controller]: PARSED->IDLE
base-playlist-controller.ts:120 [log] > [level-controller]: live playlist 0 REFRESHED 118-3
level-controller.ts:537 [log] > [level-controller]: Attempt loading level index 0 at sn 118 part 4 with URL-id 0 https://adventures-twenty-dinner-sacrifice.trycloudflare.com/edcf6c00-7be2-4258-a120-d36b1b498bde/source/playlist.m3u8?_HLS_msn=118&_HLS_part=4
stream-controller.ts:608 [log] > [stream-controller]: Level 0 loaded [109,117], cc [0, 0] duration:19
base-stream-controller.ts:578 [log] > [stream-controller]: Loading part sn: 118 p: 3 cc: 0 of playlist [109-117] parts [0-59-59] level: 0, target: 20.753
base-stream-controller.ts:1396 [log] > [stream-controller]: IDLE->FRAG_LOADING
buffer-controller.ts:648 [log] > [buffer-controller]: Updating Media Source duration to 21.000
base-stream-controller.ts:1396 [log] > [stream-controller]: FRAG_LOADING->PARSING
transmuxer-interface.ts:306 [log] > [transmuxer.ts]: Flushed fragment 118 p: 3 of level 0
base-stream-controller.ts:1396 [log] > [stream-controller]: PARSING->PARSED
base-stream-controller.ts:506 [log] > [stream-controller]: Buffered main sn: 118 part: 3 of level 0 [16.033,21.009]
base-stream-controller.ts:1396 [log] > [stream-controller]: PARSED->IDLE
base-playlist-controller.ts:120 [log] > [level-controller]: live playlist 0 REFRESHED 118-4
level-controller.ts:537 [log] > [level-controller]: Attempt loading level index 0 at sn 118 part 5 with URL-id 0 https://adventures-twenty-dinner-sacrifice.trycloudflare.com/edcf6c00-7be2-4258-a120-d36b1b498bde/source/playlist.m3u8?_HLS_msn=118&_HLS_part=5
stream-controller.ts:608 [log] > [stream-controller]: Level 0 loaded [109,117], cc [0, 0] duration:19.25
base-stream-controller.ts:578 [log] > [stream-controller]: Loading part sn: 118 p: 4 cc: 0 of playlist [109-117] parts [0-60-60] level: 0, target: 21.009
base-stream-controller.ts:1396 [log] > [stream-controller]: IDLE->FRAG_LOADING
buffer-controller.ts:648 [log] > [buffer-controller]: Updating Media Source duration to 21.250
base-stream-controller.ts:1396 [log] > [stream-controller]: FRAG_LOADING->PARSING
transmuxer-interface.ts:306 [log] > [transmuxer.ts]: Flushed fragment 118 p: 4 of level 0
base-stream-controller.ts:1396 [log] > [stream-controller]: PARSING->PARSED
base-stream-controller.ts:506 [log] > [stream-controller]: Buffered main sn: 118 part: 4 of level 0 [16.033,21.265]
base-stream-controller.ts:1396 [log] > [stream-controller]: PARSED->IDLE
base-playlist-controller.ts:120 [log] > [level-controller]: live playlist 0 REFRESHED 118-5
level-controller.ts:537 [log] > [level-controller]: Attempt loading level index 0 at sn 118 part 6 with URL-id 0 https://adventures-twenty-dinner-sacrifice.trycloudflare.com/edcf6c00-7be2-4258-a120-d36b1b498bde/source/playlist.m3u8?_HLS_msn=118&_HLS_part=6
stream-controller.ts:608 [log] > [stream-controller]: Level 0 loaded [109,117], cc [0, 0] duration:19.5
base-stream-controller.ts:578 [log] > [stream-controller]: Loading part sn: 118 p: 5 cc: 0 of playlist [109-117] parts [0-61-61] level: 0, target: 21.265
base-stream-controller.ts:1396 [log] > [stream-controller]: IDLE->FRAG_LOADING
buffer-controller.ts:648 [log] > [buffer-controller]: Updating Media Source duration to 21.500
base-stream-controller.ts:1396 [log] > [stream-controller]: FRAG_LOADING->PARSING
transmuxer-interface.ts:306 [log] > [transmuxer.ts]: Flushed fragment 118 p: 5 of level 0
base-stream-controller.ts:1396 [log] > [stream-controller]: PARSING->PARSED
base-stream-controller.ts:506 [log] > [stream-controller]: Buffered main sn: 118 part: 5 of level 0 [16.033,21.500]
base-stream-controller.ts:1396 [log] > [stream-controller]: PARSED->IDLE
base-playlist-controller.ts:120 [log] > [level-controller]: live playlist 0 REFRESHED 118-6
level-controller.ts:537 [log] > [level-controller]: Attempt loading level index 0 at sn 118 part 7 with URL-id 0 https://adventures-twenty-dinner-sacrifice.trycloudflare.com/edcf6c00-7be2-4258-a120-d36b1b498bde/source/playlist.m3u8?_HLS_msn=118&_HLS_part=7
stream-controller.ts:608 [log] > [stream-controller]: Level 0 loaded [109,117], cc [0, 0] duration:19.75
base-stream-controller.ts:578 [log] > [stream-controller]: Loading part sn: 118 p: 6 cc: 0 of playlist [109-117] parts [0-62-62] level: 0, target: 21.5
base-stream-controller.ts:1396 [log] > [stream-controller]: IDLE->FRAG_LOADING
buffer-controller.ts:648 [log] > [buffer-controller]: Updating Media Source duration to 21.750
base-stream-controller.ts:1396 [log] > [stream-controller]: FRAG_LOADING->PARSING
transmuxer-interface.ts:306 [log] > [transmuxer.ts]: Flushed fragment 118 p: 6 of level 0
base-stream-controller.ts:1396 [log] > [stream-controller]: PARSING->PARSED
base-stream-controller.ts:506 [log] > [stream-controller]: Buffered main sn: 118 part: 6 of level 0 [16.033,21.756]
base-stream-controller.ts:1396 [log] > [stream-controller]: PARSED->IDLE
base-playlist-controller.ts:120 [log] > [level-controller]: live playlist 0 REFRESHED 119-0
level-controller.ts:537 [log] > [level-controller]: Attempt loading level index 0 at sn 119 part 1 with URL-id 0 https://adventures-twenty-dinner-sacrifice.trycloudflare.com/edcf6c00-7be2-4258-a120-d36b1b498bde/source/playlist.m3u8?_HLS_msn=119&_HLS_part=1
stream-controller.ts:608 [log] > [stream-controller]: Level 0 loaded [110,118], cc [0, 0] duration:18.25
base-stream-controller.ts:578 [log] > [stream-controller]: Loading part sn: 119 p: 0 cc: 0 of playlist [110-118] parts [0-56-56] level: 0, target: 22
base-stream-controller.ts:1396 [log] > [stream-controller]: IDLE->FRAG_LOADING
buffer-controller.ts:648 [log] > [buffer-controller]: Updating Media Source duration to 22.250
base-stream-controller.ts:1396 [log] > [stream-controller]: FRAG_LOADING->PARSING
transmuxer-interface.ts:306 [log] > [transmuxer.ts]: Flushed fragment 119 p: 0 of level 0
base-stream-controller.ts:1396 [log] > [stream-controller]: PARSING->PARSED
base-stream-controller.ts:506 [log] > [stream-controller]: Buffered main sn: 119 part: 0 of level 0 [16.033,21.756][22.033,22.268]
base-stream-controller.ts:1396 [log] > [stream-controller]: PARSED->IDLE
base-playlist-controller.ts:120 [log] > [level-controller]: live playlist 0 REFRESHED 119-1
level-controller.ts:537 [log] > [level-controller]: Attempt loading level index 0 at sn 119 part 2 with URL-id 0 https://adventures-twenty-dinner-sacrifice.trycloudflare.com/edcf6c00-7be2-4258-a120-d36b1b498bde/source/playlist.m3u8?_HLS_msn=119&_HLS_part=2
stream-controller.ts:608 [log] > [stream-controller]: Level 0 loaded [110,118], cc [0, 0] duration:18.5
base-stream-controller.ts:578 [log] > [stream-controller]: Loading part sn: 119 p: 1 cc: 0 of playlist [110-118] parts [0-57-57] level: 0, target: 22
base-stream-controller.ts:1396 [log] > [stream-controller]: IDLE->FRAG_LOADING
buffer-controller.ts:648 [log] > [buffer-controller]: Updating Media Source duration to 22.500
base-stream-controller.ts:1396 [log] > [stream-controller]: FRAG_LOADING->PARSING
transmuxer-interface.ts:306 [log] > [transmuxer.ts]: Flushed fragment 119 p: 1 of level 0
base-stream-controller.ts:1396 [log] > [stream-controller]: PARSING->PARSED
base-stream-controller.ts:506 [log] > [stream-controller]: Buffered main sn: 119 part: 1 of level 0 [16.033,21.756][22.033,22.503]
base-stream-controller.ts:1396 [log] > [stream-controller]: PARSED->IDLE
base-playlist-controller.ts:120 [log] > [level-controller]: live playlist 0 REFRESHED 119-2
level-controller.ts:537 [log] > [level-controller]: Attempt loading level index 0 at sn 119 part 3 with URL-id 0 https://adventures-twenty-dinner-sacrifice.trycloudflare.com/edcf6c00-7be2-4258-a120-d36b1b498bde/source/playlist.m3u8?_HLS_msn=119&_HLS_part=3
stream-controller.ts:608 [log] > [stream-controller]: Level 0 loaded [110,118], cc [0, 0] duration:18.75
base-stream-controller.ts:578 [log] > [stream-controller]: Loading part sn: 119 p: 2 cc: 0 of playlist [110-118] parts [0-58-58] level: 0, target: 22
base-stream-controller.ts:1396 [log] > [stream-controller]: IDLE->FRAG_LOADING
buffer-controller.ts:648 [log] > [buffer-controller]: Updating Media Source duration to 22.750
base-stream-controller.ts:1396 [log] > [stream-controller]: FRAG_LOADING->PARSING
transmuxer-interface.ts:306 [log] > [transmuxer.ts]: Flushed fragment 119 p: 2 of level 0
base-stream-controller.ts:1396 [log] > [stream-controller]: PARSING->PARSED
base-stream-controller.ts:506 [log] > [stream-controller]: Buffered main sn: 119 part: 2 of level 0 [16.033,21.756][22.033,22.759]
base-stream-controller.ts:1396 [log] > [stream-controller]: PARSED->IDLE
base-playlist-controller.ts:120 [log] > [level-controller]: live playlist 0 REFRESHED 119-3
level-controller.ts:537 [log] > [level-controller]: Attempt loading level index 0 at sn 119 part 4 with URL-id 0 https://adventures-twenty-dinner-sacrifice.trycloudflare.com/edcf6c00-7be2-4258-a120-d36b1b498bde/source/playlist.m3u8?_HLS_msn=119&_HLS_part=4
stream-controller.ts:608 [log] > [stream-controller]: Level 0 loaded [110,118], cc [0, 0] duration:19
base-stream-controller.ts:578 [log] > [stream-controller]: Loading part sn: 119 p: 3 cc: 0 of playlist [110-118] parts [0-59-59] level: 0, target: 22
base-stream-controller.ts:1396 [log] > [stream-controller]: IDLE->FRAG_LOADING
buffer-controller.ts:648 [log] > [buffer-controller]: Updating Media Source duration to 23.000
base-stream-controller.ts:1396 [log] > [stream-controller]: FRAG_LOADING->PARSING
transmuxer-interface.ts:306 [log] > [transmuxer.ts]: Flushed fragment 119 p: 3 of level 0
base-stream-controller.ts:1396 [log] > [stream-controller]: PARSING->PARSED
base-stream-controller.ts:506 [log] > [stream-controller]: Buffered main sn: 119 part: 3 of level 0 [16.033,21.756][22.033,23.015]
base-stream-controller.ts:1396 [log] > [stream-controller]: PARSED->IDLE
base-playlist-controller.ts:120 [log] > [level-controller]: live playlist 0 REFRESHED 119-4
level-controller.ts:537 [log] > [level-controller]: Attempt loading level index 0 at sn 119 part 5 with URL-id 0 https://adventures-twenty-dinner-sacrifice.trycloudflare.com/edcf6c00-7be2-4258-a120-d36b1b498bde/source/playlist.m3u8?_HLS_msn=119&_HLS_part=5
stream-controller.ts:608 [log] > [stream-controller]: Level 0 loaded [110,118], cc [0, 0] duration:19.25
base-stream-controller.ts:578 [log] > [stream-controller]: Loading part sn: 119 p: 4 cc: 0 of playlist [110-118] parts [0-60-60] level: 0, target: 22
base-stream-controller.ts:1396 [log] > [stream-controller]: IDLE->FRAG_LOADING
buffer-controller.ts:648 [log] > [buffer-controller]: Updating Media Source duration to 23.250
base-stream-controller.ts:1396 [log] > [stream-controller]: FRAG_LOADING->PARSING
transmuxer-interface.ts:306 [log] > [transmuxer.ts]: Flushed fragment 119 p: 4 of level 0
base-stream-controller.ts:1396 [log] > [stream-controller]: PARSING->PARSED
base-stream-controller.ts:506 [log] > [stream-controller]: Buffered main sn: 119 part: 4 of level 0 [16.033,21.756][22.033,23.271]
base-stream-controller.ts:1396 [log] > [stream-controller]: PARSED->IDLE
base-playlist-controller.ts:120 [log] > [level-controller]: live playlist 0 REFRESHED 119-5
level-controller.ts:537 [log] > [level-controller]: Attempt loading level index 0 at sn 119 part 6 with URL-id 0 https://adventures-twenty-dinner-sacrifice.trycloudflare.com/edcf6c00-7be2-4258-a120-d36b1b498bde/source/playlist.m3u8?_HLS_msn=119&_HLS_part=6
stream-controller.ts:608 [log] > [stream-controller]: Level 0 loaded [110,118], cc [0, 0] duration:19.5
base-stream-controller.ts:578 [log] > [stream-controller]: Loading part sn: 119 p: 5 cc: 0 of playlist [110-118] parts [0-61-61] level: 0, target: 22
base-stream-controller.ts:1396 [log] > [stream-controller]: IDLE->FRAG_LOADING
buffer-controller.ts:648 [log] > [buffer-controller]: Updating Media Source duration to 23.500
base-stream-controller.ts:1396 [log] > [stream-controller]: FRAG_LOADING->PARSING
transmuxer-interface.ts:306 [log] > [transmuxer.ts]: Flushed fragment 119 p: 5 of level 0
base-stream-controller.ts:1396 [log] > [stream-controller]: PARSING->PARSED
base-stream-controller.ts:506 [log] > [stream-controller]: Buffered main sn: 119 part: 5 of level 0 [16.033,21.756][22.033,23.505]
base-stream-controller.ts:1396 [log] > [stream-controller]: PARSED->IDLE
base-playlist-controller.ts:120 [log] > [level-controller]: live playlist 0 REFRESHED 119-6
level-controller.ts:537 [log] > [level-controller]: Attempt loading level index 0 at sn 119 part 7 with URL-id 0 https://adventures-twenty-dinner-sacrifice.trycloudflare.com/edcf6c00-7be2-4258-a120-d36b1b498bde/source/playlist.m3u8?_HLS_msn=119&_HLS_part=7
stream-controller.ts:608 [log] > [stream-controller]: Level 0 loaded [110,118], cc [0, 0] duration:19.75
base-stream-controller.ts:578 [log] > [stream-controller]: Loading part sn: 119 p: 6 cc: 0 of playlist [110-118] parts [0-62-62] level: 0, target: 22
base-stream-controller.ts:1396 [log] > [stream-controller]: IDLE->FRAG_LOADING
buffer-controller.ts:648 [log] > [buffer-controller]: Updating Media Source duration to 23.750
base-stream-controller.ts:1396 [log] > [stream-controller]: FRAG_LOADING->PARSING
transmuxer-interface.ts:306 [log] > [transmuxer.ts]: Flushed fragment 119 p: 6 of level 0
base-stream-controller.ts:1396 [log] > [stream-controller]: PARSING->PARSED
base-stream-controller.ts:506 [log] > [stream-controller]: Buffered main sn: 119 part: 6 of level 0 [16.033,21.756][22.033,23.761]
base-stream-controller.ts:1396 [log] > [stream-controller]: PARSED->IDLE
base-playlist-controller.ts:120 [log] > [level-controller]: live playlist 0 REFRESHED 119-7
level-controller.ts:537 [log] > [level-controller]: Attempt loading level index 0 at sn 119 part 8 with URL-id 0 https://adventures-twenty-dinner-sacrifice.trycloudflare.com/edcf6c00-7be2-4258-a120-d36b1b498bde/source/playlist.m3u8?_HLS_msn=119&_HLS_part=8
stream-controller.ts:608 [log] > [stream-controller]: Level 0 loaded [110,118], cc [0, 0] duration:20
base-stream-controller.ts:578 [log] > [stream-controller]: Loading part sn: 119 p: 7 cc: 0 of playlist [110-118] parts [0-63-63] level: 0, target: 22
base-stream-controller.ts:1396 [log] > [stream-controller]: IDLE->FRAG_LOADING
buffer-controller.ts:648 [log] > [buffer-controller]: Updating Media Source duration to 24.000
base-stream-controller.ts:1396 [log] > [stream-controller]: FRAG_LOADING->PARSING
transmuxer-interface.ts:306 [log] > [transmuxer.ts]: Flushed fragment 119 p: 7 of level 0
base-stream-controller.ts:1396 [log] > [stream-controller]: PARSING->PARSED
base-stream-controller.ts:506 [log] > [stream-controller]: Buffered main sn: 119 part: 7 of level 0 [16.033,21.756][22.033,24.017]
base-stream-controller.ts:1396 [log] > [stream-controller]: PARSED->IDLE
base-playlist-controller.ts:120 [log] > [level-controller]: live playlist 0 REFRESHED 120-0
level-controller.ts:537 [log] > [level-controller]: Attempt loading level index 0 at sn 120 part 1 with URL-id 0 https://adventures-twenty-dinner-sacrifice.trycloudflare.com/edcf6c00-7be2-4258-a120-d36b1b498bde/source/playlist.m3u8?_HLS_msn=120&_HLS_part=1
stream-controller.ts:608 [log] > [stream-controller]: Level 0 loaded [111,119], cc [0, 0] duration:18.25
base-stream-controller.ts:612 [log] > [stream-controller]: Loading fragment 119 cc: 0 of [111-119] level: 0, target: 22
base-stream-controller.ts:1396 [log] > [stream-controller]: IDLE->FRAG_LOADING
buffer-controller.ts:648 [log] > [buffer-controller]: Updating Media Source duration to 24.250
base-playlist-controller.ts:120 [log] > [level-controller]: live playlist 0 REFRESHED 120-1
level-controller.ts:537 [log] > [level-controller]: Attempt loading level index 0 at sn 120 part 2 with URL-id 0 https://adventures-twenty-dinner-sacrifice.trycloudflare.com/edcf6c00-7be2-4258-a120-d36b1b498bde/source/playlist.m3u8?_HLS_msn=120&_HLS_part=2
stream-controller.ts:608 [log] > [stream-controller]: Level 0 loaded [111,119], cc [0, 0] duration:18.5
buffer-controller.ts:648 [log] > [buffer-controller]: Updating Media Source duration to 24.500
transmuxer-interface.ts:200 [log] > [transmuxer-interface, main]: Starting new transmux session for sn: 119 p: -1 level: 0 id: 1
        discontinuity: false
        trackSwitch: false
        contiguous: false
        accurateTimeOffset: false
        timeOffset: 22
        initSegmentChange: false
base-stream-controller.ts:373 [log] > [stream-controller]: Loaded fragment 119 of level 0
base-stream-controller.ts:1396 [log] > [stream-controller]: FRAG_LOADING->PARSING
transmuxer-interface.ts:306 [log] > [transmuxer.ts]: Flushed fragment 119 of level 0
base-stream-controller.ts:1396 [log] > [stream-controller]: PARSING->PARSED
base-stream-controller.ts:506 [log] > [stream-controller]: Buffered main sn: 119 of level 0 [16.033,21.756][22.033,24.017]
base-stream-controller.ts:1396 [log] > [stream-controller]: PARSED->IDLE
base-stream-controller.ts:578 [log] > [stream-controller]: Loading part sn: 120 p: 0 cc: 0 of playlist [111-119] parts [0-56-57] level: 0, target: 24
base-stream-controller.ts:1396 [log] > [stream-controller]: IDLE->FRAG_LOADING
base-stream-controller.ts:1396 [log] > [stream-controller]: FRAG_LOADING->PARSING
transmuxer-interface.ts:306 [log] > [transmuxer.ts]: Flushed fragment 120 p: 1 of level 0
base-stream-controller.ts:1396 [log] > [stream-controller]: PARSING->PARSED
base-stream-controller.ts:506 [log] > [stream-controller]: Buffered main sn: 120 part: 1 of level 0 [16.033,21.756][22.033,24.508]
base-stream-controller.ts:1396 [log] > [stream-controller]: PARSED->IDLE
base-playlist-controller.ts:120 [log] > [level-controller]: live playlist 0 REFRESHED 120-2
level-controller.ts:537 [log] > [level-controller]: Attempt loading level index 0 at sn 120 part 3 with URL-id 0 https://adventures-twenty-dinner-sacrifice.trycloudflare.com/edcf6c00-7be2-4258-a120-d36b1b498bde/source/playlist.m3u8?_HLS_msn=120&_HLS_part=3
stream-controller.ts:608 [log] > [stream-controller]: Level 0 loaded [111,119], cc [0, 0] duration:18.75
base-stream-controller.ts:578 [log] > [stream-controller]: Loading part sn: 120 p: 2 cc: 0 of playlist [111-119] parts [0-58-58] level: 0, target: 24
base-stream-controller.ts:1396 [log] > [stream-controller]: IDLE->FRAG_LOADING
buffer-controller.ts:648 [log] > [buffer-controller]: Updating Media Source duration to 24.750
base-stream-controller.ts:1396 [log] > [stream-controller]: FRAG_LOADING->PARSING
transmuxer-interface.ts:306 [log] > [transmuxer.ts]: Flushed fragment 120 p: 2 of level 0
base-stream-controller.ts:1396 [log] > [stream-controller]: PARSING->PARSED
base-stream-controller.ts:506 [log] > [stream-controller]: Buffered main sn: 120 part: 2 of level 0 [16.033,21.756][22.033,24.764]
base-stream-controller.ts:1396 [log] > [stream-controller]: PARSED->IDLE
base-playlist-controller.ts:120 [log] > [level-controller]: live playlist 0 REFRESHED 120-3
level-controller.ts:537 [log] > [level-controller]: Attempt loading level index 0 at sn 120 part 4 with URL-id 0 https://adventures-twenty-dinner-sacrifice.trycloudflare.com/edcf6c00-7be2-4258-a120-d36b1b498bde/source/playlist.m3u8?_HLS_msn=120&_HLS_part=4
stream-controller.ts:608 [log] > [stream-controller]: Level 0 loaded [111,119], cc [0, 0] duration:19
buffer-controller.ts:648 [log] > [buffer-controller]: Updating Media Source duration to 25.000
base-playlist-controller.ts:120 [log] > [level-controller]: live playlist 0 REFRESHED 120-4
level-controller.ts:537 [log] > [level-controller]: Attempt loading level index 0 at sn 120 part 5 with URL-id 0 https://adventures-twenty-dinner-sacrifice.trycloudflare.com/edcf6c00-7be2-4258-a120-d36b1b498bde/source/playlist.m3u8?_HLS_msn=120&_HLS_part=5
stream-controller.ts:608 [log] > [stream-controller]: Level 0 loaded [111,119], cc [0, 0] duration:19.25
base-stream-controller.ts:578 [log] > [stream-controller]: Loading part sn: 120 p: 3 cc: 0 of playlist [111-119] parts [0-59-60] level: 0, target: 24
base-stream-controller.ts:1396 [log] > [stream-controller]: IDLE->FRAG_LOADING
buffer-controller.ts:648 [log] > [buffer-controller]: Updating Media Source duration to 25.250
base-stream-controller.ts:1396 [log] > [stream-controller]: FRAG_LOADING->PARSING
transmuxer-interface.ts:306 [log] > [transmuxer.ts]: Flushed fragment 120 p: 4 of level 0
base-stream-controller.ts:1396 [log] > [stream-controller]: PARSING->PARSED
base-stream-controller.ts:506 [log] > [stream-controller]: Buffered main sn: 120 part: 4 of level 0 [16.033,21.756][22.033,25.255]
base-stream-controller.ts:1396 [log] > [stream-controller]: PARSED->IDLE
base-playlist-controller.ts:120 [log] > [level-controller]: live playlist 0 REFRESHED 120-5
level-controller.ts:537 [log] > [level-controller]: Attempt loading level index 0 at sn 120 part 6 with URL-id 0 https://adventures-twenty-dinner-sacrifice.trycloudflare.com/edcf6c00-7be2-4258-a120-d36b1b498bde/source/playlist.m3u8?_HLS_msn=120&_HLS_part=6
stream-controller.ts:608 [log] > [stream-controller]: Level 0 loaded [111,119], cc [0, 0] duration:19.5
base-stream-controller.ts:578 [log] > [stream-controller]: Loading part sn: 120 p: 5 cc: 0 of playlist [111-119] parts [0-61-61] level: 0, target: 24
base-stream-controller.ts:1396 [log] > [stream-controller]: IDLE->FRAG_LOADING
buffer-controller.ts:648 [log] > [buffer-controller]: Updating Media Source duration to 25.500
base-stream-controller.ts:1396 [log] > [stream-controller]: FRAG_LOADING->PARSING
transmuxer-interface.ts:306 [log] > [transmuxer.ts]: Flushed fragment 120 p: 5 of level 0
base-stream-controller.ts:1396 [log] > [stream-controller]: PARSING->PARSED
base-stream-controller.ts:506 [log] > [stream-controller]: Buffered main sn: 120 part: 5 of level 0 [16.033,21.756][22.033,25.511]
base-stream-controller.ts:1396 [log] > [stream-controller]: PARSED->IDLE
base-playlist-controller.ts:120 [log] > [level-controller]: live playlist 0 REFRESHED 120-6
level-controller.ts:537 [log] > [level-controller]: Attempt loading level index 0 at sn 120 part 7 with URL-id 0 https://adventures-twenty-dinner-sacrifice.trycloudflare.com/edcf6c00-7be2-4258-a120-d36b1b498bde/source/playlist.m3u8?_HLS_msn=120&_HLS_part=7
stream-controller.ts:608 [log] > [stream-controller]: Level 0 loaded [111,119], cc [0, 0] duration:19.75
buffer-controller.ts:648 [log] > [buffer-controller]: Updating Media Source duration to 25.750
base-playlist-controller.ts:120 [log] > [level-controller]: live playlist 0 REFRESHED 120-7
level-controller.ts:537 [log] > [level-controller]: Attempt loading level index 0 at sn 120 part 8 with URL-id 0 https://adventures-twenty-dinner-sacrifice.trycloudflare.com/edcf6c00-7be2-4258-a120-d36b1b498bde/source/playlist.m3u8?_HLS_msn=120&_HLS_part=8
stream-controller.ts:608 [log] > [stream-controller]: Level 0 loaded [111,119], cc [0, 0] duration:20
base-stream-controller.ts:578 [log] > [stream-controller]: Loading part sn: 120 p: 6 cc: 0 of playlist [111-119] parts [0-62-63] level: 0, target: 24
base-stream-controller.ts:1396 [log] > [stream-controller]: IDLE->FRAG_LOADING
buffer-controller.ts:648 [log] > [buffer-controller]: Updating Media Source duration to 26.000
base-stream-controller.ts:1396 [log] > [stream-controller]: FRAG_LOADING->PARSING
transmuxer-interface.ts:306 [log] > [transmuxer.ts]: Flushed fragment 120 p: 7 of level 0
base-stream-controller.ts:1396 [log] > [stream-controller]: PARSING->PARSED
base-stream-controller.ts:506 [log] > [stream-controller]: Buffered main sn: 120 part: 7 of level 0 [16.033,21.756][22.033,26.001]
base-stream-controller.ts:1396 [log] > [stream-controller]: PARSED->IDLE
base-playlist-controller.ts:120 [log] > [level-controller]: live playlist 0 REFRESHED 121-0
level-controller.ts:537 [log] > [level-controller]: Attempt loading level index 0 at sn 121 part 1 with URL-id 0 https://adventures-twenty-dinner-sacrifice.trycloudflare.com/edcf6c00-7be2-4258-a120-d36b1b498bde/source/playlist.m3u8?_HLS_msn=121&_HLS_part=1
stream-controller.ts:608 [log] > [stream-controller]: Level 0 loaded [112,120], cc [0, 0] duration:18.25
base-stream-controller.ts:578 [log] > [stream-controller]: Loading part sn: 121 p: 0 cc: 0 of playlist [112-120] parts [0-56-56] level: 0, target: 26
base-stream-controller.ts:1396 [log] > [stream-controller]: IDLE->FRAG_LOADING
buffer-controller.ts:648 [log] > [buffer-controller]: Updating Media Source duration to 26.250
base-stream-controller.ts:1396 [log] > [stream-controller]: FRAG_LOADING->PARSING
transmuxer-interface.ts:306 [log] > [transmuxer.ts]: Flushed fragment 121 p: 0 of level 0
base-stream-controller.ts:1396 [log] > [stream-controller]: PARSING->PARSED
base-stream-controller.ts:506 [log] > [stream-controller]: Buffered main sn: 121 part: 0 of level 0 [16.033,21.756][22.033,26.257]
base-stream-controller.ts:1396 [log] > [stream-controller]: PARSED->IDLE
base-playlist-controller.ts:120 [log] > [level-controller]: live playlist 0 REFRESHED 121-1
level-controller.ts:537 [log] > [level-controller]: Attempt loading level index 0 at sn 121 part 2 with URL-id 0 https://adventures-twenty-dinner-sacrifice.trycloudflare.com/edcf6c00-7be2-4258-a120-d36b1b498bde/source/playlist.m3u8?_HLS_msn=121&_HLS_part=2
stream-controller.ts:608 [log] > [stream-controller]: Level 0 loaded [112,120], cc [0, 0] duration:18.5
buffer-controller.ts:648 [log] > [buffer-controller]: Updating Media Source duration to 26.500
base-playlist-controller.ts:120 [log] > [level-controller]: live playlist 0 REFRESHED 121-2
level-controller.ts:537 [log] > [level-controller]: Attempt loading level index 0 at sn 121 part 3 with URL-id 0 https://adventures-twenty-dinner-sacrifice.trycloudflare.com/edcf6c00-7be2-4258-a120-d36b1b498bde/source/playlist.m3u8?_HLS_msn=121&_HLS_part=3
stream-controller.ts:608 [log] > [stream-controller]: Level 0 loaded [112,120], cc [0, 0] duration:18.75
base-stream-controller.ts:578 [log] > [stream-controller]: Loading part sn: 121 p: 1 cc: 0 of playlist [112-120] parts [0-57-58] level: 0, target: 26
base-stream-controller.ts:1396 [log] > [stream-controller]: IDLE->FRAG_LOADING
buffer-controller.ts:648 [log] > [buffer-controller]: Updating Media Source duration to 26.750
base-stream-controller.ts:1396 [log] > [stream-controller]: FRAG_LOADING->PARSING
transmuxer-interface.ts:306 [log] > [transmuxer.ts]: Flushed fragment 121 p: 2 of level 0
base-stream-controller.ts:1396 [log] > [stream-controller]: PARSING->PARSED
base-stream-controller.ts:506 [log] > [stream-controller]: Buffered main sn: 121 part: 2 of level 0 [16.033,21.756][22.033,26.769]
base-stream-controller.ts:1396 [log] > [stream-controller]: PARSED->IDLE
base-playlist-controller.ts:120 [log] > [level-controller]: live playlist 0 REFRESHED 121-3
level-controller.ts:537 [log] > [level-controller]: Attempt loading level index 0 at sn 121 part 4 with URL-id 0 https://adventures-twenty-dinner-sacrifice.trycloudflare.com/edcf6c00-7be2-4258-a120-d36b1b498bde/source/playlist.m3u8?_HLS_msn=121&_HLS_part=4
stream-controller.ts:608 [log] > [stream-controller]: Level 0 loaded [112,120], cc [0, 0] duration:19
base-stream-controller.ts:578 [log] > [stream-controller]: Loading part sn: 121 p: 3 cc: 0 of playlist [112-120] parts [0-59-59] level: 0, target: 26
base-stream-controller.ts:1396 [log] > [stream-controller]: IDLE->FRAG_LOADING
gap-controller.ts:219 [warn] > Playback stalling at @21.706749 due to low buffer ({"len":0.04941700000000182,"start":16.033,"end":21.756166,"nextStart":22.033})
latency-controller.ts:187 [warn] > [playback-rate-controller]: Stall detected, adjusting target latency
main.js:725 Error event: {type: 'mediaError', details: 'bufferStalledError', fatal: false, buffer: 0.04941700000000182}
hls.ts:375 [log] > stopLoad
base-stream-controller.ts:1396 [log] > [stream-controller]: FRAG_LOADING->STOPPED
base-stream-controller.ts:1396 [log] > [subtitle-stream-controller]: IDLE->STOPPED
buffer-controller.ts:648 [log] > [buffer-controller]: Updating Media Source duration to 27.000
timeline-chart.ts:754 Canvas2D: Multiple readback operations using getImageData are faster with the willReadFrequently attribute set to true. See: https://html.spec.whatwg.org/multipage/canvas.html#concept-canvas-will-read-frequently

Chrome media internals output

No response

@TroyKomodo TroyKomodo added Bug Needs Triage If there is a suspected stream issue, apply this label to triage if it is something we should fix. labels Nov 13, 2022
@TroyKomodo TroyKomodo changed the title LL-HLS skips fragments if the latest f LL-HLS skips fragments Nov 13, 2022
@TroyKomodo TroyKomodo changed the title LL-HLS skips fragments LL-HLS skips parts on segment break Nov 13, 2022
@TroyKomodo
Copy link
Contributor Author

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.

@TroyKomodo
Copy link
Contributor Author

TroyKomodo commented Nov 17, 2022

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.
Not really a bug then.
However it is strange behaviour, this logic should be reconsidered.

This was the part list upon triage

loaded sn part-idx duration pts
T 10 0 0.25 10.00
T 10 1 0.25 10.25
T 10 2 0.25 10.50
T 10 3 0.25 10.75
F 10 4 0.25 11.00
T 11 0 0.25 11.25
T 11 1 0.25 11.50
T 11 2 0.25 11.75

I then noticed that the value of targetBufferTime was set to 10.75 and never increased as the parts ahead of sn10 part-idx 4 were loaded.

A high level breakdown was that the getNextFragment function was returning the sn 11 when sn 10 still had parts to be loaded due to the fact that sn 11 was less then the maxFragLookUpTolerance away. This is likely due to the binary search algorithm returning the second half of the tree instead of the first.

const foundFragment = BinarySearch.search(
fragments,
fragmentWithinToleranceTest.bind(null, bufferEnd, maxFragLookUpTolerance)
);

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.

@TroyKomodo
Copy link
Contributor Author

Oh and this was all to get sub second latency on HLS. The lowest latency I recorded with this setup was 669ms
image
This was also having a very small buffer of around ~300ms (less than 2 parts loaded at any time)'

I stopped trying to get lower since anything lower is moot unless you are trying to do Realtime calls with bidirectional communication which in that case you should use WebRTC.

@robwalch robwalch added Confirmed Stream Issue and removed Needs Triage If there is a suspected stream issue, apply this label to triage if it is something we should fix. labels Nov 21, 2022
@robwalch
Copy link
Collaborator

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.

@robwalch robwalch added Need sample stream Verify Fixed An unreleased bug fix has been merged and should be verified before closing. and removed Stream Issue labels Dec 21, 2022
@robwalch robwalch added this to the 1.3.0 milestone Dec 21, 2022
@robwalch robwalch removed the Verify Fixed An unreleased bug fix has been merged and should be verified before closing. label Jan 12, 2023
@robwalch robwalch modified the milestones: 1.3.0, 1.4.0 Jan 12, 2023
@robwalch
Copy link
Collaborator

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.

@robwalch robwalch modified the milestones: 1.4.0, 1.5.0 Feb 15, 2023
@robwalch
Copy link
Collaborator

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.

@TroyKomodo
Copy link
Contributor Author

Hey @robwalch ,
This issue was related when the fragment duration was smaller or the same size as the nudge fragment duration.

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.

@robwalch
Copy link
Collaborator

robwalch commented Apr 18, 2023

This issue was related when the fragment duration was smaller or the same size as the nudge fragment duration.

This should be fixed with changes in v1.4.0. maxFragLookUpTolerance no longer causes fragments or parts at or ahead of the playhead to be skipped.

I did a little testing (Flussonic LL-HLS with 0.192s parts and "maxFragLookUpTolerance": 0.25) and could not reproduce, but will leave it to you or others to verify. Thanks!

@robwalch robwalch removed this from the 1.5.0 milestone Apr 18, 2023
@robwalch robwalch added the Verify Fixed An unreleased bug fix has been merged and should be verified before closing. label Apr 18, 2023
@robwalch
Copy link
Collaborator

robwalch commented Apr 18, 2023

There are still less severe issues with selecting and appending parts before currentTime. These are being tracked and discussed in #3596 (comment)

@robwalch robwalch modified the milestone: 1.4.2 May 5, 2023
@robwalch
Copy link
Collaborator

robwalch commented May 9, 2023

Hi @TroyKomodo,

Fixes have been merged. I plan to tag and release 1.4.2 tomorrow.

@TroyKomodo
Copy link
Contributor Author

@robwalch sounds great thanks for merging the fix! I'll test tomorrow on the demo page and report here.

@robwalch
Copy link
Collaborator

robwalch commented May 9, 2023

v1.4.2 is out!

@TroyKomodo
Copy link
Contributor Author

@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

@robwalch
Copy link
Collaborator

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!

@robwalch robwalch removed the Verify Fixed An unreleased bug fix has been merged and should be verified before closing. label May 16, 2023
@video-dev video-dev locked as resolved and limited conversation to collaborators May 16, 2023
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
Development

No branches or pull requests

2 participants