hls.js icon indicating copy to clipboard operation
hls.js copied to clipboard

Audio track switching does not apply immediately

Open niklaskorz opened this issue 1 year ago • 8 comments

What version of Hls.js are you using?

v1.4.12

What browser (including version) are you using?

Firefox 118.0.1 (Official Build) (x86_64)

What OS (including version) are you using?

Windows 11 (22H2)

Test stream

https://hlsjs.video-dev.org/demo/?src=https%3A%2F%2Fstorage.googleapis.com%2Fshaka-demo-assets%2Fangel-one-hls%2Fhls.m3u8&demoConfig=eyJlbmFibGVTdHJlYW1pbmciOnRydWUsImF1dG9SZWNvdmVyRXJyb3IiOnRydWUsInN0b3BPblN0YWxsIjpmYWxzZSwiZHVtcGZNUDQiOmZhbHNlLCJsZXZlbENhcHBpbmciOi0xLCJsaW1pdE1ldHJpY3MiOi0xfQ==

Configuration

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

Additional player setup steps

No response

Checklist

  • [X] The issue observed is not already reported by searching on Github under https://github.com/video-dev/hls.js/issues
  • [X] The issue occurs in the stable client (latest release) on https://hlsjs.video-dev.org/demo and not just on my page
  • [X] The issue occurs in the latest client (main branch) on https://hlsjs-dev.video-dev.org/demo and not just on my page
  • [X] The stream has correct Access-Control-Allow-Origin headers (CORS)
  • [X] There are no network errors such as 404s in the browser console when trying to play the stream

Steps to reproduce

  1. Play the video until someone talks
  2. Switch to one of the other five audio tracks

Expected behaviour

The new audio track should load and play immediately, potentially stopping the playback to buffer the new audio until it can be played.

What actually happened?

The old audio continues playing for a few seconds, until it is replaced by the new audio. This does not happen on shaka-player, using exactly the same HLS manifest. Microsoft Edge on the same system also continues playing the old audio, but only until the "audio track switched" event is triggered.

Firefox HLS.js (very noticeable delay, even after "audio track switched" is triggered):

https://github.com/video-dev/hls.js/assets/590517/662c37fc-4f58-4afe-811a-d3c9a18d24fc

Firefox shaka-player (stops to buffer, but then plays without delay):

https://github.com/video-dev/hls.js/assets/590517/5d77a3f4-4e97-4442-985c-d220082c5eb8

Microsoft Edge (short delay in HLS.js, but plays immediately when "audio track switched" is triggered; same behavior as Firefox in shaka-player):

https://github.com/video-dev/hls.js/assets/590517/4d1ceafc-b6ed-44da-9700-54cac34723f7

Console output

Using Hls.js config: 
Object { debug: true, enableWorker: true, lowLatencyMode: true, backBufferLength: 90 }
main.js:339:10
[log] > Debug logs enabled for "Hls instance" in hls.js version 1.4.12 logger.ts:74:21
[log] > stopLoad hls.ts:410:11
[log] > loadSource:https://storage.googleapis.com/shaka-demo-assets/angel-one-hls/hls.m3u8 hls.ts:379:11
[log] > [stream-controller]: Trigger BUFFER_RESET stream-controller.ts:569:9
[log] > attachMedia hls.ts:351:11
[log] > [level-controller]: manifest loaded, 5 level(s) found, first bitrate: 1824731 level-controller.ts:269:13
[log] > 2 bufferCodec event(s) expected buffer-controller.ts:148:11
[log] > startLoad(-1) hls.ts:400:11
[log] > [level-controller]: Switching to level 4 from level -1 level-controller.ts:351:9
[log] > [audio-track-controller]: Updating audio tracks, 6 track(s) found in group:default-audio-group audio-track-controller.ts:138:11
[log] > [audio-track-controller]: Switching to audio-track 0 "stream_5" lang:en group:default-audio-group audio-track-controller.ts:195:9
[log] > [audio-stream-controller]: Reset loading state base-stream-controller.ts:1631:9
[log] > [audio-stream-controller]: STOPPED->IDLE base-stream-controller.ts:1777:11
[log] > [subtitle-track-controller]: Updating subtitle tracks, 4 track(s) found in "default-text-group" group-id subtitle-track-controller.ts:217:11
[log] > [level-controller]: Loading level index 4 with URI 1/1 https://storage.googleapis.com/shaka-demo-assets/angel-one-hls/playlist_v-0576p-1400k-libx264.mp4.m3u8 level-controller.ts:520:11
[log] > [stream-controller]: STOPPED->IDLE base-stream-controller.ts:1777:11
[log] > [audio-track-controller]: loading audio-track playlist 0 "stream_5" lang:en group:default-audio-group audio-track-controller.ts:273:11
[log] > [audio-stream-controller]: IDLE->STOPPED base-stream-controller.ts:1777:11
[log] > [audio-stream-controller]: STOPPED->WAITING_TRACK base-stream-controller.ts:1777:11
[log] > [subtitle-stream-controller]: STOPPED->IDLE base-stream-controller.ts:1777:11
[log] > [buffer-controller]: Media source opened buffer-controller.ts:800:11
[log] > [subtitle-track-controller]: Switching to subtitle-track 0 "stream_0" lang:en group:default-text-group subtitle-track-controller.ts:371:9
[log] > [subtitle-track-controller]: Loading subtitle playlist for id 0 subtitle-track-controller.ts:292:11
[log] > [stream-controller]: Level 4 loaded [0,14][part-14--1], cc [0, 0] duration:60 stream-controller.ts:634:9
[log] > [buffer-controller]: Updating Media Source duration to 60.000 buffer-controller.ts:692:13
[log] > [stream-controller]: Loading fragment initSegment cc: 0 of [0-14] level: 4, target: 0 base-stream-controller.ts:743:9
[log] > [stream-controller]: IDLE->FRAG_LOADING base-stream-controller.ts:1777:11
[log] > [audio-track-controller]: audio-track 0 "stream_5" lang:en group:default-audio-group loaded [0-14] audio-track-controller.ts:90:9
[log] > [audio-stream-controller]: Track 0 loaded [0,14][part-14--1],duration:60 audio-stream-controller.ts:497:9
[log] > [audio-stream-controller]: WAITING_TRACK->IDLE base-stream-controller.ts:1777:11
[log] > [audio-stream-controller]: Loading fragment initSegment cc: 0 of [0-14] track: 0, target: 0 base-stream-controller.ts:743:9
[log] > [audio-stream-controller]: IDLE->FRAG_LOADING base-stream-controller.ts:1777:11
[log] > [subtitle-track-controller]: subtitle track 0 loaded [0-15] subtitle-track-controller.ts:173:9
[log] > [subtitle-stream-controller]: Loading fragment 0 cc: 0 of [0-15] track: 0, target: 0 base-stream-controller.ts:743:9
[log] > [subtitle-stream-controller]: IDLE->FRAG_LOADING base-stream-controller.ts:1777:11
[log] > [stream-controller]: FRAG_LOADING->IDLE base-stream-controller.ts:1777:11
[log] > [stream-controller]: Buffered main sn: initSegment of level 4 (frag:[NaN-NaN] > buffer:) base-stream-controller.ts:572:9
[log] > [stream-controller]: Loading fragment 0 cc: 0 of [0-14] level: 4, target: 0 base-stream-controller.ts:743:9
[log] > [stream-controller]: IDLE->FRAG_LOADING base-stream-controller.ts:1777:11
[log] > [audio-stream-controller]: FRAG_LOADING->IDLE base-stream-controller.ts:1777:11
[log] > [audio-stream-controller]: Buffered audio sn: initSegment of track 0 (frag:[NaN-NaN] > buffer:) base-stream-controller.ts:572:9
[log] > [audio-stream-controller]: Loading fragment 0 cc: 0 of [0-14] track: 0, target: 0 base-stream-controller.ts:743:9
[log] > [audio-stream-controller]: IDLE->FRAG_LOADING base-stream-controller.ts:1777:11
[log] > [subtitle-stream-controller]: Loaded fragment 0 of level 0 base-stream-controller.ts:386:15
[log] > injecting Web Worker for "audio" transmuxer-interface.ts:85:19
[log] > [audio-stream-controller]: Unknown video PTS for cc 0, waiting for video PTS before demuxing audio frag 0 of [0 ,14],track 0 audio-stream-controller.ts:610:11
[log] > [audio-stream-controller]: FRAG_LOADING->WAITING_INIT_PTS base-stream-controller.ts:1777:11
[log] > [audio-stream-controller]: Loaded fragment 0 of level 0 base-stream-controller.ts:386:15
[log] > injecting Web Worker for "main" transmuxer-interface.ts:85:19
[log] > [transmuxer-interface, main]: Starting new transmux session for sn: 0 p: -1 level: 4 id: 1
        discontinuity: true
        trackSwitch: true
        contiguous: false
        accurateTimeOffset: true
        timeOffset: 0
        initSegmentChange: true hls.js:14939:16
