video-dev / hls.js

HLS.js is a JavaScript library that plays HLS in browsers with support for MSE.
https://hlsjs.video-dev.org/demo
Other
14.65k stars 2.56k forks source link

Hls.js freeze and get stalled error after multiple resize when capLevelToPlayerSize is true #6642

Closed aminghorbankhani closed 2 weeks ago

aminghorbankhani commented 3 weeks ago

What version of Hls.js are you using?

1.5.14

What browser (including version) are you using?

Chrome 127.0.6533.120 (Official Build) (arm64)

What OS (including version) are you using?

MacOS Monterey

Test stream

No response

Configuration

{
      autoStartLoad: true,
      maxStarvationDelay: 5,
      manifestLoadPolicy: {
        default: {
          maxTimeToFirstByteMs: Infinity,
          maxLoadTimeMs: 20000,
          timeoutRetry: {
            maxNumRetry: 2,
            retryDelayMs: 0,
            maxRetryDelayMs: 0,
          },
          errorRetry: {
            maxNumRetry: 1,
            retryDelayMs: 1000,
            maxRetryDelayMs: 8000,
          },
        },
      },
      playlistLoadPolicy: {
        default: {
          maxTimeToFirstByteMs: 10000,
          maxLoadTimeMs: 20000,
          timeoutRetry: {
            maxNumRetry: 2,
            retryDelayMs: 500,
            maxRetryDelayMs: 2000,
          },
          errorRetry: {
            maxNumRetry: 2,
            retryDelayMs: 500,
            maxRetryDelayMs: 2000,
          },
        },
      },
      fragLoadPolicy: {
        default: {
          maxTimeToFirstByteMs: 10000,
          maxLoadTimeMs: 60000,
          timeoutRetry: {
            maxNumRetry: 5,
            retryDelayMs: 500,
            maxRetryDelayMs: 2000,
          },
          errorRetry: {
            maxNumRetry: 5,
            retryDelayMs: 500,
            maxRetryDelayMs: 2000,
          },
        },
      },
      keyLoadPolicy: {
        default: {
          maxTimeToFirstByteMs: 8000,
          maxLoadTimeMs: 20000,
          timeoutRetry: {
            maxNumRetry: 1,
            retryDelayMs: 1000,
            maxRetryDelayMs: 20000,
            backoff: 'linear',
          },
          errorRetry: {
            maxNumRetry: 8,
            retryDelayMs: 1000,
            maxRetryDelayMs: 20000,
            backoff: 'linear',
          },
        },
      },
      certLoadPolicy: {
        default: {
          maxTimeToFirstByteMs: 8000,
          maxLoadTimeMs: 20000,
          timeoutRetry: null,
          errorRetry: null,
        },
      },
      steeringManifestLoadPolicy: {
        default: {
          maxTimeToFirstByteMs: 10000,
          maxLoadTimeMs: 20000,
          timeoutRetry: {
            maxNumRetry: 2,
            retryDelayMs: 0,
            maxRetryDelayMs: 0,
          },
          errorRetry: {
            maxNumRetry: 1,
            retryDelayMs: 1000,
            maxRetryDelayMs: 8000,
          },
        },
      },
      appendErrorMaxRetry: 6,
      maxMaxBufferLength: 60 * 3,
      maxBufferLength: 30,
      maxBufferSize: 60 * 1000 * 1000,
      maxBufferHole: 0.5,
      highBufferWatchdogPeriod: 3,
      nudgeOffset: 0.1,
      nudgeMaxRetry: 3,
      maxFragLookUpTolerance: 0.25,
      enableWorker: true,
      enableSoftwareAES: true,
      liveSyncDurationCount: 2,
      liveBackBufferLength: 600,
      startFragPrefetch: true,
      testBandwidth: true,
      ignoreDevicePixelRatio: true,
      capLevelToPlayerSize: true,
    }

Additional player setup steps

No response

Checklist

Steps to reproduce

  1. Set capLevelToPlayerSize to true in your config
  2. Start playing your video
  3. Try to resize your window multiple (e.g. resize your window from large to small and then small to large in row and fast)

Expected behaviour

I expect that when I set capLevelToPlayerSize to true and resize my player, hls.js choose correct level and does not freeze or stalled but currently when user do such a behaviour for any reason, it stalled!

What actually happened?

Some of our user reported that our player after instant resizing freezes and get stock at stalled status. After several tests we recognized that when capLevelToPlayerSize is true this issue happens.

Worth to mention that:

Console output

[log] > Debug logs enabled for "Hls instance" in hls.js version 1.5.14
player.jsx:1695 [log] > stopLoad
player.jsx:1695 [log] > loadSource:blob:http://localhost:9090/e37293e7-d4c3-45c1-9061-cc957186d2c0
player.jsx:1695 [log] > [stream-controller]: Trigger BUFFER_RESET
video-player.jsx:798 [log] > attachMedia
video-player.jsx:798 [log] > [buffer-controller] created media source: MediaSource
hls.mjs:25730 [log] > [level-controller]: manifest loaded, 6 level(s) found, first bitrate: 336394
hls.mjs:17901 [log] > [buffer-controller] 1 bufferCodec event(s) expected
hls.mjs:28060 [log] > startLoad(-1)
hls.mjs:7422 [log] > [abr] picked start tier {"videoRanges":[],"preferHDR":false,"minFramerate":0,"minBitrate":500000}
hls.mjs:25806 [log] > [level-controller]: Switching to level 1 (240p SDR @336394) from level -1
hls.mjs:25941 [log] > [level-controller]: Loading level index 1 with https://example.com/240p.mp4/chunk.m3u8
hls.mjs:10409 [log] > [stream-controller]: STOPPED->IDLE
hls.mjs:10409 [log] > [subtitle-stream-controller]: STOPPED->IDLE
hls.mjs:17789 [log] > [buffer-controller] Media source opened
hls.mjs:27102 [log] > [stream-controller]: Level 1 loaded [1,6][part-6--1], cc [0, 0] duration:10.12
hls.mjs:18462 [log] > [buffer-controller] Updating Media Source duration to 10.120
hls.mjs:9645 [log] > [stream-controller]: Loading fragment 1 cc: 0 of [1-6] level: 1, target: 0
hls.mjs:10409 [log] > [stream-controller]: IDLE->FRAG_LOADING
hls.mjs:15542 [log] > [transmuxer-interface, main]: Starting new transmux session for sn: 1 p: -1 level: 1 id: 1
        discontinuity: true
        trackSwitch: true
        contiguous: false
        accurateTimeOffset: true
        timeOffset: 0
        initSegmentChange: true
