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

Reloading same URL using loadSource fails with errors #4621

Closed
5 tasks done
naktinis opened this issue Mar 29, 2022 · 10 comments
Closed
5 tasks done

Reloading same URL using loadSource fails with errors #4621

naktinis opened this issue Mar 29, 2022 · 10 comments
Labels
Bug Works in latest The issue reported has already been fixed and works as expected in the latest release

Comments

@naktinis
Copy link

What version of Hls.js are you using?

1.1.5

What browser (including version) are you using?

Chrome 99.0.4844.83 (Official Build) (x86_64)

What OS (including version) are you using?

macOS 12.3

Test stream

https://gist.githack.com/naktinis/832f23419b4a90a5b0e3756227d32d04/raw/6a1dc4acd0440cd9ae4339d4e7a997d909251d70/hls-reload.html

Configuration

{
  debug: true,
  testBandwidth: false,
  abrEwmaDefaultEstimate: 4500000,
  startLevel: -1,
}

Additional player setup steps

No response

Checklist

Steps to reproduce

  1. Load the manifest multiple times with the same Hls instance.

Expected behaviour

The player should reload without errors and choose the quality that matches the estimated bandwidth.

What actually happened?

The player produces errors:

  1. [warn] > [buffer-controller]: Failed to reset the video buffer DOMException: Failed to execute 'removeSourceBuffer' on 'MediaSource': The SourceBuffer provided is not contained in this MediaSource.
  2. [audio-stream-controller]: Error: init load aborted

Sometimes it still loads after a while, but when it does, it drops the quality initially (for the first fragment or so), and then recovers. Initial load after page refresh always serves the higher quality on my connection, so it really seems to have to do with these errors.

Console output

hls.ts:310 [log] > attachMedia
buffer-controller.ts:742 [log] > [buffer-controller]: Media source opened
base-stream-controller.ts:1381 [log] > [subtitle-stream-controller]: STOPPED->IDLE
hls.ts:371 [log] > stopLoad
base-stream-controller.ts:1381 [log] > [subtitle-stream-controller]: IDLE->STOPPED
hls.ts:339 [log] > loadSource:https://cdn.muse.ai/w/eefda2e5553e95a62784a066b8c31dd5c5d6c3555cce3b38c5c4728604ac96ed/videos/hls.m3u8
stream-controller.ts:539 [log] > [stream-controller]: Trigger BUFFER_RESET
level-controller.ts:172 [log] > [level-controller]: manifest loaded, 10 level(s) found, first bitrate: 468219
buffer-controller.ts:136 [log] > 2 bufferCodec event(s) expected
hls.ts:361 [log] > startLoad(-1)
level-controller.ts:251 [log] > [level-controller]: switching to level 5 from -1
audio-track-controller.ts:134 [log] > [audio-track-controller]: Updating audio tracks, 1 track(s) found in "audio-1" group-id
audio-track-controller.ts:185 [log] > [audio-track-controller]: Now switching to audio-track index 0
base-stream-controller.ts:1381 [log] > [audio-stream-controller]: STOPPED->IDLE
base-stream-controller.ts:1381 [log] > [audio-stream-controller]: IDLE->WAITING_TRACK
level-controller.ts:524 [log] > [level-controller]: Attempt loading level index 5 with URL-id 0 https://cdn.muse.ai/w/eefda2e5553e95a62784a066b8c31dd5c5d6c3555cce3b38c5c4728604ac96ed/videos/hls-video-2.m3u8
base-stream-controller.ts:1381 [log] > [stream-controller]: STOPPED->IDLE
audio-track-controller.ts:258 [log] > [audio-track-controller]: loading audio-track playlist for id: 0
base-stream-controller.ts:1381 [log] > [audio-stream-controller]: WAITING_TRACK->STOPPED
base-stream-controller.ts:1381 [log] > [audio-stream-controller]: STOPPED->WAITING_TRACK
base-stream-controller.ts:1381 [log] > [subtitle-stream-controller]: STOPPED->IDLE
audio-track-controller.ts:87 [log] > [audio-track-controller]: audioTrack 0 loaded [0-57]
audio-stream-controller.ts:425 [log] > [audio-stream-controller]: Track 0 loaded [0,57],duration:287.9269999999999
base-stream-controller.ts:1381 [log] > [audio-stream-controller]: WAITING_TRACK->IDLE
base-stream-controller.ts:588 [log] > [audio-stream-controller]: Loading fragment initSegment cc: 0 track: 0, target: 0
base-stream-controller.ts:1381 [log] > [audio-stream-controller]: IDLE->FRAG_LOADING
stream-controller.ts:603 [log] > [stream-controller]: Level 5 loaded [0,57], cc [0, 0] duration:287.933
buffer-controller.ts:635 [log] > [buffer-controller]: Updating Media Source duration to 287.933
base-stream-controller.ts:588 [log] > [stream-controller]: Loading fragment initSegment cc: 0 level: 5, target: 0
base-stream-controller.ts:1381 [log] > [stream-controller]: IDLE->FRAG_LOADING
base-stream-controller.ts:1381 [log] > [audio-stream-controller]: FRAG_LOADING->IDLE
base-stream-controller.ts:499 [log] > [audio-stream-controller]: Buffered audio sn: initSegment of track 0 
base-stream-controller.ts:588 [log] > [audio-stream-controller]: Loading fragment 0 cc: 0 of [0-57] track: 0, target: 0
base-stream-controller.ts:1381 [log] > [audio-stream-controller]: IDLE->FRAG_LOADING
base-stream-controller.ts:1381 [log] > [stream-controller]: FRAG_LOADING->IDLE
base-stream-controller.ts:499 [log] > [stream-controller]: Buffered main sn: initSegment of level 5 
base-stream-controller.ts:588 [log] > [stream-controller]: Loading fragment 0 cc: 0 of [0-57] level: 5, target: 0
base-stream-controller.ts:1381 [log] > [stream-controller]: IDLE->FRAG_LOADING
transmuxer-interface.ts:67 [log] > demuxing in webworker
audio-stream-controller.ts:532 [log] > Unknown video PTS for cc 0, waiting for video PTS before demuxing audio frag 0 of [0 ,57],track 0
base-stream-controller.ts:1381 [log] > [audio-stream-controller]: FRAG_LOADING->WAITING_INIT_PTS
base-stream-controller.ts:364 [log] > [audio-stream-controller]: Loaded fragment 0 of level 0
blob:null/79335444-c6bb-46e8-b466-837ce59305aa:603 [log] >
transmuxer-interface.ts:67 [log] > demuxing in webworker
transmuxer-interface.ts:187 [log] > [transmuxer-interface, main]: Starting new transmux session for sn: 0 p: -1 level: 5 id: 1
        discontinuity: true
        trackSwitch: true
        contiguous: false
        accurateTimeOffset: true
        timeOffset: 0
        initSegmentChange: true
base-stream-controller.ts:364 [log] > [stream-controller]: Loaded fragment 0 of level 5
blob:null/8c242804-138b-48eb-93fd-047f8667414f:603 [log] >
blob:null/8c242804-138b-48eb-93fd-047f8667414f:938 [log] > [transmuxer.ts]: Flushed fragment 0 of level 5
base-stream-controller.ts:1381 [log] > [stream-controller]: FRAG_LOADING->PARSING
stream-controller.ts:1226 [log] > [stream-controller]: Init video buffer, container:video/mp4, codecs[level/parsed]=[avc1.64001f/avc1.64001f]
audio-stream-controller.ts:113 [log] > [audio-stream-controller]: InitPTS for cc: 0 found from main: 0
base-stream-controller.ts:1381 [log] > [audio-stream-controller]: WAITING_INIT_PTS->FRAG_LOADING
transmuxer-interface.ts:187 [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
base-stream-controller.ts:1381 [log] > [stream-controller]: PARSING->PARSED
blob:null/79335444-c6bb-46e8-b466-837ce59305aa:938 [log] > [transmuxer.ts]: Flushed fragment 0 of level 0
base-stream-controller.ts:1381 [log] > [audio-stream-controller]: FRAG_LOADING->PARSING
audio-stream-controller.ts:812 [log] > [audio-stream-controller]: Switching audio track : flushing all audio
audio-stream-controller.ts:760 [log] > [audio-stream-controller]: Init audio buffer, container:audio/mp4, codecs[parsed]=[mp4a.40.2]
buffer-controller.ts:704 [log] > [buffer-controller]: creating sourceBuffer(video/mp4;codecs=avc1.64001f)
buffer-controller.ts:704 [log] > [buffer-controller]: creating sourceBuffer(audio/mp4;codecs=mp4a.40.2)
stream-controller.ts:809 [log] > [stream-controller]: Alternate track found, use video.buffered to schedule main fragment loading
buffer-controller.ts:816 [log] > [buffer-controller]: Removing [0,287.933] from the audio SourceBuffer
base-stream-controller.ts:1381 [log] > [audio-stream-controller]: PARSING->PARSED
base-stream-controller.ts:499 [log] > [stream-controller]: Buffered main sn: 0 of level 5 [0.000,5.000]
base-stream-controller.ts:1381 [log] > [stream-controller]: PARSED->IDLE
level-controller.ts:251 [log] > [level-controller]: switching to level 7 from 5
level-controller.ts:524 [log] > [level-controller]: Attempt loading level index 7 with URL-id 0 https://cdn.muse.ai/w/eefda2e5553e95a62784a066b8c31dd5c5d6c3555cce3b38c5c4728604ac96ed/videos/hls-video-3.m3u8
base-stream-controller.ts:1381 [log] > [stream-controller]: IDLE->WAITING_LEVEL
base-stream-controller.ts:499 [log] > [audio-stream-controller]: Buffered audio sn: 0 of track 0 [0.000,5.020]
base-stream-controller.ts:1381 [log] > [audio-stream-controller]: PARSED->IDLE
base-stream-controller.ts:588 [log] > [audio-stream-controller]: Loading fragment 1 cc: 0 of [0-57] track: 0, target: 5.035
base-stream-controller.ts:1381 [log] > [audio-stream-controller]: IDLE->FRAG_LOADING
stream-controller.ts:603 [log] > [stream-controller]: Level 7 loaded [0,57], cc [0, 0] duration:287.933
base-stream-controller.ts:1381 [log] > [stream-controller]: WAITING_LEVEL->IDLE
base-stream-controller.ts:588 [log] > [stream-controller]: Loading fragment initSegment cc: 0 level: 7, target: 0
base-stream-controller.ts:1381 [log] > [stream-controller]: IDLE->FRAG_LOADING
base-stream-controller.ts:364 [log] > [audio-stream-controller]: Loaded fragment 1 of level 0
blob:null/79335444-c6bb-46e8-b466-837ce59305aa:938 [log] > [transmuxer.ts]: Flushed fragment 1 of level 0
base-stream-controller.ts:1381 [log] > [audio-stream-controller]: FRAG_LOADING->PARSING
base-stream-controller.ts:1381 [log] > [audio-stream-controller]: PARSING->PARSED
base-stream-controller.ts:499 [log] > [audio-stream-controller]: Buffered audio sn: 1 of track 0 [0.000,10.012]
base-stream-controller.ts:1381 [log] > [audio-stream-controller]: PARSED->IDLE
base-stream-controller.ts:588 [log] > [audio-stream-controller]: Loading fragment 2 cc: 0 of [0-57] track: 0, target: 10.027
base-stream-controller.ts:1381 [log] > [audio-stream-controller]: IDLE->FRAG_LOADING
base-stream-controller.ts:1381 [log] > [stream-controller]: FRAG_LOADING->IDLE
base-stream-controller.ts:499 [log] > [stream-controller]: Buffered main sn: initSegment of level 7 [0.000,5.000]
base-stream-controller.ts:588 [log] > [stream-controller]: Loading fragment 1 cc: 0 of [0-57] level: 7, target: 5
base-stream-controller.ts:1381 [log] > [stream-controller]: IDLE->FRAG_LOADING
base-stream-controller.ts:364 [log] > [audio-stream-controller]: Loaded fragment 2 of level 0
blob:null/79335444-c6bb-46e8-b466-837ce59305aa:938 [log] > [transmuxer.ts]: Flushed fragment 2 of level 0
base-stream-controller.ts:1381 [log] > [audio-stream-controller]: FRAG_LOADING->PARSING
base-stream-controller.ts:1381 [log] > [audio-stream-controller]: PARSING->PARSED
base-stream-controller.ts:499 [log] > [audio-stream-controller]: Buffered audio sn: 2 of track 0 [0.000,15.004]
base-stream-controller.ts:1381 [log] > [audio-stream-controller]: PARSED->IDLE
base-stream-controller.ts:588 [log] > [audio-stream-controller]: Loading fragment 3 cc: 0 of [0-57] track: 0, target: 15.019
base-stream-controller.ts:1381 [log] > [audio-stream-controller]: IDLE->FRAG_LOADING
base-stream-controller.ts:364 [log] > [audio-stream-controller]: Loaded fragment 3 of level 0
blob:null/79335444-c6bb-46e8-b466-837ce59305aa:938 [log] > [transmuxer.ts]: Flushed fragment 3 of level 0
base-stream-controller.ts:1381 [log] > [audio-stream-controller]: FRAG_LOADING->PARSING
base-stream-controller.ts:1381 [log] > [audio-stream-controller]: PARSING->PARSED
base-stream-controller.ts:499 [log] > [audio-stream-controller]: Buffered audio sn: 3 of track 0 [0.000,20.018]
base-stream-controller.ts:1381 [log] > [audio-stream-controller]: PARSED->IDLE
base-stream-controller.ts:588 [log] > [audio-stream-controller]: Loading fragment 4 cc: 0 of [0-57] track: 0, target: 20.032
base-stream-controller.ts:1381 [log] > [audio-stream-controller]: IDLE->FRAG_LOADING
base-stream-controller.ts:364 [log] > [audio-stream-controller]: Loaded fragment 4 of level 0
blob:null/79335444-c6bb-46e8-b466-837ce59305aa:938 [log] > [transmuxer.ts]: Flushed fragment 4 of level 0
base-stream-controller.ts:1381 [log] > [audio-stream-controller]: FRAG_LOADING->PARSING
base-stream-controller.ts:1381 [log] > [audio-stream-controller]: PARSING->PARSED
base-stream-controller.ts:499 [log] > [audio-stream-controller]: Buffered audio sn: 4 of track 0 [0.000,25.010]
base-stream-controller.ts:1381 [log] > [audio-stream-controller]: PARSED->IDLE
base-stream-controller.ts:588 [log] > [audio-stream-controller]: Loading fragment 5 cc: 0 of [0-57] track: 0, target: 25.024
base-stream-controller.ts:1381 [log] > [audio-stream-controller]: IDLE->FRAG_LOADING
base-stream-controller.ts:364 [log] > [audio-stream-controller]: Loaded fragment 5 of level 0
blob:null/79335444-c6bb-46e8-b466-837ce59305aa:938 [log] > [transmuxer.ts]: Flushed fragment 5 of level 0
base-stream-controller.ts:1381 [log] > [audio-stream-controller]: FRAG_LOADING->PARSING
base-stream-controller.ts:1381 [log] > [audio-stream-controller]: PARSING->PARSED
base-stream-controller.ts:499 [log] > [audio-stream-controller]: Buffered audio sn: 5 of track 0 [0.000,30.002]
base-stream-controller.ts:1381 [log] > [audio-stream-controller]: PARSED->IDLE
base-stream-controller.ts:588 [log] > [audio-stream-controller]: Loading fragment 6 cc: 0 of [0-57] track: 0, target: 30.016
base-stream-controller.ts:1381 [log] > [audio-stream-controller]: IDLE->FRAG_LOADING
transmuxer-interface.ts:187 [log] > [transmuxer-interface, main]: Starting new transmux session for sn: 1 p: -1 level: 7 id: 1
        discontinuity: false
        trackSwitch: true
        contiguous: false
        accurateTimeOffset: true
        timeOffset: 5
        initSegmentChange: true
base-stream-controller.ts:364 [log] > [stream-controller]: Loaded fragment 1 of level 7
blob:null/8c242804-138b-48eb-93fd-047f8667414f:938 [log] > [transmuxer.ts]: Flushed fragment 1 of level 7
base-stream-controller.ts:364 [log] > [audio-stream-controller]: Loaded fragment 6 of level 0
blob:null/79335444-c6bb-46e8-b466-837ce59305aa:938 [log] > [transmuxer.ts]: Flushed fragment 6 of level 0
base-stream-controller.ts:1381 [log] > [stream-controller]: FRAG_LOADING->PARSING
stream-controller.ts:1226 [log] > [stream-controller]: Init video buffer, container:video/mp4, codecs[level/parsed]=[avc1.640028/avc1.640028]
base-stream-controller.ts:1381 [log] > [stream-controller]: PARSING->PARSED
base-stream-controller.ts:1381 [log] > [audio-stream-controller]: FRAG_LOADING->PARSING
base-stream-controller.ts:1381 [log] > [audio-stream-controller]: PARSING->PARSED
base-stream-controller.ts:499 [log] > [audio-stream-controller]: Buffered audio sn: 6 of track 0 [0.000,35.015]
base-stream-controller.ts:1381 [log] > [audio-stream-controller]: PARSED->IDLE
base-stream-controller.ts:499 [log] > [stream-controller]: Buffered main sn: 1 of level 7 [0.000,10.000]
base-stream-controller.ts:1381 [log] > [stream-controller]: PARSED->IDLE
level-controller.ts:251 [log] > [level-controller]: switching to level 9 from 7
level-controller.ts:524 [log] > [level-controller]: Attempt loading level index 9 with URL-id 0 https://cdn.muse.ai/w/eefda2e5553e95a62784a066b8c31dd5c5d6c3555cce3b38c5c4728604ac96ed/videos/hls-video-4.m3u8
base-stream-controller.ts:1381 [log] > [stream-controller]: IDLE->WAITING_LEVEL
stream-controller.ts:603 [log] > [stream-controller]: Level 9 loaded [0,57], cc [0, 0] duration:287.933
base-stream-controller.ts:1381 [log] > [stream-controller]: WAITING_LEVEL->IDLE
base-stream-controller.ts:588 [log] > [stream-controller]: Loading fragment initSegment cc: 0 level: 9, target: 0
base-stream-controller.ts:1381 [log] > [stream-controller]: IDLE->FRAG_LOADING
base-stream-controller.ts:1381 [log] > [stream-controller]: FRAG_LOADING->IDLE
base-stream-controller.ts:499 [log] > [stream-controller]: Buffered main sn: initSegment of level 9 [0.000,10.000]
base-stream-controller.ts:588 [log] > [stream-controller]: Loading fragment 2 cc: 0 of [0-57] level: 9, target: 10
base-stream-controller.ts:1381 [log] > [stream-controller]: IDLE->FRAG_LOADING
hls.ts:310 [log] > attachMedia
buffer-controller.ts:756 [log] > [buffer-controller]: Media source closed
buffer-controller.ts:742 [log] > [buffer-controller]: Media source opened
buffer-controller.ts:635 [log] > [buffer-controller]: Updating Media Source duration to 287.933
hls.ts:371 [log] > stopLoad
base-stream-controller.ts:1381 [log] > [stream-controller]: FRAG_LOADING->STOPPED
base-stream-controller.ts:1381 [log] > [audio-stream-controller]: IDLE->STOPPED
base-stream-controller.ts:1381 [log] > [subtitle-stream-controller]: IDLE->STOPPED
hls.ts:339 [log] > loadSource:https://cdn.muse.ai/w/eefda2e5553e95a62784a066b8c31dd5c5d6c3555cce3b38c5c4728604ac96ed/videos/hls.m3u8
stream-controller.ts:539 [log] > [stream-controller]: Trigger BUFFER_RESET
buffer-controller.ts:226 [warn] > [buffer-controller]: Failed to reset the video buffer DOMException: Failed to execute 'removeSourceBuffer' on 'MediaSource': The SourceBuffer provided is not contained in this MediaSource.
    at https://cdnjs.cloudflare.com/ajax/libs/hls.js/1.1.5/hls.js:4379:32
    at Array.forEach (<anonymous>)
    at BufferController.onBufferReset (https://cdnjs.cloudflare.com/ajax/libs/hls.js/1.1.5/hls.js:4371:33)
    at EventEmitter.emit (https://cdnjs.cloudflare.com/ajax/libs/hls.js/1.1.5/hls.js:310:33)
    at Hls.emit (https://cdnjs.cloudflare.com/ajax/libs/hls.js/1.1.5/hls.js:17266:26)
    at Hls.trigger (https://cdnjs.cloudflare.com/ajax/libs/hls.js/1.1.5/hls.js:17271:19)
    at StreamController.onManifestLoading (https://cdnjs.cloudflare.com/ajax/libs/hls.js/1.1.5/hls.js:9790:14)
    at EventEmitter.emit (https://cdnjs.cloudflare.com/ajax/libs/hls.js/1.1.5/hls.js:310:33)
    at Hls.emit (https://cdnjs.cloudflare.com/ajax/libs/hls.js/1.1.5/hls.js:17266:26)
    at Hls.trigger (https://cdnjs.cloudflare.com/ajax/libs/hls.js/1.1.5/hls.js:17271:19)
(anonymous) @ buffer-controller.ts:226
onBufferReset @ buffer-controller.ts:213
emit @ index.js:203
emit @ hls.ts:250
trigger @ hls.ts:258
onManifestLoading @ stream-controller.ts:540
emit @ index.js:203
emit @ hls.ts:250
trigger @ hls.ts:258
loadSource @ hls.ts:350
onAttached @ hls-issue.html:16
emit @ index.js:203
emit @ hls.ts:250
trigger @ hls.ts:258
BufferController._onMediaSourceOpen @ buffer-controller.ts:745
buffer-controller.ts:226 [warn] > [buffer-controller]: Failed to reset the audio buffer DOMException: Failed to execute 'removeSourceBuffer' on 'MediaSource': The SourceBuffer provided is not contained in this MediaSource.
    at https://cdnjs.cloudflare.com/ajax/libs/hls.js/1.1.5/hls.js:4379:32
    at Array.forEach (<anonymous>)
    at BufferController.onBufferReset (https://cdnjs.cloudflare.com/ajax/libs/hls.js/1.1.5/hls.js:4371:33)
    at EventEmitter.emit (https://cdnjs.cloudflare.com/ajax/libs/hls.js/1.1.5/hls.js:310:33)
    at Hls.emit (https://cdnjs.cloudflare.com/ajax/libs/hls.js/1.1.5/hls.js:17266:26)
    at Hls.trigger (https://cdnjs.cloudflare.com/ajax/libs/hls.js/1.1.5/hls.js:17271:19)
    at StreamController.onManifestLoading (https://cdnjs.cloudflare.com/ajax/libs/hls.js/1.1.5/hls.js:9790:14)
    at EventEmitter.emit (https://cdnjs.cloudflare.com/ajax/libs/hls.js/1.1.5/hls.js:310:33)
    at Hls.emit (https://cdnjs.cloudflare.com/ajax/libs/hls.js/1.1.5/hls.js:17266:26)
    at Hls.trigger (https://cdnjs.cloudflare.com/ajax/libs/hls.js/1.1.5/hls.js:17271:19)
(anonymous) @ buffer-controller.ts:226
onBufferReset @ buffer-controller.ts:213
emit @ index.js:203
emit @ hls.ts:250
trigger @ hls.ts:258
onManifestLoading @ stream-controller.ts:540
emit @ index.js:203
emit @ hls.ts:250
trigger @ hls.ts:258
loadSource @ hls.ts:350
onAttached @ hls-issue.html:16
emit @ index.js:203
emit @ hls.ts:250
trigger @ hls.ts:258
BufferController._onMediaSourceOpen @ buffer-controller.ts:745
level-controller.ts:172 [log] > [level-controller]: manifest loaded, 10 level(s) found, first bitrate: 468219
buffer-controller.ts:136 [log] > 2 bufferCodec event(s) expected
hls.ts:361 [log] > startLoad(-1)
level-controller.ts:524 [log] > [level-controller]: Attempt loading level index 9 with URL-id 0 https://cdn.muse.ai/w/eefda2e5553e95a62784a066b8c31dd5c5d6c3555cce3b38c5c4728604ac96ed/videos/hls-video-4.m3u8
audio-track-controller.ts:134 [log] > [audio-track-controller]: Updating audio tracks, 1 track(s) found in "audio-1" group-id
audio-track-controller.ts:185 [log] > [audio-track-controller]: Now switching to audio-track index 0
base-stream-controller.ts:1381 [log] > [audio-stream-controller]: STOPPED->IDLE
base-stream-controller.ts:1381 [log] > [audio-stream-controller]: IDLE->WAITING_TRACK
level-controller.ts:251 [log] > [level-controller]: switching to level 9 from 9
level-controller.ts:524 [log] > [level-controller]: Attempt loading level index 9 with URL-id 0 https://cdn.muse.ai/w/eefda2e5553e95a62784a066b8c31dd5c5d6c3555cce3b38c5c4728604ac96ed/videos/hls-video-4.m3u8
base-stream-controller.ts:1381 [log] > [stream-controller]: STOPPED->IDLE
level-controller.ts:251 [log] > [level-controller]: switching to level 9 from 9
level-controller.ts:524 [log] > [level-controller]: Attempt loading level index 9 with URL-id 0 https://cdn.muse.ai/w/eefda2e5553e95a62784a066b8c31dd5c5d6c3555cce3b38c5c4728604ac96ed/videos/hls-video-4.m3u8
base-stream-controller.ts:1381 [log] > [stream-controller]: IDLE->WAITING_LEVEL
audio-track-controller.ts:258 [log] > [audio-track-controller]: loading audio-track playlist for id: 0
base-stream-controller.ts:1381 [log] > [audio-stream-controller]: WAITING_TRACK->STOPPED
base-stream-controller.ts:1381 [log] > [audio-stream-controller]: STOPPED->WAITING_TRACK
base-stream-controller.ts:1381 [log] > [subtitle-stream-controller]: STOPPED->IDLE
stream-controller.ts:603 [log] > [stream-controller]: Level 9 loaded [0,57], cc [0, 0] duration:287.933
base-stream-controller.ts:1381 [log] > [stream-controller]: WAITING_LEVEL->IDLE
level-controller.ts:251 [log] > [level-controller]: switching to level 8 from 9
audio-track-controller.ts:134 [log] > [audio-track-controller]: Updating audio tracks, 1 track(s) found in "audio-0" group-id
audio-track-controller.ts:185 [log] > [audio-track-controller]: Now switching to audio-track index 0
base-stream-controller.ts:1381 [log] > [audio-stream-controller]: WAITING_TRACK->IDLE
base-stream-controller.ts:1381 [log] > [audio-stream-controller]: IDLE->WAITING_TRACK
audio-track-controller.ts:258 [log] > [audio-track-controller]: loading audio-track playlist for id: 0
playlist-loader.ts:218 [log] > [playlist-loader]: aborting previous loader for type: audioTrack
level-controller.ts:524 [log] > [level-controller]: Attempt loading level index 8 with URL-id 0 https://cdn.muse.ai/w/eefda2e5553e95a62784a066b8c31dd5c5d6c3555cce3b38c5c4728604ac96ed/videos/hls-video-4.m3u8
base-stream-controller.ts:1381 [log] > [stream-controller]: IDLE->WAITING_LEVEL
audio-track-controller.ts:87 [log] > [audio-track-controller]: audioTrack 0 loaded [0-57]
audio-stream-controller.ts:425 [log] > [audio-stream-controller]: Track 0 loaded [0,57],duration:287.9269999999999
base-stream-controller.ts:1381 [log] > [audio-stream-controller]: WAITING_TRACK->IDLE
base-stream-controller.ts:588 [log] > [audio-stream-controller]: Loading fragment initSegment cc: 0 track: 0, target: 0
base-stream-controller.ts:1381 [log] > [audio-stream-controller]: IDLE->FRAG_LOADING
stream-controller.ts:603 [log] > [stream-controller]: Level 8 loaded [0,57], cc [0, 0] duration:287.933
base-stream-controller.ts:1381 [log] > [stream-controller]: WAITING_LEVEL->IDLE
level-controller.ts:251 [log] > [level-controller]: switching to level 7 from 8
audio-track-controller.ts:134 [log] > [audio-track-controller]: Updating audio tracks, 1 track(s) found in "audio-1" group-id
audio-track-controller.ts:185 [log] > [audio-track-controller]: Now switching to audio-track index 0
base-stream-controller.ts:1381 [log] > [audio-stream-controller]: FRAG_LOADING->IDLE
base-stream-controller.ts:1381 [log] > [audio-stream-controller]: IDLE->WAITING_TRACK
audio-track-controller.ts:258 [log] > [audio-track-controller]: loading audio-track playlist for id: 0
level-controller.ts:524 [log] > [level-controller]: Attempt loading level index 7 with URL-id 0 https://cdn.muse.ai/w/eefda2e5553e95a62784a066b8c31dd5c5d6c3555cce3b38c5c4728604ac96ed/videos/hls-video-3.m3u8
base-stream-controller.ts:1381 [log] > [stream-controller]: IDLE->WAITING_LEVEL
base-stream-controller.ts:481 [warn] > [audio-stream-controller]: Error: init load aborted
    at base-stream-controller.ts:405:17
(anonymous) @ base-stream-controller.ts:481
Promise.catch (async)
_loadInitSegment @ base-stream-controller.ts:402
loadFragment @ audio-stream-controller.ts:796
doTickIdle @ audio-stream-controller.ts:345
doTick @ audio-stream-controller.ts:154
tick @ task-loop.ts:110
onAudioTrackLoaded @ audio-stream-controller.ts:468
emit @ index.js:203
emit @ hls.ts:250
trigger @ hls.ts:258
handlePlaylistLoaded @ playlist-loader.ts:707
handleTrackOrLevelPlaylist @ playlist-loader.ts:539
loadsuccess @ playlist-loader.ts:339
readystatechange @ xhr-loader.ts:197
XMLHttpRequest.send (async)
loadInternal @ xhr-loader.ts:134
load @ xhr-loader.ts:72
load @ playlist-loader.ts:303
onAudioTrackLoading @ playlist-loader.ts:177
emit @ index.js:182
emit @ hls.ts:250
trigger @ hls.ts:258
loadPlaylist @ audio-track-controller.ts:260
setAudioTrack @ audio-track-controller.ts:203
selectInitialTrack @ audio-track-controller.ts:217
switchLevel @ audio-track-controller.ts:139
onLevelSwitching @ audio-track-controller.ts:106
emit @ index.js:203
emit @ hls.ts:250
trigger @ hls.ts:258
set @ level-controller.ts:262
set @ level-controller.ts:556
set @ hls.ts:486
doTickIdle @ stream-controller.ts:232
doTick @ stream-controller.ts:166
tick @ task-loop.ts:110
onLevelLoaded @ stream-controller.ts:655
emit @ index.js:203
emit @ hls.ts:250
trigger @ hls.ts:258
handlePlaylistLoaded @ playlist-loader.ts:697
handleTrackOrLevelPlaylist @ playlist-loader.ts:539
loadsuccess @ playlist-loader.ts:339
readystatechange @ xhr-loader.ts:197
XMLHttpRequest.send (async)
loadInternal @ xhr-loader.ts:134
load @ xhr-loader.ts:72
load @ playlist-loader.ts:303
onLevelLoading @ playlist-loader.ts:161
emit @ index.js:203
emit @ hls.ts:250
trigger @ hls.ts:258
loadPlaylist @ level-controller.ts:538
startLoad @ base-playlist-controller.ts:51
startLoad @ level-controller.ts:76
(anonymous) @ hls.ts:363
startLoad @ hls.ts:362
onManifestLoaded @ level-controller.ts:196
emit @ index.js:203
emit @ hls.ts:250
trigger @ hls.ts:258
handleMasterPlaylist @ playlist-loader.ts:444
loadsuccess @ playlist-loader.ts:341
readystatechange @ xhr-loader.ts:197
XMLHttpRequest.send (async)
loadInternal @ xhr-loader.ts:134
load @ xhr-loader.ts:72
load @ playlist-loader.ts:303
onManifestLoading @ playlist-loader.ts:148
emit @ index.js:203
emit @ hls.ts:250
trigger @ hls.ts:258
loadSource @ hls.ts:350
onAttached @ hls-issue.html:16
emit @ index.js:203
emit @ hls.ts:250
trigger @ hls.ts:258
BufferController._onMediaSourceOpen @ buffer-controller.ts:745
base-stream-controller.ts:1381 [log] > [audio-stream-controller]: WAITING_TRACK->IDLE
base-stream-controller.ts:1381 [log] > [audio-stream-controller]: IDLE->WAITING_TRACK
stream-controller.ts:603 [log] > [stream-controller]: Level 7 loaded [0,57], cc [0, 0] duration:287.933
base-stream-controller.ts:1381 [log] > [stream-controller]: WAITING_LEVEL->IDLE
level-controller.ts:251 [log] > [level-controller]: switching to level 6 from 7
audio-track-controller.ts:134 [log] > [audio-track-controller]: Updating audio tracks, 1 track(s) found in "audio-0" group-id
audio-track-controller.ts:185 [log] > [audio-track-controller]: Now switching to audio-track index 0
base-stream-controller.ts:1381 [log] > [audio-stream-controller]: WAITING_TRACK->IDLE
base-stream-controller.ts:588 [log] > [audio-stream-controller]: Loading fragment initSegment cc: 0 track: 0, target: 0
base-stream-controller.ts:1381 [log] > [audio-stream-controller]: IDLE->FRAG_LOADING
level-controller.ts:524 [log] > [level-controller]: Attempt loading level index 6 with URL-id 0 https://cdn.muse.ai/w/eefda2e5553e95a62784a066b8c31dd5c5d6c3555cce3b38c5c4728604ac96ed/videos/hls-video-3.m3u8
base-stream-controller.ts:1381 [log] > [stream-controller]: IDLE->WAITING_LEVEL
audio-track-controller.ts:87 [log] > [audio-track-controller]: audioTrack 0 loaded [0-57]
audio-stream-controller.ts:425 [log] > [audio-stream-controller]: Track 0 loaded [0,57],duration:287.9269999999999
base-stream-controller.ts:1381 [log] > [audio-stream-controller]: FRAG_LOADING->IDLE
base-stream-controller.ts:499 [log] > [audio-stream-controller]: Buffered audio sn: initSegment of track 0 
base-stream-controller.ts:588 [log] > [audio-stream-controller]: Loading fragment initSegment cc: 0 track: 0, target: 0
base-stream-controller.ts:1381 [log] > [audio-stream-controller]: IDLE->FRAG_LOADING
stream-controller.ts:603 [log] > [stream-controller]: Level 6 loaded [0,57], cc [0, 0] duration:287.933
base-stream-controller.ts:1381 [log] > [stream-controller]: WAITING_LEVEL->IDLE
level-controller.ts:251 [log] > [level-controller]: switching to level 5 from 6
audio-track-controller.ts:134 [log] > [audio-track-controller]: Updating audio tracks, 1 track(s) found in "audio-1" group-id
audio-track-controller.ts:185 [log] > [audio-track-controller]: Now switching to audio-track index 0
base-stream-controller.ts:1381 [log] > [audio-stream-controller]: FRAG_LOADING->IDLE
base-stream-controller.ts:1381 [log] > [audio-stream-controller]: IDLE->WAITING_TRACK
audio-track-controller.ts:258 [log] > [audio-track-controller]: loading audio-track playlist for id: 0
level-controller.ts:524 [log] > [level-controller]: Attempt loading level index 5 with URL-id 0 https://cdn.muse.ai/w/eefda2e5553e95a62784a066b8c31dd5c5d6c3555cce3b38c5c4728604ac96ed/videos/hls-video-2.m3u8
base-stream-controller.ts:1381 [log] > [stream-controller]: IDLE->WAITING_LEVEL
base-stream-controller.ts:481 [warn] > [audio-stream-controller]: Error: init load aborted
    at base-stream-controller.ts:405:17
(anonymous) @ base-stream-controller.ts:481
Promise.catch (async)
_loadInitSegment @ base-stream-controller.ts:402
loadFragment @ audio-stream-controller.ts:796
doTickIdle @ audio-stream-controller.ts:345
doTick @ audio-stream-controller.ts:154
tick @ task-loop.ts:110
fragBufferedComplete @ base-stream-controller.ts:507
onFragBuffered @ audio-stream-controller.ts:595
emit @ index.js:203
emit @ hls.ts:250
trigger @ hls.ts:258
(anonymous) @ base-stream-controller.ts:471
Promise.then (async)
_loadInitSegment @ base-stream-controller.ts:450
loadFragment @ audio-stream-controller.ts:796
doTickIdle @ audio-stream-controller.ts:345
doTick @ audio-stream-controller.ts:154
tick @ task-loop.ts:110
onAudioTrackSwitching @ audio-stream-controller.ts:404
emit @ index.js:203
emit @ hls.ts:250
trigger @ hls.ts:258
setAudioTrack @ audio-track-controller.ts:191
selectInitialTrack @ audio-track-controller.ts:217
switchLevel @ audio-track-controller.ts:139
onLevelSwitching @ audio-track-controller.ts:106
emit @ index.js:203
emit @ hls.ts:250
trigger @ hls.ts:258
set @ level-controller.ts:262
set @ level-controller.ts:556
set @ hls.ts:486
doTickIdle @ stream-controller.ts:232
doTick @ stream-controller.ts:166
tick @ task-loop.ts:110
onLevelLoaded @ stream-controller.ts:655
emit @ index.js:203
emit @ hls.ts:250
trigger @ hls.ts:258
handlePlaylistLoaded @ playlist-loader.ts:697
handleTrackOrLevelPlaylist @ playlist-loader.ts:539
loadsuccess @ playlist-loader.ts:339
readystatechange @ xhr-loader.ts:197
XMLHttpRequest.send (async)
loadInternal @ xhr-loader.ts:134
load @ xhr-loader.ts:72
load @ playlist-loader.ts:303
onLevelLoading @ playlist-loader.ts:161
emit @ index.js:203
emit @ hls.ts:250
trigger @ hls.ts:258
loadPlaylist @ level-controller.ts:538
set @ level-controller.ts:268
set @ level-controller.ts:556
set @ hls.ts:486
doTickIdle @ stream-controller.ts:232
doTick @ stream-controller.ts:166
tick @ task-loop.ts:110
onLevelLoaded @ stream-controller.ts:655
emit @ index.js:203
emit @ hls.ts:250
trigger @ hls.ts:258
handlePlaylistLoaded @ playlist-loader.ts:697
handleTrackOrLevelPlaylist @ playlist-loader.ts:539
loadsuccess @ playlist-loader.ts:339
readystatechange @ xhr-loader.ts:197
XMLHttpRequest.send (async)
loadInternal @ xhr-loader.ts:134
load @ xhr-loader.ts:72
load @ playlist-loader.ts:303
onLevelLoading @ playlist-loader.ts:161
emit @ index.js:203
emit @ hls.ts:250
trigger @ hls.ts:258
loadPlaylist @ level-controller.ts:538
set @ level-controller.ts:268
set @ level-controller.ts:556
set @ hls.ts:486
doTickIdle @ stream-controller.ts:232
doTick @ stream-controller.ts:166
tick @ task-loop.ts:110
onLevelLoaded @ stream-controller.ts:655
emit @ index.js:203
emit @ hls.ts:250
trigger @ hls.ts:258
handlePlaylistLoaded @ playlist-loader.ts:697
handleTrackOrLevelPlaylist @ playlist-loader.ts:539
loadsuccess @ playlist-loader.ts:339
readystatechange @ xhr-loader.ts:197
XMLHttpRequest.send (async)
loadInternal @ xhr-loader.ts:134
load @ xhr-loader.ts:72
load @ playlist-loader.ts:303
onLevelLoading @ playlist-loader.ts:161
emit @ index.js:203
emit @ hls.ts:250
trigger @ hls.ts:258
loadPlaylist @ level-controller.ts:538
startLoad @ base-playlist-controller.ts:51
startLoad @ level-controller.ts:76
(anonymous) @ hls.ts:363
startLoad @ hls.ts:362
onManifestLoaded @ level-controller.ts:196
emit @ index.js:203
emit @ hls.ts:250
trigger @ hls.ts:258
handleMasterPlaylist @ playlist-loader.ts:444
loadsuccess @ playlist-loader.ts:341
readystatechange @ xhr-loader.ts:197
XMLHttpRequest.send (async)
loadInternal @ xhr-loader.ts:134
load @ xhr-loader.ts:72
load @ playlist-loader.ts:303
onManifestLoading @ playlist-loader.ts:148
emit @ index.js:203
emit @ hls.ts:250
trigger @ hls.ts:258
loadSource @ hls.ts:350
onAttached @ hls-issue.html:16
emit @ index.js:203
emit @ hls.ts:250
trigger @ hls.ts:258
BufferController._onMediaSourceOpen @ buffer-controller.ts:745
base-stream-controller.ts:1381 [log] > [audio-stream-controller]: WAITING_TRACK->IDLE
base-stream-controller.ts:1381 [log] > [audio-stream-controller]: IDLE->WAITING_TRACK
stream-controller.ts:603 [log] > [stream-controller]: Level 5 loaded [0,57], cc [0, 0] duration:287.933
base-stream-controller.ts:1381 [log] > [stream-controller]: WAITING_LEVEL->IDLE
level-controller.ts:251 [log] > [level-controller]: switching to level 4 from 5
audio-track-controller.ts:134 [log] > [audio-track-controller]: Updating audio tracks, 1 track(s) found in "audio-0" group-id
audio-track-controller.ts:185 [log] > [audio-track-controller]: Now switching to audio-track index 0
base-stream-controller.ts:1381 [log] > [audio-stream-controller]: WAITING_TRACK->IDLE
base-stream-controller.ts:588 [log] > [audio-stream-controller]: Loading fragment initSegment cc: 0 track: 0, target: 0
base-stream-controller.ts:1381 [log] > [audio-stream-controller]: IDLE->FRAG_LOADING
level-controller.ts:524 [log] > [level-controller]: Attempt loading level index 4 with URL-id 0 https://cdn.muse.ai/w/eefda2e5553e95a62784a066b8c31dd5c5d6c3555cce3b38c5c4728604ac96ed/videos/hls-video-2.m3u8
base-stream-controller.ts:1381 [log] > [stream-controller]: IDLE->WAITING_LEVEL
audio-track-controller.ts:87 [log] > [audio-track-controller]: audioTrack 0 loaded [0-57]
audio-stream-controller.ts:425 [log] > [audio-stream-controller]: Track 0 loaded [0,57],duration:287.9269999999999
stream-controller.ts:603 [log] > [stream-controller]: Level 4 loaded [0,57], cc [0, 0] duration:287.933
base-stream-controller.ts:1381 [log] > [stream-controller]: WAITING_LEVEL->IDLE
level-controller.ts:251 [log] > [level-controller]: switching to level 3 from 4
audio-track-controller.ts:134 [log] > [audio-track-controller]: Updating audio tracks, 1 track(s) found in "audio-1" group-id
audio-track-controller.ts:185 [log] > [audio-track-controller]: Now switching to audio-track index 0
base-stream-controller.ts:1381 [log] > [audio-stream-controller]: FRAG_LOADING->IDLE
base-stream-controller.ts:1381 [log] > [audio-stream-controller]: IDLE->WAITING_TRACK
audio-track-controller.ts:258 [log] > [audio-track-controller]: loading audio-track playlist for id: 0
level-controller.ts:524 [log] > [level-controller]: Attempt loading level index 3 with URL-id 0 https://cdn.muse.ai/w/eefda2e5553e95a62784a066b8c31dd5c5d6c3555cce3b38c5c4728604ac96ed/videos/hls-video-1.m3u8
base-stream-controller.ts:1381 [log] > [stream-controller]: IDLE->WAITING_LEVEL
base-stream-controller.ts:481 [warn] > [audio-stream-controller]: Error: init load aborted
    at base-stream-controller.ts:405:17
(anonymous) @ base-stream-controller.ts:481
Promise.catch (async)
_loadInitSegment @ base-stream-controller.ts:402
loadFragment @ audio-stream-controller.ts:796
doTickIdle @ audio-stream-controller.ts:345
doTick @ audio-stream-controller.ts:154
tick @ task-loop.ts:110
onAudioTrackSwitching @ audio-stream-controller.ts:404
emit @ index.js:203
emit @ hls.ts:250
trigger @ hls.ts:258
setAudioTrack @ audio-track-controller.ts:191
selectInitialTrack @ audio-track-controller.ts:217
switchLevel @ audio-track-controller.ts:139
onLevelSwitching @ audio-track-controller.ts:106
emit @ index.js:203
emit @ hls.ts:250
trigger @ hls.ts:258
set @ level-controller.ts:262
set @ level-controller.ts:556
set @ hls.ts:486
doTickIdle @ stream-controller.ts:232
doTick @ stream-controller.ts:166
tick @ task-loop.ts:110
onLevelLoaded @ stream-controller.ts:655
emit @ index.js:203
emit @ hls.ts:250
trigger @ hls.ts:258
handlePlaylistLoaded @ playlist-loader.ts:697
handleTrackOrLevelPlaylist @ playlist-loader.ts:539
loadsuccess @ playlist-loader.ts:339
readystatechange @ xhr-loader.ts:197
XMLHttpRequest.send (async)
loadInternal @ xhr-loader.ts:134
load @ xhr-loader.ts:72
load @ playlist-loader.ts:303
onLevelLoading @ playlist-loader.ts:161
emit @ index.js:203
emit @ hls.ts:250
trigger @ hls.ts:258
loadPlaylist @ level-controller.ts:538
set @ level-controller.ts:268
set @ level-controller.ts:556
set @ hls.ts:486
doTickIdle @ stream-controller.ts:232
doTick @ stream-controller.ts:166
tick @ task-loop.ts:110
onLevelLoaded @ stream-controller.ts:655
emit @ index.js:203
emit @ hls.ts:250
trigger @ hls.ts:258
handlePlaylistLoaded @ playlist-loader.ts:697
handleTrackOrLevelPlaylist @ playlist-loader.ts:539
loadsuccess @ playlist-loader.ts:339
readystatechange @ xhr-loader.ts:197
XMLHttpRequest.send (async)
loadInternal @ xhr-loader.ts:134
load @ xhr-loader.ts:72
load @ playlist-loader.ts:303
onLevelLoading @ playlist-loader.ts:161
emit @ index.js:203
emit @ hls.ts:250
trigger @ hls.ts:258
loadPlaylist @ level-controller.ts:538
set @ level-controller.ts:268
set @ level-controller.ts:556
set @ hls.ts:486
doTickIdle @ stream-controller.ts:232
doTick @ stream-controller.ts:166
tick @ task-loop.ts:110
onLevelLoaded @ stream-controller.ts:655
emit @ index.js:203
emit @ hls.ts:250
trigger @ hls.ts:258
handlePlaylistLoaded @ playlist-loader.ts:697
handleTrackOrLevelPlaylist @ playlist-loader.ts:539
loadsuccess @ playlist-loader.ts:339
readystatechange @ xhr-loader.ts:197
XMLHttpRequest.send (async)
loadInternal @ xhr-loader.ts:134
load @ xhr-loader.ts:72
load @ playlist-loader.ts:303
onLevelLoading @ playlist-loader.ts:161
emit @ index.js:203
emit @ hls.ts:250
trigger @ hls.ts:258
loadPlaylist @ level-controller.ts:538
set @ level-controller.ts:268
set @ level-controller.ts:556
set @ hls.ts:486
doTickIdle @ stream-controller.ts:232
doTick @ stream-controller.ts:166
tick @ task-loop.ts:110
onLevelLoaded @ stream-controller.ts:655
emit @ index.js:203
emit @ hls.ts:250
trigger @ hls.ts:258
handlePlaylistLoaded @ playlist-loader.ts:697
handleTrackOrLevelPlaylist @ playlist-loader.ts:539
loadsuccess @ playlist-loader.ts:339
readystatechange @ xhr-loader.ts:197
XMLHttpRequest.send (async)
loadInternal @ xhr-loader.ts:134
load @ xhr-loader.ts:72
load @ playlist-loader.ts:303
onLevelLoading @ playlist-loader.ts:161
emit @ index.js:203
emit @ hls.ts:250
trigger @ hls.ts:258
loadPlaylist @ level-controller.ts:538
set @ level-controller.ts:268
set @ level-controller.ts:556
set @ hls.ts:486
doTickIdle @ stream-controller.ts:232
doTick @ stream-controller.ts:166
tick @ task-loop.ts:110
onLevelLoaded @ stream-controller.ts:655
emit @ index.js:203
emit @ hls.ts:250
trigger @ hls.ts:258
handlePlaylistLoaded @ playlist-loader.ts:697
handleTrackOrLevelPlaylist @ playlist-loader.ts:539
loadsuccess @ playlist-loader.ts:339
readystatechange @ xhr-loader.ts:197
XMLHttpRequest.send (async)
loadInternal @ xhr-loader.ts:134
load @ xhr-loader.ts:72
load @ playlist-loader.ts:303
onLevelLoading @ playlist-loader.ts:161
emit @ index.js:203
emit @ hls.ts:250
trigger @ hls.ts:258
loadPlaylist @ level-controller.ts:538
startLoad @ base-playlist-controller.ts:51
startLoad @ level-controller.ts:76
(anonymous) @ hls.ts:363
startLoad @ hls.ts:362
onManifestLoaded @ level-controller.ts:196
emit @ index.js:203
emit @ hls.ts:250
trigger @ hls.ts:258
handleMasterPlaylist @ playlist-loader.ts:444
loadsuccess @ playlist-loader.ts:341
readystatechange @ xhr-loader.ts:197
XMLHttpRequest.send (async)
loadInternal @ xhr-loader.ts:134
load @ xhr-loader.ts:72
load @ playlist-loader.ts:303
onManifestLoading @ playlist-loader.ts:148
emit @ index.js:203
emit @ hls.ts:250
trigger @ hls.ts:258
loadSource @ hls.ts:350
onAttached @ hls-issue.html:16
emit @ index.js:203
emit @ hls.ts:250
trigger @ hls.ts:258
BufferController._onMediaSourceOpen @ buffer-controller.ts:745

Chrome media internals output

No response

@naktinis naktinis added Bug Needs Triage If there is a suspected stream issue, apply this label to triage if it is something we should fix. labels Mar 29, 2022
@naktinis
Copy link
Author

naktinis commented Jul 8, 2022

Sorry for bumping this, but maybe someone has insights into why it is impossible to reuse the HLS instance by detaching and attaching again (or loading a new source for that matter).

It would be useful if detachMedia could stop all processing and reset the player to a clean state.

image

@robwalch robwalch removed Needs Triage If there is a suspected stream issue, apply this label to triage if it is something we should fix. Bug labels Jul 27, 2022
@robwalch
Copy link
Collaborator

Hi @naktinis,

The main issue here is with the test page implementation. By calling hls.attachMedia(video) on an hls.js player with the video already attached, you are replacing the source buffer without removing it, and then in the attach callback loading a source which attempts to detach and remove the buffers just replaced. Instead, just call loadSource, or call hls.detachMedia() first to safely remove the source buffers before replacing them.

As for the comment in your bump, I'm not sure if that's related to the same problem with your test page or something else. I did just post a fix for resuming loading of alt-audio after detaching and attaching here #4816.

You only need to attach once, and you don't need to call loadSource in a callback. I would recommend you don't use the attached callback at all.

@naktinis
Copy link
Author

Hi @robwalch! Thank you for the response.

You only need to attach once, and you don't need to call loadSource in a callback. I would recommend you don't use the attached callback at all.

So do you mean instead of this:

function reset() {
  onAttached = function() {
    hls.loadSource('https://cdn.muse.ai/w/eefda2e5553e95a62784a066b8c31dd5c5d6c3555cce3b38c5c4728604ac96ed/videos/hls.m3u8');
  }
  hls.once(Hls.Events.MEDIA_ATTACHED, onAttached);
  hls.attachMedia(document.getElementById('video'));
}

I should do something like this (attach once, not use callback)?

hls.attachMedia(document.getElementById('video'));
function reset() {
  hls.loadSource('https://cdn.muse.ai/w/eefda2e5553e95a62784a066b8c31dd5c5d6c3555cce3b38c5c4728604ac96ed/videos/hls.m3u8');
}

However, this doesn't load the video at all. Most likely I misunderstood what you meant – could you maybe show the correct way of setting a new source without reinstantiating Hls?

@robwalch
Copy link
Collaborator

You would still need to call reset() in the example above. There are examples in the README and API markdown docs.

@naktinis
Copy link
Author

Sorry, I wasn't being clear, that was just an excerpt showing the significant/conceptual part. Here's the full updated demo:
https://gistcdn.githack.com/naktinis/3e836f0a2fa088510b4b1ad27fa81a9a/raw/ec237438cb212fc3e32eecc67a67428659787cc6/hls-reload-2.html

I've seen the examples in the README, but I couldn't find any example there that demonstrates loading source twice on the same hls instance.

I'm also attaching the full updated demo code below for reference:

<!doctype html>
<html>
  <head>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/hls.js/1.1.5/hls.js"></script>

    <script>
      let hls;
      window.addEventListener('DOMContentLoaded', () => {
        hls = new Hls({
          debug: true,
          testBandwidth: false,
          abrEwmaDefaultEstimate: 4500000,
          startLevel: -1,
        });

        hls.loadSource('https://cdn.muse.ai/w/eefda2e5553e95a62784a066b8c31dd5c5d6c3555cce3b38c5c4728604ac96ed/videos/hls.m3u8');
        hls.attachMedia(document.getElementById('video'));
      });

      function reset1() {
        hls.loadSource('https://cdn.muse.ai/w/eefda2e5553e95a62784a066b8c31dd5c5d6c3555cce3b38c5c4728604ac96ed/videos/hls.m3u8');
      }

      function reset2() {
        hls.loadSource('https://cdn.muse.ai/w/eefda2e5553e95a62784a066b8c31dd5c5d6c3555cce3b38c5c4728604ac96ed/videos/hls.m3u8');
        hls.detachMedia();
        hls.attachMedia(document.getElementById('video'));
      }
    </script>
  </head>
  <body>
    Instructions:
    <ol>
      <li>Load mutlitple times using the buttons below
      <li>Look for "Error: init load aborted" in logs
      <li>Another possible side effect of reload: ABR intially dropping quality despite having enough bandwidth (then recovering)
    </ol>
    <button onclick="reset1()">Reload video (method 1)</button>
    <button onclick="reset2()">Reload video (method 2)</button>
    <br><br>
    <video id="video" width="640" height="360" autoplay controls muted></video>
  </body>
</html>

@robwalch
Copy link
Collaborator

robwalch commented Jul 28, 2022

Hi @naktinis,

Thanks for the update. When calling loadSource(), HLS.js will detach and attach if the URL you pass it is different from the last. In this case, since you are attempting to reset and load the exact same URL, it skips this step. The way to do this without error would be, detach, load, and then attach.

There may be a regression with just calling loadSource on the same URL, but there isn't a good reason to do this when you can just seek to 0 to restart playback. In fact in older versions of the player we always recommended that users destroy the player instance and create a new instance when loading another stream.

@robwalch robwalch changed the title Reloading manifest using loadSource fails with errors Reloading same URL using loadSource fails with errors Jul 28, 2022
@robwalch
Copy link
Collaborator

For context, one of the reasons loadSource does not detach/attach when the url is the same is to avoid recursive behavior when you use the attached event callback to call loadSource (#3732). So rolling back that change is not an option.
Additional resetting could happen in onManifestLoading or some improvements could be made to onBufferReset to deal with this specific scenario, but I don't think they are worth it considering how easy it is to work around, and how well the workarounds available perform.

@naktinis
Copy link
Author

naktinis commented Aug 1, 2022

@robwalch thanks for taking a look at this. So I tested this by loading a new URL and it still doesn't work as expected. Added link to the demo below.

I tried 3 methods to change the source:

  • just loadSource(newURL), result: quality drops despite having enough bandwidth, also "init load aborted" warnings
  • detachMedia, loadSource, attachMedia, result: the same, i.e. quality drops, and shows warnings
  • create a new instance of Hls, result: works as expected, quality always good

These quality drops, by the way, is something I described in my original description of this issue and I can't seem to find a way to avoid them. For example, I tried stopLoading and detachMedia, but it doesn't seem to help.

So I still haven't found the correct way to properly load (without quality drops and warnings) a new source on an existing Hls instance – which was the main goal of this issue.

Maybe I'm missing some cleanup method (other than stopLoading and detachMedia which I've tried) that resets the instance, clears the buffers etc.? Or maybe the existing methods could be extended to allow for loading a new source of an existing instance as smoothly as with a new instance?

Demo:
https://gistcdn.githack.com/naktinis/0585a3f6303b3dd1c37f99476545aa33/raw/8871becc887ff29d33403cbafa91adc21af5ec76/hls-reload-3.html

@robwalch
Copy link
Collaborator

robwalch commented Aug 1, 2022

Not a Contribution

These quality drops, by the way, is something I described in my original description of this issue

HLS.js does not maintain quality between loading of items. This is not an error and requires a separate feature request to deal with. I am reviewing this issue only from the perspective that loadSource(url) results in a playback failure and errors in the logs as described.

The best way to maintain quality between sessions is to instantiate a new instance of HLS.js with each item, and update the player configuration for each player to use the estimated bandwidth (abrEwmaDefaultEstimate) based on conditions (hls.bandwidthEstimate) from the last session.

littlespex pushed a commit to cbsinteractive/hls.js that referenced this issue Dec 9, 2022
For HLS lazy-loading, there was a race. If a call to switch streams
occurred during a fetch-and-append operation in StreamingEngine, there
would be two calls to createSegmentIndex() for the same stream. This was
being mishandled in the HLS parser, such that the second call would
return immediately without waiting on the creation of the segment index.

This fixes HLS's createSegmentIndex() method to ensure that multiple
calls on the same stream return the same Promise.

Closes video-dev#4621
@robwalch
Copy link
Collaborator

Closing, as hls.loadSource(hls.url) works in the latest release (v1.4.6).

@robwalch robwalch added Works in latest The issue reported has already been fixed and works as expected in the latest release Bug and removed Bug Wontfix answered labels Jun 19, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Bug Works in latest The issue reported has already been fixed and works as expected in the latest release
Projects
None yet
Development

No branches or pull requests

2 participants