[log] > [stream-controller]: Loaded fragment 0 of level 4 base-stream-controller.ts:386:15
[log] > Debug logs enabled for "audio" in hls.js version 1.4.12 d7f1c0ae-6fb0-40ba-8dcf-3992cf575109:542:24
[log] > Debug logs enabled for "main" in hls.js version 1.4.12 336ddc74-49d3-439f-ab54-f21a3f6804fc:542:24
[log] > [stream-controller]: FRAG_LOADING->PARSING base-stream-controller.ts:1777:11
[log] > [stream-controller]: Init video buffer, container:video/mp4, codecs[level/parsed]=[avc1.4d401f/avc1.4d401f] hls.js:16358:14
[log] > [audio-stream-controller]: InitPTS for cc: 0 found from main: 0 hls.js:17130:14
[log] > [audio-stream-controller]: WAITING_INIT_PTS->FRAG_LOADING base-stream-controller.ts:1777:11
[log] > [transmuxer-interface, audio]: Starting new transmux session for sn: 0 p: -1 level: 0 id: 1
        discontinuity: true
        trackSwitch: true
        contiguous: false
        accurateTimeOffset: false
        timeOffset: 0
        initSegmentChange: true hls.js:14939:16
[log] > [subtitle-stream-controller]: FRAG_LOADING->IDLE base-stream-controller.ts:1777:11
[log] > [transmuxer.ts]: Flushed fragment 0 of level 4 transmuxer-interface.ts:379:36
[log] > [stream-controller]: PARSING->PARSED base-stream-controller.ts:1777:11
[log] > [audio-stream-controller]: FRAG_LOADING->PARSING base-stream-controller.ts:1777:11
[log] > [audio-stream-controller]: Init audio buffer, container:audio/mp4, codecs[parsed]=[mp4a.40.2] hls.js:17707:12
[log] > [buffer-controller]: creating sourceBuffer(video/mp4;codecs=avc1.4d401f) hls.js:19473:18
[log] > [buffer-controller]: creating sourceBuffer(audio/mp4;codecs=mp4a.40.2) hls.js:19473:18
[log] > [stream-controller]: Alternate track found, use video.buffered to schedule main fragment loading hls.js:16000:14
[log] > [transmuxer.ts]: Flushed fragment 0 of level 0 transmuxer-interface.ts:379:36
[log] > [audio-stream-controller]: PARSING->PARSED base-stream-controller.ts:1777:11
[log] > [stream-controller]: Buffered main sn: 0 of level 4 (frag:[0.000-4.000] > buffer:[0.000-4.000]) base-stream-controller.ts:572:9
[log] > [stream-controller]: PARSED->IDLE base-stream-controller.ts:1777:11
[log] > [stream-controller]: Loading fragment 1 cc: 0 of [0-14] level: 4, target: 4 base-stream-controller.ts:743:9
[log] > [stream-controller]: IDLE->FRAG_LOADING base-stream-controller.ts:1777:11
[log] > [audio-stream-controller]: Buffered audio sn: 0 of track 0 (frag:[0.000-4.032] > buffer:[0.000-4.011]) base-stream-controller.ts:572:9
[log] > [audio-stream-controller]: PARSED->IDLE base-stream-controller.ts:1777:11
[log] > [audio-stream-controller]: Loading fragment 1 cc: 0 of [0-14] track: 0, target: 4.032 base-stream-controller.ts:743:9
[log] > [audio-stream-controller]: IDLE->FRAG_LOADING base-stream-controller.ts:1777:11
[log] > [stream-controller]: Loaded fragment 1 of level 4 base-stream-controller.ts:386:15
[log] > [stream-controller]: FRAG_LOADING->PARSING base-stream-controller.ts:1777:11
[log] > [transmuxer.ts]: Flushed fragment 1 of level 4 transmuxer-interface.ts:379:36
[log] > [stream-controller]: PARSING->PARSED base-stream-controller.ts:1777:11
[log] > [stream-controller]: Buffered main sn: 1 of level 4 (frag:[4.000-8.000] > buffer:[0.000-8.000]) base-stream-controller.ts:572:9
[log] > [stream-controller]: PARSED->IDLE base-stream-controller.ts:1777:11
[log] > [stream-controller]: Loading fragment 2 cc: 0 of [0-14] level: 4, target: 8 base-stream-controller.ts:743:9
[log] > [stream-controller]: IDLE->FRAG_LOADING base-stream-controller.ts:1777:11
[log] > [audio-stream-controller]: Loaded fragment 1 of level 0 base-stream-controller.ts:386:15
[log] > [audio-stream-controller]: FRAG_LOADING->PARSING base-stream-controller.ts:1777:11
[log] > [transmuxer.ts]: Flushed fragment 1 of level 0 transmuxer-interface.ts:379:36
[log] > [audio-stream-controller]: PARSING->PARSED base-stream-controller.ts:1777:11
[log] > [audio-stream-controller]: Buffered audio sn: 1 of track 0 (frag:[4.032-8.021] > buffer:[0.000-8.000]) base-stream-controller.ts:572:9
[log] > [audio-stream-controller]: PARSED->IDLE base-stream-controller.ts:1777:11
[log] > [audio-stream-controller]: Loading fragment 2 cc: 0 of [0-14] track: 0, target: 8.021 base-stream-controller.ts:743:9
[log] > [audio-stream-controller]: IDLE->FRAG_LOADING base-stream-controller.ts:1777:11
[log] > [stream-controller]: Loaded fragment 2 of level 4 base-stream-controller.ts:386:15
[log] > [stream-controller]: FRAG_LOADING->PARSING base-stream-controller.ts:1777:11
[log] > [transmuxer.ts]: Flushed fragment 2 of level 4 transmuxer-interface.ts:379:36
[log] > [stream-controller]: PARSING->PARSED base-stream-controller.ts:1777:11
[log] > [stream-controller]: Buffered main sn: 2 of level 4 (frag:[8.000-12.000] > buffer:[0.000-12.000]) base-stream-controller.ts:572:9
[log] > [stream-controller]: PARSED->IDLE base-stream-controller.ts:1777:11
[log] > [stream-controller]: Loading fragment 3 cc: 0 of [0-14] level: 4, target: 12 base-stream-controller.ts:743:9
[log] > [stream-controller]: IDLE->FRAG_LOADING base-stream-controller.ts:1777:11
[log] > [audio-stream-controller]: Loaded fragment 2 of level 0 base-stream-controller.ts:386:15
[log] > [audio-stream-controller]: FRAG_LOADING->PARSING base-stream-controller.ts:1777:11
[log] > [transmuxer.ts]: Flushed fragment 2 of level 0 transmuxer-interface.ts:379:36
[log] > [audio-stream-controller]: PARSING->PARSED base-stream-controller.ts:1777:11
[log] > [audio-stream-controller]: Buffered audio sn: 2 of track 0 (frag:[8.021-12.032] > buffer:[0.000-12.011]) base-stream-controller.ts:572:9
[log] > [audio-stream-controller]: PARSED->IDLE base-stream-controller.ts:1777:11
[log] > [audio-stream-controller]: Loading fragment 3 cc: 0 of [0-14] track: 0, target: 12.032 base-stream-controller.ts:743:9
[log] > [audio-stream-controller]: IDLE->FRAG_LOADING base-stream-controller.ts:1777:11
[log] > [stream-controller]: Loaded fragment 3 of level 4 base-stream-controller.ts:386:15
[log] > [stream-controller]: FRAG_LOADING->PARSING base-stream-controller.ts:1777:11
[log] > [transmuxer.ts]: Flushed fragment 3 of level 4 transmuxer-interface.ts:379:36
[log] > [stream-controller]: PARSING->PARSED base-stream-controller.ts:1777:11
[log] > [stream-controller]: Buffered main sn: 3 of level 4 (frag:[12.000-16.000] > buffer:[0.000-16.000]) base-stream-controller.ts:572:9
[log] > [stream-controller]: PARSED->IDLE base-stream-controller.ts:1777:11
[log] > [stream-controller]: Loading fragment 4 cc: 0 of [0-14] level: 4, target: 16 base-stream-controller.ts:743:9
[log] > [stream-controller]: IDLE->FRAG_LOADING base-stream-controller.ts:1777:11
[log] > [audio-stream-controller]: Loaded fragment 3 of level 0 base-stream-controller.ts:386:15
[log] > [audio-stream-controller]: FRAG_LOADING->PARSING base-stream-controller.ts:1777:11
[log] > [transmuxer.ts]: Flushed fragment 3 of level 0 transmuxer-interface.ts:379:36
[log] > [audio-stream-controller]: PARSING->PARSED base-stream-controller.ts:1777:11
[log] > [audio-stream-controller]: Buffered audio sn: 3 of track 0 (frag:[12.032-16.021] > buffer:[0.000-16.000]) base-stream-controller.ts:572:9
[log] > [audio-stream-controller]: PARSED->IDLE base-stream-controller.ts:1777:11
[log] > [audio-stream-controller]: Loading fragment 4 cc: 0 of [0-14] track: 0, target: 16.021 base-stream-controller.ts:743:9
[log] > [audio-stream-controller]: IDLE->FRAG_LOADING base-stream-controller.ts:1777:11
[log] > [stream-controller]: Loaded fragment 4 of level 4 base-stream-controller.ts:386:15
[log] > [stream-controller]: FRAG_LOADING->PARSING base-stream-controller.ts:1777:11
[log] > [transmuxer.ts]: Flushed fragment 4 of level 4 transmuxer-interface.ts:379:36
[log] > [stream-controller]: PARSING->PARSED base-stream-controller.ts:1777:11
[log] > [stream-controller]: Buffered main sn: 4 of level 4 (frag:[16.000-20.000] > buffer:[0.000-20.000]) base-stream-controller.ts:572:9
[log] > [stream-controller]: PARSED->IDLE base-stream-controller.ts:1777:11
[log] > [stream-controller]: Loading fragment 5 cc: 0 of [0-14] level: 4, target: 20 base-stream-controller.ts:743:9
[log] > [stream-controller]: IDLE->FRAG_LOADING base-stream-controller.ts:1777:11
[log] > [audio-stream-controller]: Loaded fragment 4 of level 0 base-stream-controller.ts:386:15
[log] > [audio-stream-controller]: FRAG_LOADING->PARSING base-stream-controller.ts:1777:11
[log] > [transmuxer.ts]: Flushed fragment 4 of level 0 transmuxer-interface.ts:379:36
[log] > [audio-stream-controller]: PARSING->PARSED base-stream-controller.ts:1777:11
[log] > [audio-stream-controller]: Buffered audio sn: 4 of track 0 (frag:[16.021-20.032] > buffer:[0.000-20.011]) base-stream-controller.ts:572:9
[log] > [audio-stream-controller]: PARSED->IDLE base-stream-controller.ts:1777:11
[log] > [audio-stream-controller]: Loading fragment 5 cc: 0 of [0-14] track: 0, target: 20.032 base-stream-controller.ts:743:9
[log] > [audio-stream-controller]: IDLE->FRAG_LOADING base-stream-controller.ts:1777:11
[log] > [stream-controller]: Loaded fragment 5 of level 4 base-stream-controller.ts:386:15
[log] > [stream-controller]: FRAG_LOADING->PARSING base-stream-controller.ts:1777:11
[log] > [transmuxer.ts]: Flushed fragment 5 of level 4 transmuxer-interface.ts:379:36
[log] > [stream-controller]: PARSING->PARSED base-stream-controller.ts:1777:11
[log] > [stream-controller]: Buffered main sn: 5 of level 4 (frag:[20.000-24.000] > buffer:[0.000-24.000]) base-stream-controller.ts:572:9
[log] > [stream-controller]: PARSED->IDLE base-stream-controller.ts:1777:11
[log] > [stream-controller]: Loading fragment 6 cc: 0 of [0-14] level: 4, target: 24 base-stream-controller.ts:743:9
[log] > [stream-controller]: IDLE->FRAG_LOADING base-stream-controller.ts:1777:11
[log] > [audio-stream-controller]: Loaded fragment 5 of level 0 base-stream-controller.ts:386:15
[log] > [audio-stream-controller]: FRAG_LOADING->PARSING base-stream-controller.ts:1777:11
[log] > [transmuxer.ts]: Flushed fragment 5 of level 0 transmuxer-interface.ts:379:36
[log] > [audio-stream-controller]: PARSING->PARSED base-stream-controller.ts:1777:11
[log] > [audio-stream-controller]: Buffered audio sn: 5 of track 0 (frag:[20.032-24.021] > buffer:[0.000-24.000]) base-stream-controller.ts:572:9
[log] > [audio-stream-controller]: PARSED->IDLE base-stream-controller.ts:1777:11
[log] > [audio-stream-controller]: Loading fragment 6 cc: 0 of [0-14] track: 0, target: 24.021 base-stream-controller.ts:743:9
[log] > [audio-stream-controller]: IDLE->FRAG_LOADING base-stream-controller.ts:1777:11
[log] > [stream-controller]: Loaded fragment 6 of level 4 base-stream-controller.ts:386:15
[log] > [stream-controller]: FRAG_LOADING->PARSING base-stream-controller.ts:1777:11
[log] > [transmuxer.ts]: Flushed fragment 6 of level 4 transmuxer-interface.ts:379:36
[log] > [stream-controller]: PARSING->PARSED base-stream-controller.ts:1777:11
[log] > [stream-controller]: Buffered main sn: 6 of level 4 (frag:[24.000-28.000] > buffer:[0.000-28.000]) base-stream-controller.ts:572:9
[log] > [stream-controller]: PARSED->IDLE base-stream-controller.ts:1777:11
[log] > [stream-controller]: Loading fragment 7 cc: 0 of [0-14] level: 4, target: 28 base-stream-controller.ts:743:9
[log] > [stream-controller]: IDLE->FRAG_LOADING base-stream-controller.ts:1777:11
[log] > [audio-stream-controller]: Loaded fragment 6 of level 0 base-stream-controller.ts:386:15
[log] > [audio-stream-controller]: FRAG_LOADING->PARSING base-stream-controller.ts:1777:11
[log] > [transmuxer.ts]: Flushed fragment 6 of level 0 transmuxer-interface.ts:379:36
[log] > [audio-stream-controller]: PARSING->PARSED base-stream-controller.ts:1777:11
[log] > [audio-stream-controller]: Buffered audio sn: 6 of track 0 (frag:[24.021-28.032] > buffer:[0.000-28.011]) base-stream-controller.ts:572:9
[log] > [audio-stream-controller]: PARSED->IDLE base-stream-controller.ts:1777:11
[log] > [audio-stream-controller]: Loading fragment 7 cc: 0 of [0-14] track: 0, target: 28.032 base-stream-controller.ts:743:9
[log] > [audio-stream-controller]: IDLE->FRAG_LOADING base-stream-controller.ts:1777:11
[log] > [stream-controller]: Loaded fragment 7 of level 4 base-stream-controller.ts:386:15
[log] > [stream-controller]: FRAG_LOADING->PARSING base-stream-controller.ts:1777:11
[log] > [transmuxer.ts]: Flushed fragment 7 of level 4 transmuxer-interface.ts:379:36
[log] > [stream-controller]: PARSING->PARSED base-stream-controller.ts:1777:11
[log] > [stream-controller]: Buffered main sn: 7 of level 4 (frag:[28.000-32.000] > buffer:[0.000-32.000]) base-stream-controller.ts:572:9
[log] > [stream-controller]: PARSED->IDLE base-stream-controller.ts:1777:11
[log] > [stream-controller]: Loading fragment 8 cc: 0 of [0-14] level: 4, target: 32 base-stream-controller.ts:743:9
[log] > [stream-controller]: IDLE->FRAG_LOADING base-stream-controller.ts:1777:11
[log] > [audio-stream-controller]: Loaded fragment 7 of level 0 base-stream-controller.ts:386:15
[log] > [audio-stream-controller]: FRAG_LOADING->PARSING base-stream-controller.ts:1777:11
[log] > [transmuxer.ts]: Flushed fragment 7 of level 0 transmuxer-interface.ts:379:36
[log] > [audio-stream-controller]: PARSING->PARSED base-stream-controller.ts:1777:11
[log] > [audio-stream-controller]: Buffered audio sn: 7 of track 0 (frag:[28.032-32.021] > buffer:[0.000-32.000]) base-stream-controller.ts:572:9
[log] > [audio-stream-controller]: PARSED->IDLE base-stream-controller.ts:1777:11
[log] > [stream-controller]: Loaded fragment 8 of level 4 base-stream-controller.ts:386:15
[log] > [stream-controller]: FRAG_LOADING->PARSING base-stream-controller.ts:1777:11
[log] > [transmuxer.ts]: Flushed fragment 8 of level 4 transmuxer-interface.ts:379:36
[log] > [stream-controller]: PARSING->PARSED base-stream-controller.ts:1777:11
[log] > [stream-controller]: Buffered main sn: 8 of level 4 (frag:[32.000-36.000] > buffer:[0.000-36.000]) base-stream-controller.ts:572:9
[log] > [stream-controller]: PARSED->IDLE base-stream-controller.ts:1777:11
[log] > [stream-controller]: Loading fragment 9 cc: 0 of [0-14] level: 4, target: 36 base-stream-controller.ts:743:9
[log] > [stream-controller]: IDLE->FRAG_LOADING base-stream-controller.ts:1777:11
[log] > [stream-controller]: Loaded fragment 9 of level 4 base-stream-controller.ts:386:15
[log] > [stream-controller]: FRAG_LOADING->PARSING base-stream-controller.ts:1777:11
[log] > [transmuxer.ts]: Flushed fragment 9 of level 4 transmuxer-interface.ts:379:36
[log] > [stream-controller]: PARSING->PARSED base-stream-controller.ts:1777:11
[log] > [stream-controller]: Buffered main sn: 9 of level 4 (frag:[36.000-40.000] > buffer:[0.000-40.000]) base-stream-controller.ts:572:9
[log] > [stream-controller]: PARSED->IDLE base-stream-controller.ts:1777:11
[log] > [stream-controller]: Loading fragment 10 cc: 0 of [0-14] level: 4, target: 40 base-stream-controller.ts:743:9
[log] > [stream-controller]: IDLE->FRAG_LOADING base-stream-controller.ts:1777:11
[log] > [audio-stream-controller]: Loading fragment 8 cc: 0 of [0-14] track: 0, target: 32.021 base-stream-controller.ts:743:9
[log] > [audio-stream-controller]: IDLE->FRAG_LOADING base-stream-controller.ts:1777:11
[log] > [stream-controller]: Loaded fragment 10 of level 4 base-stream-controller.ts:386:15
[log] > [stream-controller]: FRAG_LOADING->PARSING base-stream-controller.ts:1777:11
[log] > [transmuxer.ts]: Flushed fragment 10 of level 4 transmuxer-interface.ts:379:36
[log] > [stream-controller]: PARSING->PARSED base-stream-controller.ts:1777:11
[log] > [stream-controller]: Buffered main sn: 10 of level 4 (frag:[40.000-44.000] > buffer:[0.000-44.000]) base-stream-controller.ts:572:9
[log] > [stream-controller]: PARSED->IDLE base-stream-controller.ts:1777:11
[log] > [stream-controller]: Loading fragment 11 cc: 0 of [0-14] level: 4, target: 44 base-stream-controller.ts:743:9
[log] > [stream-controller]: IDLE->FRAG_LOADING base-stream-controller.ts:1777:11
[log] > [audio-stream-controller]: Loaded fragment 8 of level 0 base-stream-controller.ts:386:15
[log] > [audio-stream-controller]: FRAG_LOADING->PARSING base-stream-controller.ts:1777:11
[log] > [transmuxer.ts]: Flushed fragment 8 of level 0 transmuxer-interface.ts:379:36
[log] > [audio-stream-controller]: PARSING->PARSED base-stream-controller.ts:1777:11
[log] > [audio-stream-controller]: Buffered audio sn: 8 of track 0 (frag:[32.021-36.032] > buffer:[0.000-36.011]) base-stream-controller.ts:572:9
[log] > [audio-stream-controller]: PARSED->IDLE base-stream-controller.ts:1777:11
[log] > [audio-stream-controller]: Loading fragment 9 cc: 0 of [0-14] track: 0, target: 36.032 base-stream-controller.ts:743:9
[log] > [audio-stream-controller]: IDLE->FRAG_LOADING base-stream-controller.ts:1777:11
[log] > [stream-controller]: Loaded fragment 11 of level 4 base-stream-controller.ts:386:15
[log] > [stream-controller]: FRAG_LOADING->PARSING base-stream-controller.ts:1777:11
[log] > [transmuxer.ts]: Flushed fragment 11 of level 4 transmuxer-interface.ts:379:36
[log] > [audio-stream-controller]: Loaded fragment 9 of level 0 base-stream-controller.ts:386:15
[log] > [stream-controller]: PARSING->PARSED base-stream-controller.ts:1777:11
[log] > [audio-stream-controller]: FRAG_LOADING->PARSING base-stream-controller.ts:1777:11
[log] > [transmuxer.ts]: Flushed fragment 9 of level 0 transmuxer-interface.ts:379:36
[log] > [audio-stream-controller]: PARSING->PARSED base-stream-controller.ts:1777:11
[log] > [stream-controller]: Buffered main sn: 11 of level 4 (frag:[44.000-48.000] > buffer:[0.000-48.000]) base-stream-controller.ts:572:9
[log] > [stream-controller]: PARSED->IDLE base-stream-controller.ts:1777:11
[log] > [stream-controller]: Loading fragment 12 cc: 0 of [0-14] level: 4, target: 48 base-stream-controller.ts:743:9
[log] > [stream-controller]: IDLE->FRAG_LOADING base-stream-controller.ts:1777:11
[log] > [audio-stream-controller]: Buffered audio sn: 9 of track 0 (frag:[36.032-40.021] > buffer:[0.000-40.000]) base-stream-controller.ts:572:9
[log] > [audio-stream-controller]: PARSED->IDLE base-stream-controller.ts:1777:11
[log] > [audio-stream-controller]: Loading fragment 10 cc: 0 of [0-14] track: 0, target: 40.021 base-stream-controller.ts:743:9
[log] > [audio-stream-controller]: IDLE->FRAG_LOADING base-stream-controller.ts:1777:11
[log] > [stream-controller]: Loaded fragment 12 of level 4 base-stream-controller.ts:386:15
[log] > [stream-controller]: FRAG_LOADING->PARSING base-stream-controller.ts:1777:11
[log] > [transmuxer.ts]: Flushed fragment 12 of level 4 transmuxer-interface.ts:379:36
[log] > [stream-controller]: PARSING->PARSED base-stream-controller.ts:1777:11
[log] > [audio-stream-controller]: Loaded fragment 10 of level 0 base-stream-controller.ts:386:15
[log] > [audio-stream-controller]: FRAG_LOADING->PARSING base-stream-controller.ts:1777:11
[log] > [transmuxer.ts]: Flushed fragment 10 of level 0 transmuxer-interface.ts:379:36
[log] > [stream-controller]: Buffered main sn: 12 of level 4 (frag:[48.000-52.000] > buffer:[0.000-52.000]) base-stream-controller.ts:572:9
[log] > [stream-controller]: PARSED->IDLE base-stream-controller.ts:1777:11
[log] > [stream-controller]: Loading fragment 13 cc: 0 of [0-14] level: 4, target: 52 base-stream-controller.ts:743:9
[log] > [stream-controller]: IDLE->FRAG_LOADING base-stream-controller.ts:1777:11
[log] > [audio-stream-controller]: PARSING->PARSED base-stream-controller.ts:1777:11
[log] > [audio-stream-controller]: Buffered audio sn: 10 of track 0 (frag:[40.021-44.032] > buffer:[0.000-44.011]) base-stream-controller.ts:572:9
[log] > [audio-stream-controller]: PARSED->IDLE base-stream-controller.ts:1777:11
[log] > [audio-stream-controller]: Loading fragment 11 cc: 0 of [0-14] track: 0, target: 44.032 base-stream-controller.ts:743:9
[log] > [audio-stream-controller]: IDLE->FRAG_LOADING base-stream-controller.ts:1777:11
[log] > [stream-controller]: Loaded fragment 13 of level 4 base-stream-controller.ts:386:15
[log] > [stream-controller]: FRAG_LOADING->PARSING base-stream-controller.ts:1777:11
[log] > [transmuxer.ts]: Flushed fragment 13 of level 4 transmuxer-interface.ts:379:36
[log] > [stream-controller]: PARSING->PARSED base-stream-controller.ts:1777:11
[log] > [audio-stream-controller]: Loaded fragment 11 of level 0 base-stream-controller.ts:386:15
[log] > [audio-stream-controller]: FRAG_LOADING->PARSING base-stream-controller.ts:1777:11
[log] > [stream-controller]: Buffered main sn: 13 of level 4 (frag:[52.000-56.000] > buffer:[0.000-56.000]) base-stream-controller.ts:572:9
[log] > [stream-controller]: PARSED->IDLE base-stream-controller.ts:1777:11
[log] > [stream-controller]: Loading fragment 14 cc: 0 of [0-14] level: 4, target: 56 base-stream-controller.ts:743:9
[log] > [stream-controller]: IDLE->FRAG_LOADING base-stream-controller.ts:1777:11
[log] > [transmuxer.ts]: Flushed fragment 11 of level 0 transmuxer-interface.ts:379:36
[log] > [audio-stream-controller]: PARSING->PARSED base-stream-controller.ts:1777:11
[log] > [audio-stream-controller]: Buffered audio sn: 11 of track 0 (frag:[44.032-48.021] > buffer:[0.000-48.000]) base-stream-controller.ts:572:9
[log] > [audio-stream-controller]: PARSED->IDLE base-stream-controller.ts:1777:11
[log] > [audio-stream-controller]: Loading fragment 12 cc: 0 of [0-14] track: 0, target: 48.021 base-stream-controller.ts:743:9
[log] > [audio-stream-controller]: IDLE->FRAG_LOADING base-stream-controller.ts:1777:11
[log] > [audio-stream-controller]: Loaded fragment 12 of level 0 base-stream-controller.ts:386:15
[log] > [audio-stream-controller]: FRAG_LOADING->PARSING base-stream-controller.ts:1777:11
[log] > [transmuxer.ts]: Flushed fragment 12 of level 0 transmuxer-interface.ts:379:36
[log] > [audio-stream-controller]: PARSING->PARSED base-stream-controller.ts:1777:11
[log] > [audio-stream-controller]: Buffered audio sn: 12 of track 0 (frag:[48.021-52.032] > buffer:[0.000-52.011]) base-stream-controller.ts:572:9
[log] > [audio-stream-controller]: PARSED->IDLE base-stream-controller.ts:1777:11
[log] > [audio-stream-controller]: Loading fragment 13 cc: 0 of [0-14] track: 0, target: 52.032 base-stream-controller.ts:743:9
[log] > [audio-stream-controller]: IDLE->FRAG_LOADING base-stream-controller.ts:1777:11
[log] > [stream-controller]: Loaded fragment 14 of level 4 base-stream-controller.ts:386:15
[log] > [stream-controller]: FRAG_LOADING->PARSING base-stream-controller.ts:1777:11
[log] > [transmuxer.ts]: Flushed fragment 14 of level 4 transmuxer-interface.ts:379:36
[log] > [stream-controller]: PARSING->PARSED base-stream-controller.ts:1777:11
[log] > [stream-controller]: Buffered main sn: 14 of level 4 (frag:[56.000-60.000] > buffer:[0.000-60.000]) base-stream-controller.ts:572:9
[log] > [stream-controller]: PARSED->IDLE base-stream-controller.ts:1777:11
[log] > [buffer-controller]: video sourceBuffer now EOS buffer-controller.ts:544:17
[log] > [stream-controller]: IDLE->ENDED base-stream-controller.ts:1777:11
[log] > [audio-stream-controller]: Loaded fragment 13 of level 0 base-stream-controller.ts:386:15
[log] > [audio-stream-controller]: FRAG_LOADING->PARSING base-stream-controller.ts:1777:11
[log] > [transmuxer.ts]: Flushed fragment 13 of level 0 transmuxer-interface.ts:379:36
[log] > [audio-stream-controller]: PARSING->PARSED base-stream-controller.ts:1777:11
[log] > [audio-stream-controller]: Buffered audio sn: 13 of track 0 (frag:[52.032-56.021] > buffer:[0.000-56.000]) base-stream-controller.ts:572:9
[log] > [audio-stream-controller]: PARSED->IDLE base-stream-controller.ts:1777:11
[log] > [audio-stream-controller]: Loading fragment 14 cc: 0 of [0-14] track: 0, target: 56.021 base-stream-controller.ts:743:9
[log] > [audio-stream-controller]: IDLE->FRAG_LOADING base-stream-controller.ts:1777:11
[log] > [audio-stream-controller]: Loaded fragment 14 of level 0 base-stream-controller.ts:386:15
[log] > [audio-stream-controller]: FRAG_LOADING->PARSING base-stream-controller.ts:1777:11
[log] > [transmuxer.ts]: Flushed fragment 14 of level 0 transmuxer-interface.ts:379:36
[log] > [audio-stream-controller]: PARSING->PARSED base-stream-controller.ts:1777:11
[log] > [audio-stream-controller]: Buffered audio sn: 14 of track 0 (frag:[56.021-60.021] > buffer:[0.000-60.000]) base-stream-controller.ts:572:9
[log] > [audio-stream-controller]: PARSED->IDLE base-stream-controller.ts:1777:11
[log] > [buffer-controller]: audio sourceBuffer now EOS buffer-controller.ts:544:17
[log] > [buffer-controller]: Queueing mediaSource.endOfStream() buffer-controller.ts:551:13
[log] > [audio-stream-controller]: IDLE->ENDED base-stream-controller.ts:1777:11
[log] > [buffer-controller]: Calling mediaSource.endOfStream() buffer-controller.ts:568:15
[log] > [buffer-controller]: Media source ended buffer-controller.ts:819:11
[log] > [subtitle-stream-controller]: Loading fragment 1 cc: 0 of [0-15] track: 0, target: 4 base-stream-controller.ts:743:9
[log] > [subtitle-stream-controller]: IDLE->FRAG_LOADING base-stream-controller.ts:1777:11
[log] > [subtitle-stream-controller]: Loaded fragment 1 of level 0 base-stream-controller.ts:386:15
[log] > [subtitle-stream-controller]: FRAG_LOADING->IDLE base-stream-controller.ts:1777:11
[log] > [subtitle-stream-controller]: Loading fragment 2 cc: 0 of [0-15] track: 0, target: 8 base-stream-controller.ts:743:9
[log] > [subtitle-stream-controller]: IDLE->FRAG_LOADING base-stream-controller.ts:1777:11
[log] > [subtitle-stream-controller]: Loaded fragment 2 of level 0 base-stream-controller.ts:386:15
[log] > [subtitle-stream-controller]: FRAG_LOADING->IDLE base-stream-controller.ts:1777:11
[log] > [subtitle-stream-controller]: Loading fragment 3 cc: 0 of [0-15] track: 0, target: 12 base-stream-controller.ts:743:9
[log] > [subtitle-stream-controller]: IDLE->FRAG_LOADING base-stream-controller.ts:1777:11
[log] > [subtitle-stream-controller]: Loaded fragment 3 of level 0 base-stream-controller.ts:386:15
[log] > [subtitle-stream-controller]: FRAG_LOADING->IDLE base-stream-controller.ts:1777:11
[log] > [subtitle-stream-controller]: Loading fragment 4 cc: 0 of [0-15] track: 0, target: 16 base-stream-controller.ts:743:9
[log] > [subtitle-stream-controller]: IDLE->FRAG_LOADING base-stream-controller.ts:1777:11
[log] > [subtitle-stream-controller]: Loaded fragment 4 of level 0 base-stream-controller.ts:386:15
[log] > [subtitle-stream-controller]: FRAG_LOADING->IDLE base-stream-controller.ts:1777:11
[log] > [subtitle-stream-controller]: Loading fragment 5 cc: 0 of [0-15] track: 0, target: 20 base-stream-controller.ts:743:9
[log] > [subtitle-stream-controller]: IDLE->FRAG_LOADING base-stream-controller.ts:1777:11
[log] > [subtitle-stream-controller]: Loaded fragment 5 of level 0 base-stream-controller.ts:386:15
[log] > [subtitle-stream-controller]: FRAG_LOADING->IDLE base-stream-controller.ts:1777:11
[log] > [subtitle-stream-controller]: Loading fragment 6 cc: 0 of [0-15] track: 0, target: 24 base-stream-controller.ts:743:9
[log] > [subtitle-stream-controller]: IDLE->FRAG_LOADING base-stream-controller.ts:1777:11
[log] > [subtitle-stream-controller]: Loaded fragment 6 of level 0 base-stream-controller.ts:386:15
[log] > [subtitle-stream-controller]: FRAG_LOADING->IDLE base-stream-controller.ts:1777:11
[log] > [subtitle-stream-controller]: Loading fragment 7 cc: 0 of [0-15] track: 0, target: 28 base-stream-controller.ts:743:9
[log] > [subtitle-stream-controller]: IDLE->FRAG_LOADING base-stream-controller.ts:1777:11
[log] > [subtitle-stream-controller]: Loaded fragment 7 of level 0 base-stream-controller.ts:386:15
[log] > [subtitle-stream-controller]: FRAG_LOADING->IDLE base-stream-controller.ts:1777:11
[log] > [subtitle-stream-controller]: Loading fragment 8 cc: 0 of [0-15] track: 0, target: 32 base-stream-controller.ts:743:9
[log] > [subtitle-stream-controller]: IDLE->FRAG_LOADING base-stream-controller.ts:1777:11
[log] > [subtitle-stream-controller]: Loaded fragment 8 of level 0 base-stream-controller.ts:386:15
[log] > [subtitle-stream-controller]: FRAG_LOADING->IDLE base-stream-controller.ts:1777:11
[log] > [subtitle-stream-controller]: Loading fragment 9 cc: 0 of [0-15] track: 0, target: 36 base-stream-controller.ts:743:9
[log] > [subtitle-stream-controller]: IDLE->FRAG_LOADING base-stream-controller.ts:1777:11
[log] > [subtitle-stream-controller]: Loaded fragment 9 of level 0 base-stream-controller.ts:386:15
[log] > [subtitle-stream-controller]: FRAG_LOADING->IDLE base-stream-controller.ts:1777:11
[log] > [subtitle-stream-controller]: Loading fragment 10 cc: 0 of [0-15] track: 0, target: 40 base-stream-controller.ts:743:9
[log] > [subtitle-stream-controller]: IDLE->FRAG_LOADING base-stream-controller.ts:1777:11
[log] > [subtitle-stream-controller]: Loaded fragment 10 of level 0 base-stream-controller.ts:386:15
[log] > [subtitle-stream-controller]: FRAG_LOADING->IDLE base-stream-controller.ts:1777:11
[log] > [audio-track-controller]: Switching to audio-track 1 "stream_4" lang:de group:default-audio-group audio-track-controller.ts:195:9
[log] > [audio-stream-controller]: Reset loading state base-stream-controller.ts:1631:9
[log] > [audio-stream-controller]: ENDED->IDLE base-stream-controller.ts:1777:11
[log] > [audio-stream-controller]: IDLE->WAITING_TRACK base-stream-controller.ts:1777:11
[log] > [audio-track-controller]: loading audio-track playlist 1 "stream_4" lang:de group:default-audio-group audio-track-controller.ts:273:11
[log] > [audio-track-controller]: audio-track 1 "stream_4" lang:de group:default-audio-group loaded [0-14] audio-track-controller.ts:90:9
[log] > [audio-stream-controller]: Track 1 loaded [0,14][part-14--1],duration:59.221 audio-stream-controller.ts:497:9
[log] > [audio-stream-controller]: WAITING_TRACK->IDLE base-stream-controller.ts:1777:11
[log] > [audio-stream-controller]: Loading fragment initSegment cc: 0 of [0-14] track: 1, target: 0 base-stream-controller.ts:743:9
[log] > [audio-stream-controller]: IDLE->FRAG_LOADING base-stream-controller.ts:1777:11
[log] > [audio-stream-controller]: FRAG_LOADING->IDLE base-stream-controller.ts:1777:11
[log] > [audio-stream-controller]: Buffered audio sn: initSegment of track 1 (frag:[NaN-NaN] > buffer:[0.000-60.000]) base-stream-controller.ts:572:9
[log] > [audio-stream-controller]: Loading fragment 1 cc: 0 of [0-14] track: 1, target: 4.951 base-stream-controller.ts:743:9
[log] > [audio-stream-controller]: IDLE->FRAG_LOADING base-stream-controller.ts:1777:11
[log] > [transmuxer-interface, audio]: Starting new transmux session for sn: 1 p: -1 level: 1 id: 1
        discontinuity: false
        trackSwitch: true
        contiguous: false
        accurateTimeOffset: false
        timeOffset: 3.243
        initSegmentChange: true hls.js:14939:16
[log] > [audio-stream-controller]: Loaded fragment 1 of level 1 base-stream-controller.ts:386:15
[log] > [audio-stream-controller]: FRAG_LOADING->PARSING base-stream-controller.ts:1777:11
[log] > [audio-stream-controller]: Switching audio track : flushing all audio hls.js:17752:14
[log] > [buffer-controller]: Removing [0,60] from the audio SourceBuffer hls.js:19549:16
[log] > [audio-stream-controller]: Init audio buffer, container:audio/mp4, codecs[parsed]=[mp4a.40.2] hls.js:17707:12
[log] > [transmuxer.ts]: Flushed fragment 1 of level 1 transmuxer-interface.ts:379:36
[log] > [audio-stream-controller]: PARSING->PARSED base-stream-controller.ts:1777:11
[log] > [audio-stream-controller]: Buffered audio sn: 1 of track 1 (frag:[4.021-8.010] > buffer:[4.021-8.010]) base-stream-controller.ts:572:9
[log] > [audio-stream-controller]: PARSED->IDLE base-stream-controller.ts:1777:11
[log] > [audio-stream-controller]: Loading fragment 2 cc: 0 of [0-14] track: 1, target: 8.01 base-stream-controller.ts:743:9
[log] > [audio-stream-controller]: IDLE->FRAG_LOADING base-stream-controller.ts:1777:11
[log] > [audio-stream-controller]: Loaded fragment 2 of level 1 base-stream-controller.ts:386:15
[log] > [audio-stream-controller]: FRAG_LOADING->PARSING base-stream-controller.ts:1777:11
[log] > [transmuxer.ts]: Flushed fragment 2 of level 1 transmuxer-interface.ts:379:36
[log] > [audio-stream-controller]: PARSING->PARSED base-stream-controller.ts:1777:11
[log] > [audio-stream-controller]: Buffered audio sn: 2 of track 1 (frag:[8.010-12.021] > buffer:[4.021-12.021]) base-stream-controller.ts:572:9
[log] > [audio-stream-controller]: PARSED->IDLE base-stream-controller.ts:1777:11
[log] > [audio-stream-controller]: Loading fragment 3 cc: 0 of [0-14] track: 1, target: 12.021 base-stream-controller.ts:743:9
[log] > [audio-stream-controller]: IDLE->FRAG_LOADING base-stream-controller.ts:1777:11
[log] > [audio-stream-controller]: Loaded fragment 3 of level 1 base-stream-controller.ts:386:15
[log] > [audio-stream-controller]: FRAG_LOADING->PARSING base-stream-controller.ts:1777:11
[log] > [transmuxer.ts]: Flushed fragment 3 of level 1 transmuxer-interface.ts:379:36
[log] > [audio-stream-controller]: PARSING->PARSED base-stream-controller.ts:1777:11
[log] > [audio-stream-controller]: Buffered audio sn: 3 of track 1 (frag:[12.021-16.010] > buffer:[4.021-16.010]) base-stream-controller.ts:572:9
[log] > [audio-stream-controller]: PARSED->IDLE base-stream-controller.ts:1777:11
[log] > [audio-stream-controller]: Loading fragment 4 cc: 0 of [0-14] track: 1, target: 16.01 base-stream-controller.ts:743:9
[log] > [audio-stream-controller]: IDLE->FRAG_LOADING base-stream-controller.ts:1777:11
[log] > [audio-stream-controller]: Loaded fragment 4 of level 1 base-stream-controller.ts:386:15
[log] > [audio-stream-controller]: FRAG_LOADING->PARSING base-stream-controller.ts:1777:11
[log] > [transmuxer.ts]: Flushed fragment 4 of level 1 transmuxer-interface.ts:379:36
[log] > [audio-stream-controller]: PARSING->PARSED base-stream-controller.ts:1777:11
[log] > [audio-stream-controller]: Buffered audio sn: 4 of track 1 (frag:[16.010-20.021] > buffer:[4.021-20.021]) base-stream-controller.ts:572:9
[log] > [audio-stream-controller]: PARSED->IDLE base-stream-controller.ts:1777:11
[log] > [audio-stream-controller]: Loading fragment 5 cc: 0 of [0-14] track: 1, target: 20.021 base-stream-controller.ts:743:9
[log] > [audio-stream-controller]: IDLE->FRAG_LOADING base-stream-controller.ts:1777:11
[log] > [audio-stream-controller]: Loaded fragment 5 of level 1 base-stream-controller.ts:386:15
[log] > [audio-stream-controller]: FRAG_LOADING->PARSING base-stream-controller.ts:1777:11
[log] > [transmuxer.ts]: Flushed fragment 5 of level 1 transmuxer-interface.ts:379:36
[log] > [audio-stream-controller]: PARSING->PARSED base-stream-controller.ts:1777:11
[log] > [audio-stream-controller]: Buffered audio sn: 5 of track 1 (frag:[20.021-24.010] > buffer:[4.021-24.010]) base-stream-controller.ts:572:9
[log] > [audio-stream-controller]: PARSED->IDLE base-stream-controller.ts:1777:11
[log] > [audio-stream-controller]: Loading fragment 6 cc: 0 of [0-14] track: 1, target: 24.01 base-stream-controller.ts:743:9
[log] > [audio-stream-controller]: IDLE->FRAG_LOADING base-stream-controller.ts:1777:11
[log] > [audio-stream-controller]: Loaded fragment 6 of level 1 base-stream-controller.ts:386:15
[log] > [audio-stream-controller]: FRAG_LOADING->PARSING base-stream-controller.ts:1777:11
[log] > [transmuxer.ts]: Flushed fragment 6 of level 1 transmuxer-interface.ts:379:36
[log] > [audio-stream-controller]: PARSING->PARSED base-stream-controller.ts:1777:11
[log] > [audio-stream-controller]: Buffered audio sn: 6 of track 1 (frag:[24.010-28.021] > buffer:[4.021-28.021]) base-stream-controller.ts:572:9
[log] > [audio-stream-controller]: PARSED->IDLE base-stream-controller.ts:1777:11
[log] > [audio-stream-controller]: Loading fragment 7 cc: 0 of [0-14] track: 1, target: 28.021 base-stream-controller.ts:743:9
[log] > [audio-stream-controller]: IDLE->FRAG_LOADING base-stream-controller.ts:1777:11
[log] > [audio-stream-controller]: Loaded fragment 7 of level 1 base-stream-controller.ts:386:15
[log] > [audio-stream-controller]: FRAG_LOADING->PARSING base-stream-controller.ts:1777:11
[log] > [transmuxer.ts]: Flushed fragment 7 of level 1 transmuxer-interface.ts:379:36
[log] > [audio-stream-controller]: PARSING->PARSED base-stream-controller.ts:1777:11
[log] > [audio-stream-controller]: Buffered audio sn: 7 of track 1 (frag:[28.021-32.010] > buffer:[4.021-32.010]) base-stream-controller.ts:572:9
[log] > [audio-stream-controller]: PARSED->IDLE base-stream-controller.ts:1777:11
[log] > [audio-stream-controller]: Loading fragment 8 cc: 0 of [0-14] track: 1, target: 32.01 base-stream-controller.ts:743:9
[log] > [audio-stream-controller]: IDLE->FRAG_LOADING base-stream-controller.ts:1777:11
[log] > [audio-stream-controller]: Loaded fragment 8 of level 1 base-stream-controller.ts:386:15
[log] > [audio-stream-controller]: FRAG_LOADING->PARSING base-stream-controller.ts:1777:11
[log] > [transmuxer.ts]: Flushed fragment 8 of level 1 transmuxer-interface.ts:379:36
[log] > [audio-stream-controller]: PARSING->PARSED base-stream-controller.ts:1777:11
[log] > [audio-stream-controller]: Buffered audio sn: 8 of track 1 (frag:[32.010-36.021] > buffer:[4.021-36.021]) base-stream-controller.ts:572:9
[log] > [audio-stream-controller]: PARSED->IDLE base-stream-controller.ts:1777:11
[log] > [audio-stream-controller]: Loading fragment 9 cc: 0 of [0-14] track: 1, target: 36.021 base-stream-controller.ts:743:9
[log] > [audio-stream-controller]: IDLE->FRAG_LOADING base-stream-controller.ts:1777:11
[log] > [audio-stream-controller]: Loaded fragment 9 of level 1 base-stream-controller.ts:386:15
[log] > [audio-stream-controller]: FRAG_LOADING->PARSING base-stream-controller.ts:1777:11
[log] > [transmuxer.ts]: Flushed fragment 9 of level 1 transmuxer-interface.ts:379:36
[log] > [audio-stream-controller]: PARSING->PARSED base-stream-controller.ts:1777:11
[log] > [audio-stream-controller]: Buffered audio sn: 9 of track 1 (frag:[36.021-40.010] > buffer:[4.021-40.010]) base-stream-controller.ts:572:9
[log] > [audio-stream-controller]: PARSED->IDLE base-stream-controller.ts:1777:11
[log] > [audio-stream-controller]: Loading fragment 10 cc: 0 of [0-14] track: 1, target: 40.01 base-stream-controller.ts:743:9
[log] > [audio-stream-controller]: IDLE->FRAG_LOADING base-stream-controller.ts:1777:11
[log] > [audio-stream-controller]: Loaded fragment 10 of level 1 base-stream-controller.ts:386:15
[log] > [audio-stream-controller]: FRAG_LOADING->PARSING base-stream-controller.ts:1777:11
[log] > [transmuxer.ts]: Flushed fragment 10 of level 1 transmuxer-interface.ts:379:36
[log] > [audio-stream-controller]: PARSING->PARSED base-stream-controller.ts:1777:11
[log] > [audio-stream-controller]: Buffered audio sn: 10 of track 1 (frag:[40.010-44.021] > buffer:[4.021-44.021]) base-stream-controller.ts:572:9
[log] > [audio-stream-controller]: PARSED->IDLE base-stream-controller.ts:1777:11
[log] > [audio-stream-controller]: Loading fragment 11 cc: 0 of [0-14] track: 1, target: 44.021 base-stream-controller.ts:743:9
[log] > [audio-stream-controller]: IDLE->FRAG_LOADING base-stream-controller.ts:1777:11
[log] > [audio-stream-controller]: Loaded fragment 11 of level 1 base-stream-controller.ts:386:15
[log] > [audio-stream-controller]: FRAG_LOADING->PARSING base-stream-controller.ts:1777:11
[log] > [transmuxer.ts]: Flushed fragment 11 of level 1 transmuxer-interface.ts:379:36
[log] > [audio-stream-controller]: PARSING->PARSED base-stream-controller.ts:1777:11
[log] > [audio-stream-controller]: Buffered audio sn: 11 of track 1 (frag:[44.021-48.010] > buffer:[4.021-48.010]) base-stream-controller.ts:572:9
[log] > [audio-stream-controller]: PARSED->IDLE base-stream-controller.ts:1777:11
[log] > [audio-stream-controller]: Loading fragment 12 cc: 0 of [0-14] track: 1, target: 48.01 base-stream-controller.ts:743:9
[log] > [audio-stream-controller]: IDLE->FRAG_LOADING base-stream-controller.ts:1777:11
[log] > [audio-stream-controller]: Loaded fragment 12 of level 1 base-stream-controller.ts:386:15
[log] > [audio-stream-controller]: FRAG_LOADING->PARSING base-stream-controller.ts:1777:11
[log] > [transmuxer.ts]: Flushed fragment 12 of level 1 transmuxer-interface.ts:379:36
[log] > [audio-stream-controller]: PARSING->PARSED base-stream-controller.ts:1777:11
[log] > [audio-stream-controller]: Buffered audio sn: 12 of track 1 (frag:[48.010-52.021] > buffer:[4.021-52.021]) base-stream-controller.ts:572:9
[log] > [audio-stream-controller]: PARSED->IDLE base-stream-controller.ts:1777:11
[log] > [audio-stream-controller]: Loading fragment 13 cc: 0 of [0-14] track: 1, target: 52.021 base-stream-controller.ts:743:9
[log] > [audio-stream-controller]: IDLE->FRAG_LOADING base-stream-controller.ts:1777:11
[log] > [audio-stream-controller]: Loaded fragment 13 of level 1 base-stream-controller.ts:386:15
[log] > [audio-stream-controller]: FRAG_LOADING->PARSING base-stream-controller.ts:1777:11
[log] > [transmuxer.ts]: Flushed fragment 13 of level 1 transmuxer-interface.ts:379:36
[log] > [audio-stream-controller]: PARSING->PARSED base-stream-controller.ts:1777:11
[log] > [audio-stream-controller]: Buffered audio sn: 13 of track 1 (frag:[52.021-56.010] > buffer:[4.021-56.010]) base-stream-controller.ts:572:9
[log] > [audio-stream-controller]: PARSED->IDLE base-stream-controller.ts:1777:11
[log] > [audio-stream-controller]: Loading fragment 14 cc: 0 of [0-14] track: 1, target: 56.01 base-stream-controller.ts:743:9
[log] > [audio-stream-controller]: IDLE->FRAG_LOADING base-stream-controller.ts:1777:11
[log] > [audio-stream-controller]: Loaded fragment 14 of level 1 base-stream-controller.ts:386:15
[log] > [audio-stream-controller]: FRAG_LOADING->PARSING base-stream-controller.ts:1777:11
[log] > [transmuxer.ts]: Flushed fragment 14 of level 1 transmuxer-interface.ts:379:36
[log] > [audio-stream-controller]: PARSING->PARSED base-stream-controller.ts:1777:11
[log] > [audio-stream-controller]: Buffered audio sn: 14 of track 1 (frag:[56.010-59.999] > buffer:[4.021-59.999]) base-stream-controller.ts:572:9
[log] > [audio-stream-controller]: PARSED->IDLE base-stream-controller.ts:1777:11
[log] > [buffer-controller]: audio sourceBuffer now EOS buffer-controller.ts:544:17
[log] > [buffer-controller]: Queueing mediaSource.endOfStream() buffer-controller.ts:551:13
[log] > [audio-stream-controller]: IDLE->ENDED base-stream-controller.ts:1777:11
[log] > [buffer-controller]: Calling mediaSource.endOfStream() buffer-controller.ts:568:15
[log] > [buffer-controller]: Media source ended buffer-controller.ts:819:11
[log] > [subtitle-stream-controller]: Loading fragment 11 cc: 0 of [0-15] track: 0, target: 44 base-stream-controller.ts:743:9
[log] > [subtitle-stream-controller]: IDLE->FRAG_LOADING base-stream-controller.ts:1777:11
[log] > [subtitle-stream-controller]: Loaded fragment 11 of level 0 base-stream-controller.ts:386:15
[log] > [subtitle-stream-controller]: FRAG_LOADING->IDLE base-stream-controller.ts:1777:11
[log] > [subtitle-stream-controller]: Loading fragment 12 cc: 0 of [0-15] track: 0, target: 48 base-stream-controller.ts:743:9
[log] > [subtitle-stream-controller]: IDLE->FRAG_LOADING base-stream-controller.ts:1777:11
[log] > [subtitle-stream-controller]: Loaded fragment 12 of level 0 base-stream-controller.ts:386:15
[log] > [subtitle-stream-controller]: FRAG_LOADING->IDLE base-stream-controller.ts:1777:11
[log] > [subtitle-stream-controller]: Loading fragment 13 cc: 0 of [0-15] track: 0, target: 52 base-stream-controller.ts:743:9
[log] > [subtitle-stream-controller]: IDLE->FRAG_LOADING base-stream-controller.ts:1777:11
[log] > [subtitle-stream-controller]: Loaded fragment 13 of level 0 base-stream-controller.ts:386:15
[log] > [subtitle-stream-controller]: FRAG_LOADING->IDLE base-stream-controller.ts:1777:11
[log] > [subtitle-stream-controller]: Loading fragment 14 cc: 0 of [0-15] track: 0, target: 56 base-stream-controller.ts:743:9
[log] > [subtitle-stream-controller]: IDLE->FRAG_LOADING base-stream-controller.ts:1777:11
[log] > [subtitle-stream-controller]: Loaded fragment 14 of level 0 base-stream-controller.ts:386:15
[log] > [subtitle-stream-controller]: FRAG_LOADING->IDLE base-stream-controller.ts:1777:11
[log] > [subtitle-stream-controller]: Loading fragment 15 cc: 0 of [0-15] track: 0, target: 60 base-stream-controller.ts:743:9
[log] > [subtitle-stream-controller]: IDLE->FRAG_LOADING base-stream-controller.ts:1777:11
[log] > [subtitle-stream-controller]: Loaded fragment 15 of level 0 base-stream-controller.ts:386:15
[log] > [subtitle-stream-controller]: FRAG_LOADING->IDLE base-stream-controller.ts:1777:11

Chrome media internals output

No response

niklaskorz avatar Oct 05 '23 08:10 niklaskorz

Firefox 118.0.1 (arm64) on macOS Sonoma 14.0 behaves exactly the same as in the video above.

niklaskorz avatar Oct 05 '23 10:10 niklaskorz

Hi @niklaskorz,

If you want to emulate the behavior of Shaka-player, set the playbackRate to 0 until buffered, then set it back to 1.

As a policy, HLS.js tries not to interfere with media element control, with the exception of seeking when necessary (start position, over gaps, and nudging on stall).

Maybe a seek following audio flush would do the trick? (currentTime = currentTime)

robwalch avatar Oct 05 '23 14:10 robwalch

@robwalch Unfortunately neither approach seems to help here. I do agree something "weird" is happening internally in Firefox, as the buffer range removal is executed successfully and updateend is called as well while the old audio still continues playing. I'm currently digging through Firefox' SourceBuffer C++ implementation, as well as trying to understand what shaka does differently here (if at all). Please leave this issue open until we have figured out if there is anything that can be done differently here on HLS.js's side, or if this is something to be fixed on Gecko's side.

niklaskorz avatar Oct 06 '23 10:10 niklaskorz

Looks like dash.js behaves exactly the same as hls.js for this scenario on Firefox on both Windows and macOS. Only shaka-player somehow manages to avoid this problem...

niklaskorz avatar Oct 06 '23 10:10 niklaskorz

shaka-player is indeed performing a seek to work around this, you were right @robwalch! :) It's peformed here and appears to be a workaround for Chromecast that just happens to be needed for Firefox as well. Setting currentTime = currentTime is not enough though, but setting currentTime -= 0.001 as response to the Hls.Events.BUFFER_FLUSHED event does the trick.

If I understood correctly, you don't want this workaround to be part of hls.js itself, but do you think we could include this somewhere in the documentation?

niklaskorz avatar Oct 06 '23 10:10 niklaskorz

For reference if anyone else runs into this issue, here is the full workaround I am applying now:

import Hls, { Events, BufferFlushingData, BufferFlushedData } from 'hls.js';

class HlsPlayer {
  waitingForBufferFlush = false;

  // ...

  constructor(private video: HTMLMediaElement) {
    this.hls = new Hls(...);
    this.hls.attachMedia(this.video);
    this.hls.on(Events.BUFFER_FLUSHING, this.onBufferFlushing);
    this.hls.on(Events.BUFFER_FLUSHED, this.onBufferFlushed);
    // ...
  }

  onBufferFlushing = (e: Events.BUFFER_FLUSHING, data: BufferFlushingData) => {
    // Only wait for flush if this is the main buffer
    if (
      data.startOffset <= this.video.currentTime &&
      data.endOffset >= this.video.currentTime
    ) {
      this.waitingForBufferFlush = true;
      // This causes the video to show a buffering state until flushing is finished
      this.video.playbackRate = 0;
    }
  };

  onBufferFlushed = (e: Events.BUFFER_FLUSHED, data: BufferFlushedData) => {
    if (this.waitingForBufferFlush) {
      this.waitingForBufferFlush = false;
      this.video.playbackRate = 1;
      // Seeking is required to flush the low-level playback buffers
      this.video.currentTime -= 0.001;
    }
  };

  // ...
}

niklaskorz avatar Oct 06 '23 11:10 niklaskorz

[...] do you think we could include this somewhere in the documentation?

Yes. Would you consider updating API.md under setting audioTrack?

For reference if anyone else runs into this issue, here is the full workaround I am applying now:

I don't think you should adjust the rate and/or seek for every flush event (there are other reasons the buffer is flushed). I suggest using AUDIO_TRACK_SWITCHING and comparing last / current track name or language before choosing to wait for BUFFER_FLUSHED.

robwalch avatar Oct 06 '23 19:10 robwalch

@niklaskorz,

shaka-player is indeed performing a seek to work around this, you were right @robwalch! :) It's peformed here and appears to be a workaround for Chromecast that just happens to be needed for Firefox as well. Setting currentTime = currentTime is not enough though, but setting currentTime -= 0.001 as response to the Hls.Events.BUFFER_FLUSHED event does the trick.

If I understood correctly, you don't want this workaround to be part of hls.js itself, but do you think we could include this somewhere in the documentation?

I think we could add the seek change to flush the pipeline when the audio buffer is emptied (perhaps with recognition that the last appended track does not match the current one). Marking this for 1.6 which may also include enhancements to seeking over small buffer gaps. This is also needed because the player stalls thanks to similar pipeline state where playback is not recognizing that it crossed over buffered ranges without a seek.

robwalch avatar Oct 09 '23 18:10 robwalch