Skip to content

some levels always call bufferStalledError  #4974

Closed
@germanbv

Description

@germanbv

What version of Hls.js are you using?

v1.2.4

What browser (including version) are you using?

Chrome106.0.5249.119

What OS (including version) are you using?

Windows 10

Test stream

https://customer-9wye63yxidz55b0c.cloudflarestream.com/e6163a25a9f2cd0c1af318dac72a6093/manifest/video.m3u8

Configuration

autoStartLoad: true,
startPosition: -1,
startLevel: 2,
debug: true

Additional player setup steps

You can check a test implementation here: https://codepen.io/germanbv/pen/LYmRbdZ or by just using the test stream on https://hls-js-dev.netlify.app/demo
notice you always get a bufferStalledError at the exact same point. This only happens with some specific videos...

Checklist

Steps to reproduce

  1. go to https://hls-js-dev.netlify.app/demo
  2. paste the test stream https://customer-9wye63yxidz55b0c.cloudflarestream.com/e6163a25a9f2cd0c1af318dac72a6093/manifest/video.m3u8
  3. Buffer stalled error will be always triggered at the same point

Note that Levels should be 1,2 or 3

Expected behaviour

The cinematic plays without buffer stalled error.

What actually happened?

Buffer stalled error is always being triggered at the same point

Console output