hls.mjs:13629 [log] > [mp4-remuxer]: ISGenerated flag reset
hls.mjs:13620 [log] > [mp4-remuxer]: initPTS & initDTS reset
hls.mjs:13624 [log] > [mp4-remuxer]: reset next timestamp
hls.mjs:10666 [log] > manifest codec:undefined, ADTS type:2, samplingIndex:7
hls.mjs:10816 [log] > parsed codec:mp4a.40.5, rate:22050, channels:1
hls.mjs:10409 [log] > [stream-controller]: FRAG_LOADING->PARSING
hls.mjs:27644 [log] > [stream-controller]: Init audio buffer, container:audio/mp4, codecs[selected/level/parsed]=[//mp4a.40.5]
hls.mjs:27649 [log] > [stream-controller]: Init video buffer, container:video/mp4, codecs[level/parsed]=[/avc1.4d4015]
hls.mjs:18070 [log] > [buffer-controller] 0 bufferCodec event(s) expected audio,video
hls.mjs:18537 [log] > [buffer-controller] creating sourceBuffer(audio/mp4;codecs=mp4a.40.5)
hls.mjs:18537 [log] > [buffer-controller] creating sourceBuffer(video/mp4;codecs=avc1.4d4015)
hls.mjs:21777 [log] > Setting autoLevelCapping to 2: 360p@502738 for media 561x314.15625
hls.mjs:28317 [log] > set autoLevelCapping:2
hls.mjs:15799 [log] > [audio-stream-controller]: InitPTS for cc: 0 found from main: 9090
hls.mjs:9379 [log] > [stream-controller]: Loaded fragment 1 of level 1
hls.mjs:14876 [log] > [transmuxer.ts]: Flushed fragment 1 of level 1
hls.mjs:10409 [log] > [stream-controller]: PARSING->PARSED
hls.mjs:9529 [log] > [stream-controller]: Buffered main sn: 1 of level 1 (frag:[0.000-2.080] > buffer:[0.080-2.043])
hls.mjs:10409 [log] > [stream-controller]: PARSED->IDLE
hls.mjs:26822 [log] > [stream-controller]: Adapting to level 2 from level 1
hls.mjs:25806 [log] > [level-controller]: Switching to level 2 (360p SDR @502738) from level 1
hls.mjs:25941 [log] > [level-controller]: Loading level index 2 with https://example.com/360p.mp4/chunk.m3u8
hls.mjs:10409 [log] > [stream-controller]: IDLE->WAITING_LEVEL
hls.mjs:9287 [log] > [stream-controller]: media seeking to 0.130, state: WAITING_LEVEL
hls.mjs:9287 [log] > [audio-stream-controller]: media seeking to 0.130, state: STOPPED
hls.mjs:9287 [log] > [subtitle-stream-controller]: media seeking to 0.130, state: IDLE
hls.mjs:27037 [log] > [stream-controller]: Media seeked to 0.134
hls.mjs:27102 [log] > [stream-controller]: Level 2 loaded [1,6][part-6--1], cc [0, 0] duration:10.12
hls.mjs:10409 [log] > [stream-controller]: WAITING_LEVEL->IDLE
hls.mjs:9645 [log] > [stream-controller]: Loading fragment 2 cc: 0 of [1-6] level: 2, target: 2.043
hls.mjs:10409 [log] > [stream-controller]: IDLE->FRAG_LOADING
hls.mjs:15542 [log] > [transmuxer-interface, main]: Starting new transmux session for sn: 2 p: -1 level: 2 id: 1
        discontinuity: false
        trackSwitch: true
        contiguous: false
        accurateTimeOffset: true
        timeOffset: 2
        initSegmentChange: false
hls.mjs:13629 [log] > [mp4-remuxer]: ISGenerated flag reset
hls.mjs:13620 [log] > [mp4-remuxer]: initPTS & initDTS reset
hls.mjs:13624 [log] > [mp4-remuxer]: reset next timestamp
hls.mjs:10666 [log] > manifest codec:undefined, ADTS type:2, samplingIndex:4
hls.mjs:10816 [log] > parsed codec:mp4a.40.5, rate:44100, channels:2
hls.mjs:10409 [log] > [stream-controller]: FRAG_LOADING->PARSING
hls.mjs:27644 [log] > [stream-controller]: Init audio buffer, container:audio/mp4, codecs[selected/level/parsed]=[//mp4a.40.5]
hls.mjs:27649 [log] > [stream-controller]: Init video buffer, container:video/mp4, codecs[level/parsed]=[/avc1.4d401e]
hls.mjs:9379 [log] > [stream-controller]: Loaded fragment 2 of level 2
hls.mjs:14876 [log] > [transmuxer.ts]: Flushed fragment 2 of level 2
hls.mjs:10409 [log] > [stream-controller]: PARSING->PARSED
hls.mjs:9529 [log] > [stream-controller]: Buffered main sn: 2 of level 2 (frag:[2.020-4.080] > buffer:[0.080-4.017])
hls.mjs:10409 [log] > [stream-controller]: PARSED->IDLE
hls.mjs:9645 [log] > [stream-controller]: Loading fragment 3 cc: 0 of [1-6] level: 2, target: 4.017
hls.mjs:10409 [log] > [stream-controller]: IDLE->FRAG_LOADING
hls.mjs:10409 [log] > [stream-controller]: FRAG_LOADING->PARSING
hls.mjs:9379 [log] > [stream-controller]: Loaded fragment 3 of level 2
hls.mjs:14876 [log] > [transmuxer.ts]: Flushed fragment 3 of level 2
hls.mjs:10409 [log] > [stream-controller]: PARSING->PARSED
hls.mjs:9529 [log] > [stream-controller]: Buffered main sn: 3 of level 2 (frag:[4.017-6.080] > buffer:[0.080-6.014])
hls.mjs:10409 [log] > [stream-controller]: PARSED->IDLE
hls.mjs:9645 [log] > [stream-controller]: Loading fragment 4 cc: 0 of [1-6] level: 2, target: 6.014
hls.mjs:10409 [log] > [stream-controller]: IDLE->FRAG_LOADING
hls.mjs:10409 [log] > [stream-controller]: FRAG_LOADING->PARSING
hls.mjs:9379 [log] > [stream-controller]: Loaded fragment 4 of level 2
hls.mjs:14876 [log] > [transmuxer.ts]: Flushed fragment 4 of level 2
hls.mjs:10409 [log] > [stream-controller]: PARSING->PARSED
hls.mjs:9529 [log] > [stream-controller]: Buffered main sn: 4 of level 2 (frag:[6.014-8.080] > buffer:[0.080-8.011])
hls.mjs:10409 [log] > [stream-controller]: PARSED->IDLE
hls.mjs:9645 [log] > [stream-controller]: Loading fragment 5 cc: 0 of [1-6] level: 2, target: 8.011
hls.mjs:10409 [log] > [stream-controller]: IDLE->FRAG_LOADING
hls.mjs:10409 [log] > [stream-controller]: FRAG_LOADING->PARSING
hls.mjs:9379 [log] > [stream-controller]: Loaded fragment 5 of level 2
hls.mjs:14876 [log] > [transmuxer.ts]: Flushed fragment 5 of level 2
hls.mjs:10409 [log] > [stream-controller]: PARSING->PARSED
hls.mjs:9529 [log] > [stream-controller]: Buffered main sn: 5 of level 2 (frag:[8.011-10.080] > buffer:[0.080-10.008])
hls.mjs:10409 [log] > [stream-controller]: PARSED->IDLE
hls.mjs:9645 [log] > [stream-controller]: Loading fragment 6 cc: 0 of [1-6] level: 2, target: 10.008
hls.mjs:10409 [log] > [stream-controller]: IDLE->FRAG_LOADING
hls.mjs:10409 [log] > [stream-controller]: FRAG_LOADING->PARSING
hls.mjs:9379 [log] > [stream-controller]: Loaded fragment 6 of level 2
hls.mjs:14876 [log] > [transmuxer.ts]: Flushed fragment 6 of level 2
hls.mjs:10409 [log] > [stream-controller]: PARSING->PARSED
hls.mjs:9529 [log] > [stream-controller]: Buffered main sn: 6 of level 2 (frag:[10.008-10.200] > buffer:[0.080-10.101])
hls.mjs:10409 [log] > [stream-controller]: PARSED->IDLE
hls.mjs:18296 [log] > [buffer-controller] audio sourceBuffer now EOS
hls.mjs:18296 [log] > [buffer-controller] video sourceBuffer now EOS
hls.mjs:18302 [log] > [buffer-controller] Queueing mediaSource.endOfStream()
hls.mjs:10409 [log] > [stream-controller]: IDLE->ENDED
hls.mjs:18319 [log] > [buffer-controller] Calling mediaSource.endOfStream()
hls.mjs:17808 [log] > [buffer-controller] Media source ended
player.jsx:1511 [log] > Debug logs enabled for "Hls instance" in hls.js version 1.5.14
player.jsx:1695 [log] > stopLoad
player.jsx:1695 [log] > loadSource:https://www.example.com/waa64ay.m3u8?k=90e0c
player.jsx:1695 [log] > [stream-controller]: Trigger BUFFER_RESET
hls.mjs:25730 [log] > [level-controller]: manifest loaded, 6 level(s) found, first bitrate: 472277
hls.mjs:17901 [log] > [buffer-controller] 1 bufferCodec event(s) expected
hls.mjs:28060 [log] > startLoad(-1)
hls.mjs:25806 [log] > [level-controller]: Switching to level 0 (148p SDR @124274) from level -1
hls.mjs:25941 [log] > [level-controller]: Loading level index 0 with https://example.com/144p.apt/chunk.m3u8?wmsAuthSign=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0b2tlbiI6ImE3NmI0YmY0MjM1ZWRkMmUyYTllMTRlNGQxYjNkYjBmIiwiZXhwIjoxNzI0MjU3NTY4LCJpc3MiOiJTYWJhIElkZWEgR1NJRyJ9.C9E-Y2nIV7ryOfOtm_DEa5vAmnBXU4lG42JKSA5yThQ
hls.mjs:10409 [log] > [stream-controller]: STOPPED->IDLE
hls.mjs:10409 [log] > [subtitle-stream-controller]: STOPPED->IDLE
hls.mjs:27102 [log] > [stream-controller]: Level 0 loaded [1,9][part-9--1], cc [0, 0] duration:86.467
hls.mjs:26890 [log] > [stream-controller]: Fragment 1 of level 0 is being downloaded to test bitrate and will not be buffered
hls.mjs:9645 [log] > [stream-controller]: Loading fragment 1 cc: 0 of [1-9] level: 0, target: 0
hls.mjs:10409 [log] > [stream-controller]: IDLE->FRAG_LOADING
hls.mjs:10409 [log] > [stream-controller]: FRAG_LOADING->IDLE
hls.mjs:7422 [log] > [abr] picked start tier {"videoRanges":[],"preferHDR":false,"minFramerate":0,"minBitrate":22740702.405462943}
hls.mjs:26822 [log] > [stream-controller]: Adapting to level 5 from level 0
hls.mjs:25806 [log] > [level-controller]: Switching to level 5 (1080p SDR @3960928) from level 0
hls.mjs:25941 [log] > [level-controller]: Loading level index 5 with https://example.com/1080p.apt/chunk.m3u8?wmsAuthSign=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0b2tlbiI6ImE3NmI0YmY0MjM1ZWRkMmUyYTllMTRlNGQxYjNkYjBmIiwiZXhwIjoxNzI0MjU3NTY4LCJpc3MiOiJTYWJhIElkZWEgR1NJRyJ9.C9E-Y2nIV7ryOfOtm_DEa5vAmnBXU4lG42JKSA5yThQ
hls.mjs:10409 [log] > [stream-controller]: IDLE->WAITING_LEVEL
hls.mjs:27102 [log] > [stream-controller]: Level 5 loaded [1,9][part-9--1], cc [0, 0] duration:86.333
hls.mjs:10409 [log] > [stream-controller]: WAITING_LEVEL->IDLE
hls.mjs:9645 [log] > [stream-controller]: Loading fragment 1 cc: 0 of [1-9] level: 5, target: 0
hls.mjs:10409 [log] > [stream-controller]: IDLE->FRAG_LOADING
hls.mjs:21777 [log] > Setting autoLevelCapping to 4: 720p@1513196 for media 1117x625.515625
hls.mjs:28317 [log] > set autoLevelCapping:4
hls.mjs:18643 [log] > [buffer-controller] Removing [4.5792290249433085,10.2] from the audio SourceBuffer
hls.mjs:18643 [log] > [buffer-controller] Removing [4.5792290249433085,10.2] from the video SourceBuffer
hls.mjs:10299 [log] > [stream-controller]: Reset loading state
hls.mjs:10409 [log] > [stream-controller]: ENDED->IDLE
hls.mjs:9645 [log] > [stream-controller]: Loading fragment 3 cc: 0 of [1-6] level: 2, target: 4.56
hls.mjs:10409 [log] > [stream-controller]: IDLE->FRAG_LOADING
hls.mjs:15542 [log] > [transmuxer-interface, main]: Starting new transmux session for sn: 3 p: -1 level: 2 id: 1
        discontinuity: false
        trackSwitch: false
        contiguous: false
        accurateTimeOffset: true
        timeOffset: 4.017049433106567
        initSegmentChange: false
hls.mjs:13624 [log] > [mp4-remuxer]: reset next timestamp
hls.mjs:10409 [log] > [stream-controller]: FRAG_LOADING->PARSING
hls.mjs:9379 [log] > [stream-controller]: Loaded fragment 3 of level 2
hls.mjs:14876 [log] > [transmuxer.ts]: Flushed fragment 3 of level 2
hls.mjs:10409 [log] > [stream-controller]: PARSING->PARSED
hls.mjs:9529 [log] > [stream-controller]: Buffered main sn: 3 of level 2 (frag:[4.017-6.080] > buffer:[0.080-6.014])
hls.mjs:10409 [log] > [stream-controller]: PARSED->IDLE
hls.mjs:26822 [log] > [stream-controller]: Adapting to level 4 from level 2
hls.mjs:25806 [log] > [level-controller]: Switching to level 4 (720p SDR @1513196) from level 2
hls.mjs:25941 [log] > [level-controller]: Loading level index 4 with https://example.com/720p.mp4/chunk.m3u8
hls.mjs:10409 [log] > [stream-controller]: IDLE->WAITING_LEVEL
hls.mjs:27102 [log] > [stream-controller]: Level 4 loaded [1,6][part-6--1], cc [0, 0] duration:10.12
hls.mjs:10409 [log] > [stream-controller]: WAITING_LEVEL->IDLE
hls.mjs:9645 [log] > [stream-controller]: Loading fragment 4 cc: 0 of [1-6] level: 4, target: 6.014
hls.mjs:10409 [log] > [stream-controller]: IDLE->FRAG_LOADING
hls.mjs:15542 [log] > [transmuxer-interface, main]: Starting new transmux session for sn: 4 p: -1 level: 4 id: 1
        discontinuity: false
        trackSwitch: true
        contiguous: false
        accurateTimeOffset: true
        timeOffset: 6
        initSegmentChange: false
hls.mjs:13629 [log] > [mp4-remuxer]: ISGenerated flag reset
hls.mjs:13620 [log] > [mp4-remuxer]: initPTS & initDTS reset
hls.mjs:13624 [log] > [mp4-remuxer]: reset next timestamp
hls.mjs:10666 [log] > manifest codec:undefined, ADTS type:2, samplingIndex:4
hls.mjs:10816 [log] > parsed codec:mp4a.40.5, rate:44100, channels:2
hls.mjs:10409 [log] > [stream-controller]: FRAG_LOADING->PARSING
hls.mjs:27644 [log] > [stream-controller]: Init audio buffer, container:audio/mp4, codecs[selected/level/parsed]=[//mp4a.40.5]
hls.mjs:27649 [log] > [stream-controller]: Init video buffer, container:video/mp4, codecs[level/parsed]=[/avc1.4d401f]
hls.mjs:9379 [log] > [stream-controller]: Loaded fragment 4 of level 4
hls.mjs:14876 [log] > [transmuxer.ts]: Flushed fragment 4 of level 4
hls.mjs:10409 [log] > [stream-controller]: PARSING->PARSED
hls.mjs:9529 [log] > [stream-controller]: Buffered main sn: 4 of level 4 (frag:[6.014-8.080] > buffer:[0.080-8.011])
hls.mjs:10409 [log] > [stream-controller]: PARSED->IDLE
hls.mjs:9645 [log] > [stream-controller]: Loading fragment 5 cc: 0 of [1-6] level: 4, target: 8.011
hls.mjs:10409 [log] > [stream-controller]: IDLE->FRAG_LOADING
hls.mjs:10409 [log] > [stream-controller]: FRAG_LOADING->PARSING
hls.mjs:9379 [log] > [stream-controller]: Loaded fragment 5 of level 4
hls.mjs:14876 [log] > [transmuxer.ts]: Flushed fragment 5 of level 4
hls.mjs:10409 [log] > [stream-controller]: PARSING->PARSED
hls.mjs:9529 [log] > [stream-controller]: Buffered main sn: 5 of level 4 (frag:[8.011-10.080] > buffer:[0.080-10.008])
hls.mjs:10409 [log] > [stream-controller]: PARSED->IDLE
hls.mjs:9645 [log] > [stream-controller]: Loading fragment 6 cc: 0 of [1-6] level: 4, target: 10.008
hls.mjs:10409 [log] > [stream-controller]: IDLE->FRAG_LOADING
hls.mjs:10409 [log] > [stream-controller]: FRAG_LOADING->PARSING
hls.mjs:9379 [log] > [stream-controller]: Loaded fragment 6 of level 4
hls.mjs:14876 [log] > [transmuxer.ts]: Flushed fragment 6 of level 4
hls.mjs:10409 [log] > [stream-controller]: PARSING->PARSED
hls.mjs:9529 [log] > [stream-controller]: Buffered main sn: 6 of level 4 (frag:[10.008-10.200] > buffer:[0.080-10.101])
hls.mjs:10409 [log] > [stream-controller]: PARSED->IDLE
hls.mjs:18296 [log] > [buffer-controller] audio sourceBuffer now EOS
hls.mjs:18296 [log] > [buffer-controller] video sourceBuffer now EOS
hls.mjs:18302 [log] > [buffer-controller] Queueing mediaSource.endOfStream()
hls.mjs:10409 [log] > [stream-controller]: IDLE->ENDED
hls.mjs:18319 [log] > [buffer-controller] Calling mediaSource.endOfStream()
hls.mjs:17808 [log] > [buffer-controller] Media source ended
hls.mjs:21777 [log] > Setting autoLevelCapping to 1: 240p@336394 for media 406x227.359375
hls.mjs:28317 [log] > set autoLevelCapping:1
hls.mjs:15542 [log] > [transmuxer-interface, main]: Starting new transmux session for sn: 1 p: -1 level: 5 id: 1
        discontinuity: true
        trackSwitch: true
        contiguous: false
        accurateTimeOffset: true
        timeOffset: 0
        initSegmentChange: true
hls.mjs:13629 [log] > [mp4-remuxer]: ISGenerated flag reset
hls.mjs:13620 [log] > [mp4-remuxer]: initPTS & initDTS reset
hls.mjs:13624 [log] > [mp4-remuxer]: reset next timestamp
hls.mjs:10666 [log] > manifest codec:undefined, ADTS type:2, samplingIndex:4
hls.mjs:10816 [log] > parsed codec:mp4a.40.5, rate:44100, channels:2
hls.mjs:10409 [log] > [stream-controller]: FRAG_LOADING->PARSING
hls.mjs:27644 [log] > [stream-controller]: Init audio buffer, container:audio/mp4, codecs[selected/level/parsed]=[//mp4a.40.5]
hls.mjs:27649 [log] > [stream-controller]: Init video buffer, container:video/mp4, codecs[level/parsed]=[/avc1.640028]
hls.mjs:18070 [log] > [buffer-controller] 0 bufferCodec event(s) expected audio,video
hls.mjs:15799 [log] > [audio-stream-controller]: InitPTS for cc: 0 found from main: 9090
hls.mjs:9379 [log] > [stream-controller]: Loaded fragment 1 of level 5
hls.mjs:14876 [log] > [transmuxer.ts]: Flushed fragment 1 of level 5
hls.mjs:10409 [log] > [stream-controller]: PARSING->PARSED
hls.mjs:21777 [log] > Setting autoLevelCapping to 4: 720p@1513196 for media 1075x602
hls.mjs:28317 [log] > set autoLevelCapping:4
hls.mjs:18643 [log] > [buffer-controller] Removing [0,1.0201333333333333] from the audio SourceBuffer
hls.mjs:18643 [log] > [buffer-controller] Removing [0,1.0201333333333333] from the video SourceBuffer
hls.mjs:18643 [log] > [buffer-controller] Removing [6.5792290249433085,10.2] from the audio SourceBuffer
hls.mjs:10299 [log] > [stream-controller]: Reset loading state
hls.mjs:10409 [log] > [stream-controller]: ENDED->IDLE
hls.mjs:9645 [log] > [stream-controller]: Loading fragment 6 cc: 0 of [1-6] level: 4, target: 10.101
hls.mjs:10409 [log] > [stream-controller]: IDLE->FRAG_LOADING
hls.mjs:18643 [log] > [buffer-controller] Removing [6.5792290249433085,10.2] from the video SourceBuffer
hls.mjs:15542 [log] > [transmuxer-interface, main]: Starting new transmux session for sn: 6 p: -1 level: 4 id: 1
        discontinuity: false
        trackSwitch: false
        contiguous: false
        accurateTimeOffset: true
        timeOffset: 10.007803854875256
        initSegmentChange: false
hls.mjs:13624 [log] > [mp4-remuxer]: reset next timestamp
hls.mjs:13953 [log] > Video: Initial PTS/DTS adjusted: 10200/10120, delta: -120 ms
hls.mjs:10409 [log] > [stream-controller]: FRAG_LOADING->PARSING
hls.mjs:9379 [log] > [stream-controller]: Loaded fragment 6 of level 4
hls.mjs:14876 [log] > [transmuxer.ts]: Flushed fragment 6 of level 4
hls.mjs:10409 [log] > [stream-controller]: PARSING->PARSED
hls.mjs:9529 [log] > [stream-controller]: Buffered main sn: 6 of level 4 (frag:[10.008-10.320] > buffer:[2.080-6.440])
hls.mjs:10409 [log] > [stream-controller]: PARSED->IDLE
hls.mjs:18296 [log] > [buffer-controller] audio sourceBuffer now EOS
hls.mjs:18296 [log] > [buffer-controller] video sourceBuffer now EOS
hls.mjs:18302 [log] > [buffer-controller] Queueing mediaSource.endOfStream()
hls.mjs:10409 [log] > [stream-controller]: IDLE->ENDED
hls.mjs:18319 [log] > [buffer-controller] Calling mediaSource.endOfStream()
hls.mjs:17808 [log] > [buffer-controller] Media source ended
hls.mjs:21777 [log] > Setting autoLevelCapping to 1: 240p@336394 for media 275x154
hls.mjs:28317 [log] > set autoLevelCapping:1
hls.mjs:21777 [log] > Setting autoLevelCapping to 3: 480p@768075 for media 776x434.5546875
hls.mjs:28317 [log] > set autoLevelCapping:3
hls.mjs:18643 [log] > [buffer-controller] Removing [0,3.0170494331065667] from the audio SourceBuffer
hls.mjs:18643 [log] > [buffer-controller] Removing [0,3.0170494331065667] from the video SourceBuffer
hls.mjs:10299 [log] > [stream-controller]: Reset loading state
hls.mjs:10409 [log] > [stream-controller]: ENDED->IDLE
hls.mjs:18296 [log] > [buffer-controller] audio sourceBuffer now EOS
hls.mjs:18296 [log] > [buffer-controller] video sourceBuffer now EOS
hls.mjs:18302 [log] > [buffer-controller] Queueing mediaSource.endOfStream()
hls.mjs:10409 [log] > [stream-controller]: IDLE->ENDED
hls.mjs:18319 [log] > [buffer-controller] Calling mediaSource.endOfStream()
hls.mjs:17808 [log] > [buffer-controller] Media source ended
hls.mjs:21777 [log] > Setting autoLevelCapping to 2: 360p@502738 for media 493x276.078125
hls.mjs:28317 [log] > set autoLevelCapping:2
hls.mjs:21777 [log] > Setting autoLevelCapping to 0: 144p@225234 for media 150x84
hls.mjs:28317 [log] > set autoLevelCapping:0
hls.mjs:21777 [log] > Setting autoLevelCapping to 2: 360p@502738 for media 572x320.3125
hls.mjs:28317 [log] > set autoLevelCapping:2

Chrome media internals output

No response

robwalch commented 3 weeks ago

Hi @aminghorbankhani,

The logs show that your page is reloading and resetting the buffer (not HLS.js):

Media is completely buffered:

[stream-controller]: Buffered main sn: 6 of level 2 (frag:[10.008-10.200] > buffer:[0.080-10.101])
[stream-controller]: PARSED->IDLE
[buffer-controller] audio sourceBuffer now EOS
[buffer-controller] video sourceBuffer now EOS
[buffer-controller] Queueing mediaSource.endOfStream()
[stream-controller]: IDLE->ENDED
[buffer-controller] Calling mediaSource.endOfStream()
[buffer-controller] Media source ended

The page is reloading the resource which resets the buffer:

player.jsx:1695 [log] > loadSource:https://www.example.com/waa64ay.m3u8?k=90e0c
robwalch commented 3 weeks ago

This appears to be an issue with the integration of hls.js. I cannot reproduce the issue using the demo page with the provided configuration and any of the sample assets.