DevTools failed to load source map: Could not load content for https://cdn.jsdelivr.net/npm/hls.min.js.map: HTTP error: status code 404, net::ERR_HTTP_RESPONSE_CODE_FAILURE
 [log] >
 [log] > stopLoad
 [log] > loadSource:https://customer-9wye63yxidz55b0c.cloudflarestream.com/e6163a25a9f2cd0c1af318dac72a6093/manifest/video.m3u8
 [log] > [stream-controller]: Trigger BUFFER_RESET
 [log] > attachMedia
 [log] > [buffer-controller]: Media source opened
 [log] > [subtitle-stream-controller]: STOPPED->IDLE
 [log] > [level-controller]: manifest loaded, 5 level(s) found, first bitrate: 1752485
 [log] > 2 bufferCodec event(s) expected
 [log] > startLoad(-1)
 [log] > [level-controller]: switching to level 2 from -1
 [log] > [audio-track-controller]: Updating audio tracks, 1 track(s) found in "group_audio" group-id
 [log] > [audio-track-controller]: Now switching to audio-track index 0
 [log] > [audio-stream-controller]: STOPPED->IDLE
 [log] > [audio-stream-controller]: IDLE->WAITING_TRACK
 [log] > [level-controller]: Attempt loading level index 2 with URL-id 0 https://customer-9wye63yxidz55b0c.cloudflarestream.com/e6163a25a9f2cd0c1af318dac72a6093/manifest/stream_t7ddbca7c231a95dff3b36e9a1d87ac53_r244474664.m3u8
 [log] > [stream-controller]: STOPPED->IDLE
 [log] > [audio-track-controller]: loading audio-track playlist for id: 0
 [log] > [audio-stream-controller]: WAITING_TRACK->STOPPED
 [log] > [audio-stream-controller]: STOPPED->WAITING_TRACK
 [log] > [subtitle-stream-controller]: IDLE->STOPPED
 [log] > [subtitle-stream-controller]: STOPPED->IDLE
 [log] > [stream-controller]: Level 2 loaded [0,3], cc [0, 0] duration:13
 [log] > [buffer-controller]: Updating Media Source duration to 13.000
 [log] > [stream-controller]: Loading fragment 0 cc: 0 of [0-3] level: 2, target: 0
 [log] > [stream-controller]: IDLE->FRAG_LOADING
 [log] > [audio-track-controller]: audioTrack 0 loaded [0-3]
 [log] > [audio-stream-controller]: Track 0 loaded [0,3],duration:12.995989999999999
 [log] > [audio-stream-controller]: WAITING_TRACK->IDLE
 [log] > [audio-stream-controller]: Loading fragment 0 cc: 0 of [0-3] track: 0, target: 0
 [log] > [audio-stream-controller]: IDLE->FRAG_LOADING
 [log] > demuxing in webworker
 [log] > [transmuxer-interface, main]: Starting new transmux session for sn: 0 p: -1 level: 2 id: 1
        discontinuity: true
        trackSwitch: true
        contiguous: false
        accurateTimeOffset: true
        timeOffset: 0
        initSegmentChange: true
 [log] > [stream-controller]: Loaded fragment 0 of level 2
 [log] >
 [log] > [mp4-remuxer]: ISGenerated flag reset
 [log] > [mp4-remuxer]: initPTS & initDTS reset
 [log] > [stream-controller]: FRAG_LOADING->PARSING
 [log] > [stream-controller]: Init video buffer, container:video/mp4, codecs[level/parsed]=[avc1.4d401e/avc1.4d401e]
 [log] > [audio-stream-controller]: InitPTS for cc: 0 found from main: 7500
 [log] > [transmuxer.ts]: Flushed fragment 0 of level 2
 [log] > [stream-controller]: PARSING->PARSED
 [log] > demuxing in webworker
 [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
 [log] > [audio-stream-controller]: Loaded fragment 0 of level 0
63e246a5-3616-43dc-a6b7-ef1d578b7772:1 [log] >
 [log] > [mp4-remuxer]: ISGenerated flag reset
 [log] > [mp4-remuxer]: initPTS & initDTS reset
 [log] > manifest codec:mp4a.40.2, ADTS type:2, samplingIndex:3
 [log] > parsed codec:mp4a.40.5, rate:48000, channels:2
 [log] > [audio-stream-controller]: FRAG_LOADING->PARSING
 [log] > [audio-stream-controller]: Switching audio track : flushing all audio
 [log] > [audio-stream-controller]: Init audio buffer, container:audio/mp4, codecs[parsed]=[mp4a.40.5]
 [log] > [buffer-controller]: creating sourceBuffer(video/mp4;codecs=avc1.4d401e)
 [log] > [buffer-controller]: creating sourceBuffer(audio/mp4;codecs=mp4a.40.5)
 [log] > [stream-controller]: Alternate track found, use video.buffered to schedule main fragment loading
 [log] > [buffer-controller]: Removing [0,13] from the audio SourceBuffer
 [log] > [transmuxer.ts]: Flushed fragment 0 of level 0
 [log] > [audio-stream-controller]: PARSING->PARSED
 [log] > [audio-stream-controller]: Buffered audio sn: 0 of track 0 [0.000,3.925]
 [log] > [audio-stream-controller]: PARSED->IDLE
 [log] > [audio-stream-controller]: Loading fragment 1 cc: 0 of [0-3] track: 0, target: 3.925
 [log] > [audio-stream-controller]: IDLE->FRAG_LOADING
 [log] > [stream-controller]: Buffered main sn: 0 of level 2 [0.000,4.000]
 [log] > [stream-controller]: PARSED->IDLE
 [log] > [level-controller]: switching to level 4 from 2
 [log] > [level-controller]: Attempt loading level index 4 with URL-id 0 https://customer-9wye63yxidz55b0c.cloudflarestream.com/e6163a25a9f2cd0c1af318dac72a6093/manifest/stream_t7ddbca7c231a95dff3b36e9a1d87ac53_r244474684.m3u8
 [log] > [stream-controller]: IDLE->WAITING_LEVEL
 [log] > [stream-controller]: Level 4 loaded [0,3], cc [0, 0] duration:13
 [log] > [stream-controller]: WAITING_LEVEL->IDLE
 [log] > [stream-controller]: Loading fragment 1 cc: 0 of [0-3] level: 4, target: 4
 [log] > [stream-controller]: IDLE->FRAG_LOADING
 [log] > [audio-stream-controller]: Loaded fragment 1 of level 0
 [warn] > Audio frame @ 3.885s overlaps nextAudioPts by -41 ms.
 [log] > [audio-stream-controller]: FRAG_LOADING->PARSING
 [log] > [transmuxer.ts]: Flushed fragment 1 of level 0
 [log] > [audio-stream-controller]: PARSING->PARSED
 [log] > [audio-stream-controller]: Buffered audio sn: 1 of track 0 [0.000,7.895]
 [log] > [audio-stream-controller]: PARSED->IDLE
 [log] > [audio-stream-controller]: Loading fragment 2 cc: 0 of [0-3] track: 0, target: 7.895
 [log] > [audio-stream-controller]: IDLE->FRAG_LOADING
 [log] > [audio-stream-controller]: Loaded fragment 2 of level 0
 [log] > [audio-stream-controller]: FRAG_LOADING->PARSING
 [log] > [transmuxer.ts]: Flushed fragment 2 of level 0
 [log] > [audio-stream-controller]: PARSING->PARSED
 [log] > [audio-stream-controller]: Buffered audio sn: 2 of track 0 [0.000,11.906]
 [log] > [audio-stream-controller]: PARSED->IDLE
 [log] > [transmuxer-interface, main]: Starting new transmux session for sn: 1 p: -1 level: 4 id: 1
        discontinuity: false
        trackSwitch: true
        contiguous: false
        accurateTimeOffset: true
        timeOffset: 4
        initSegmentChange: false
 [log] > [stream-controller]: Loaded fragment 1 of level 4
 [log] > [mp4-remuxer]: ISGenerated flag reset
 [log] > [mp4-remuxer]: reset next timestamp
 [log] > [mp4-remuxer]: ISGenerated flag reset
 [log] > [mp4-remuxer]: initPTS & initDTS reset
 [log] > [stream-controller]: FRAG_LOADING->PARSING
 [log] > [stream-controller]: Init video buffer, container:video/mp4, codecs[level/parsed]=[avc1.4d4028/avc1.4d4028]
 [log] > [transmuxer.ts]: Flushed fragment 1 of level 4
 [log] > [stream-controller]: PARSING->PARSED
 [log] > [stream-controller]: Buffered main sn: 1 of level 4 [0.000,3.792][3.917,7.917]
 [log] > [stream-controller]: PARSED->IDLE
 [log] > [stream-controller]: SN 1 just loaded, load next one: 2
 [log] > [stream-controller]: Loading fragment 2 cc: 0 of [0-3] level: 4, target: 7.917
 [log] > [stream-controller]: IDLE->FRAG_LOADING
 [log] > [stream-controller]: Loaded fragment 2 of level 4
 [log] > [stream-controller]: FRAG_LOADING->PARSING
 [log] > [transmuxer.ts]: Flushed fragment 2 of level 4
 [log] > [stream-controller]: PARSING->PARSED
 [log] > [stream-controller]: Buffered main sn: 2 of level 4 [0.000,3.792][3.917,11.917]
 [log] > [stream-controller]: PARSED->IDLE

 **_//AT THIS POINT THE PLAYER ALWAYS TRIES TO SWITCH LEVELS CAUSING THE STALL_**
  
 [log] > [level-controller]: switching to level 2 from 4
 [log] > [stream-controller]: Loading fragment 1 cc: 0 of [0-3] level: 2, target: 4
 [log] > [stream-controller]: IDLE->FRAG_LOADING
 [log] > [audio-stream-controller]: Loading fragment 3 cc: 0 of [0-3] track: 0, target: 11.906
 [log] > [audio-stream-controller]: IDLE->FRAG_LOADING
 [log] > [transmuxer-interface, main]: Starting new transmux session for sn: 1 p: -1 level: 2 id: 1
        discontinuity: false
        trackSwitch: true
        contiguous: false
        accurateTimeOffset: true
        timeOffset: 4
        initSegmentChange: false
 [log] > [stream-controller]: Loaded fragment 1 of level 2
 [log] > [mp4-remuxer]: ISGenerated flag reset
 [log] > [mp4-remuxer]: reset next timestamp
 [log] > [mp4-remuxer]: ISGenerated flag reset
 [log] > [mp4-remuxer]: initPTS & initDTS reset
 [log] > [stream-controller]: FRAG_LOADING->PARSING
 [log] > [stream-controller]: Init video buffer, container:video/mp4, codecs[level/parsed]=[avc1.4d401e/avc1.4d401e]
 [log] > [transmuxer.ts]: Flushed fragment 1 of level 2
 [log] > [stream-controller]: PARSING->PARSED
 [log] > [stream-controller]: Buffered main sn: 1 of level 2 [0.000,3.792][3.917,11.917]
 [log] > [stream-controller]: PARSED->IDLE
 [log] > [level-controller]: switching to level 4 from 2
 [log] > [stream-controller]: Loading fragment 3 cc: 0 of [0-3] level: 4, target: 11.917
 [log] > [stream-controller]: IDLE->FRAG_LOADING
 [log] > [audio-stream-controller]: Loaded fragment 3 of level 0
 [log] > [audio-stream-controller]: FRAG_LOADING->PARSING
 [log] > [transmuxer.ts]: Flushed fragment 3 of level 0
 [log] > [audio-stream-controller]: PARSING->PARSED
 [log] > [audio-stream-controller]: Buffered audio sn: 3 of track 0 [0.000,12.951]
 [log] > [audio-stream-controller]: PARSED->IDLE
 [log] > [buffer-controller]: audio sourceBuffer now EOS
 [log] > [audio-stream-controller]: IDLE->ENDED
 [log] > [transmuxer-interface, main]: Starting new transmux session for sn: 3 p: -1 level: 4 id: 1
        discontinuity: false
        trackSwitch: true
        contiguous: false
        accurateTimeOffset: true
        timeOffset: 11.916666666666666
        initSegmentChange: false
 [log] > [stream-controller]: Loaded fragment 3 of level 4
 [log] > [mp4-remuxer]: ISGenerated flag reset
 [log] > [mp4-remuxer]: reset next timestamp
 [log] > [mp4-remuxer]: ISGenerated flag reset
 [log] > [mp4-remuxer]: initPTS & initDTS reset
 [log] > [stream-controller]: FRAG_LOADING->PARSING
 [log] > [stream-controller]: Init video buffer, container:video/mp4, codecs[level/parsed]=[avc1.4d4028/avc1.4d4028]
 [log] > [transmuxer.ts]: Flushed fragment 3 of level 4
 [log] > [stream-controller]: PARSING->PARSED
 [log] > [stream-controller]: Buffered main sn: 3 of level 4 [0.000,3.792][3.917,12.958]
 [log] > [stream-controller]: PARSED->IDLE
 [log] > [buffer-controller]: video sourceBuffer now EOS
 [log] > [stream-controller]: IDLE->ENDED
 [log] > [buffer-controller]: Media source ended
 [warn] > Playback stalling at @6.690604 due to low buffer ({"len":6.267728,"start":3.916666,"end":12.958332})
 [warn] > [playback-rate-controller]: Stall detected, adjusting target latency
 **mediaError: bufferStalledError**
​ [warn] > Trying to nudge playhead over buffer-hole
​ [warn] > Nudging 'currentTime' from 6.690604 to 6.790604
​ **mediaError: bufferNudgeOnStall**
​ [log] > [stream-controller]: media seeking to 6.791, state: ENDED
​ [log] > [stream-controller]: ENDED->IDLE
​ [log] > [audio-stream-controller]: media seeking to 6.791, state: ENDED
​ [log] > [audio-stream-controller]: ENDED->IDLE
​ [log] > [subtitle-stream-controller]: media seeking to 6.791, state: IDLE
​ [log] > [audio-stream-controller]: IDLE->ENDED
​ [log] > [stream-controller]: Media seeked to 6.791
​ [log] > [stream-controller]: IDLE->ENDED
​ [warn] > playback not stuck anymore @6.801492, after 69ms
​ [log] > [stream-controller]: media seeking to 0.000, state: ENDED
​ [log] > [stream-controller]: ENDED->IDLE
​ [log] > [audio-stream-controller]: media seeking to 0.000, state: ENDED
​ [log] > [audio-stream-controller]: ENDED->IDLE
​ [log] > [subtitle-stream-controller]: media seeking to 0.000, state: IDLE
​ [log] > [stream-controller]: Media seeked to 0.000

Chrome media internals output

No response

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions