Skip to content

Seeking backwards behind buffered range leads to significant buffering #7576

@krseager

Description

@krseager

What version of Hls.js are you using?

1.6.13

What browser (including version) are you using?

141.0.7390.77 (Official Build) (arm64)

What OS (including version) are you using?

MacOS Sequoia 15.7.1

Test stream

https://hlsjs.video-dev.org/demo/?src=https%3A%2F%2Fplayertest.longtailvideo.com%2Fadaptive%2Faes-with-tracks%2Fmaster.m3u8&demoConfig=eyJlbmFibGVTdHJlYW1pbmciOnRydWUsImF1dG9SZWNvdmVyRXJyb3IiOnRydWUsInN0b3BPblN0YWxsIjpmYWxzZSwiZHVtcGZNUDQiOmZhbHNlLCJsZXZlbENhcHBpbmciOi0xLCJsaW1pdE1ldHJpY3MiOi0xfQ==

Configuration

{
  "debug": true,
  "enableWorker": true,
  "backBufferLength": 90,
  "maxBufferHole": 4,
  "maxMaxBufferLength": 8,
  "maxBufferLength": 8
}

Additional player setup steps

Issue is most easily reproducible with lower bandwidth.

Checklist

Steps to reproduce

  1. Start network throttling i.e. (Slow 4g) & disable cache
  2. Start loading the stream
  3. Start Playback
  4. Seek to around position 20
  5. Notice previously loading fragments are canceled (expected if not buffering at currentTime that is within the range being buffered)
  6. After playback resumes after buffering, seek back to roughly 3 seconds before the active buffered range
  7. Notice fragments in the future are not canceled even though there is currently no media to be played at current position
  8. Notice as well that a check for if a seek backwards occurred in getFwdBufferInfo inside base-stream-controller returns false when it should be true
  9. Notice fragment at current position is never loaded & buffering occurs endlessly

Expected behaviour

  1. If seeking backwards behind a buffered range, fragments being loaded in the future should be aborted.
  2. If seeking backwards occurs, getFwdBufferInfo should correctly detect a seek backward & pass a 0 for the buffer hole size to allow fragment loading to occur at the current position

What actually happened?

Heavy buffering is encountered due to fragment loading not being aborted and in case of maxBufferHole size being set, could lead to endless buffering.

Console output

hls.ts:433 [log] > destroy
hls.ts:482 [log] > detachMedia
buffer-controller.ts:466 [log] > [buffer-controller]: media source detaching
base-stream-controller.ts:2230 [log] > [stream-controller]: IDLE->STOPPED
base-stream-controller.ts:2230 [log] > [audio-stream-controller]: IDLE->STOPPED
blob:https://hlsjs.video-dev.org/05320b4e-8435-4c4b-adb5-13a9693e5ce7:1168 [log] > Debug logs enabled for "main" in hls.js version 1.6.13
blob:https://hlsjs.video-dev.org/05320b4e-8435-4c4b-adb5-13a9693e5ce7:1168 [log] > Debug logs enabled for "audio" in hls.js version 1.6.13
base-stream-controller.ts:2230 [log] > [subtitle-stream-controller]: IDLE->STOPPED
interstitials-controller.ts:288 [log] > [interstitials]: clear schedule state
main.js:350 Using Hls.js config: {debug: true, enableWorker: true, lowLatencyMode: true, backBufferLength: 0, maxBufferHole: 6, …}
logger.ts:102 [log] > Debug logs enabled for "Hls instance" in hls.js version 1.6.13
hls.ts:579 [log] > stopLoad
hls.ts:513 [log] > loadSource:https://playertest.longtailvideo.com/adaptive/aes-with-tracks/master.m3u8
interstitials-controller.ts:288 [log] > [interstitials]: clear schedule state
stream-controller.ts:601 [log] > [stream-controller]: Trigger BUFFER_RESET
hls.ts:466 [log] > attachMedia
buffer-controller.ts:320 [log] > [buffer-controller]: created media source: MediaSource
buffer-controller.ts:1546 [log] > [buffer-controller]: Media source opened
buffer-controller.ts:1375 [log] > [buffer-controller]: checkPendingTracks (pending: 0 codec events expected: 0) {}
level-controller.ts:351 [log] > [level-controller]: manifest loaded, 1 level(s) found, first bitrate: 2051101
abr-controller.ts:65 [log] > [abr]: setting initial bwe to 2051101
buffer-controller.ts:266 [log] > [buffer-controller]: 2 bufferCodec event(s) expected.
playlist-loader.ts:397 [log] > auto startLoad with configured startPosition -1
hls.ts:556 [log] > startLoad(-1)
level-controller.ts:450 [log] > [level-controller]: Switching to level 0 (720p SDR avc1,mp4a @2051101) from level -1
audio-track-controller.ts:187 [log] > [audio-track-controller]: Updating audio tracks, 1 track(s) found in group(s): audio_aac
audio-track-controller.ts:326 [log] > [audio-track-controller]: Switching to audio-track 0 "Unknown" lang:und group:audio_aac channels:undefined
base-stream-controller.ts:2054 [log] > [audio-stream-controller]: Reset loading state
level-controller.ts:655 [log] > [level-controller]: Loading level index 0 https://playertest.longtailvideo.com/adaptive/aes-with-tracks/media-1/stream.m3u8
base-stream-controller.ts:2230 [log] > [stream-controller]: STOPPED->IDLE
audio-track-controller.ts:421 [log] > [audio-track-controller]: Loading audio-track 0 "Unknown" lang:und group:audio_aac https://playertest.longtailvideo.com/adaptive/aes-with-tracks/audio/aac/und/stream.m3u8
base-stream-controller.ts:2230 [log] > [audio-stream-controller]: STOPPED->WAITING_TRACK
base-stream-controller.ts:2230 [log] > [subtitle-stream-controller]: STOPPED->IDLE
audio-track-controller.ts:101 [log] > [audio-track-controller]: Audio track 0 "Unknown" lang:und group:audio_aac loaded [0-4]
stream-controller.ts:661 [log] > [stream-controller]: Level 0 loaded [0,3][part-3--1], cc [0, 0] duration:29.519999999999996
base-stream-controller.ts:1823 [log] > [stream-controller]: setting startPosition to 0 by default
interstitials-controller.ts:1036 [log] > [interstitials]: [checkStart] Advancing timeline position to 0
interstitials-controller.ts:1135 [log] > [interstitials]: setSchedulePosition 0, undefined ([primary: 0.00-29.52]) pos: 0
interstitials-controller.ts:2005 [log] > [interstitials]: INTERSTITIALS_BUFFERED_TO_BOUNDARY [primary: 0.00-29.52]
interstitials-controller.ts:1397 [log] > [interstitials]: resuming [primary: 0.00-29.52]
interstitials-controller.ts:1487 [log] > [interstitials]: [attachPrimary] Advancing timeline position to 0
buffer-controller.ts:1352 [log] > [buffer-controller]: Updating MediaSource duration to 29.520
base-stream-controller.ts:839 [log] > [stream-controller]: Loading key for 0 of [0-3], level 0
base-stream-controller.ts:2230 [log] > [stream-controller]: IDLE->KEY_LOADING
key-loader.ts:222 [log] > [key-loader]: Loading URI: https://playertest.longtailvideo.com/adaptive/aes-with-tracks/media-1/key.bin from main 0
base-stream-controller.ts:965 [log] > [stream-controller]: Loading main sn: 0 of level 0 (frag:[0.000-8.400]) cc: 0 [0-3], target: 0
base-stream-controller.ts:2230 [log] > [stream-controller]: KEY_LOADING->FRAG_LOADING
audio-stream-controller.ts:548 [log] > [audio-stream-controller]: Audio track 0 "Unknown" of "audio_aac" loaded [0,4][part-4--1],duration:29.546667
base-stream-controller.ts:1823 [log] > [audio-stream-controller]: setting startPosition to 0 by default
base-stream-controller.ts:2230 [log] > [audio-stream-controller]: WAITING_TRACK->IDLE
base-stream-controller.ts:839 [log] > [audio-stream-controller]: Loading key for 0 of [0-4], track 0
base-stream-controller.ts:2230 [log] > [audio-stream-controller]: IDLE->KEY_LOADING
key-loader.ts:222 [log] > [key-loader]: Loading URI: https://playertest.longtailvideo.com/adaptive/aes-with-tracks/audio/aac/und/key.bin from audio 0
base-stream-controller.ts:965 [log] > [audio-stream-controller]: Loading audio sn: 0 of track 0 (frag:[0.000-6.016]) cc: 0 [0-4], target: 0
base-stream-controller.ts:2230 [log] > [audio-stream-controller]: KEY_LOADING->FRAG_LOADING
transmuxer-interface.ts:88 [log] > injecting Web Worker for "audio"
audio-stream-controller.ts:675 [log] > [audio-stream-controller]: Unknown video PTS for cc 0, waiting for video PTS before demuxing audio frag 0 of [0 ,4],track 0
base-stream-controller.ts:2230 [log] > [audio-stream-controller]: FRAG_LOADING->WAITING_INIT_PTS
base-stream-controller.ts:537 [log] > [audio-stream-controller]: Loaded audio sn: 0 of track 0
2b5f2ce3-0def-4abd-a52a-dd526138394b:1168 [log] > Debug logs enabled for "audio" in hls.js version 1.6.13
transmuxer-interface.ts:88 [log] > injecting Web Worker for "main"
transmuxer-interface.ts:238 [log] > [transmuxer-interface]: Starting new transmux session for main sn: 0 level: 0 id: 1
        discontinuity: true
        trackSwitch: true
        contiguous: false
        accurateTimeOffset: true
        timeOffset: 0
        initSegmentChange: true
base-stream-controller.ts:537 [log] > [stream-controller]: Loaded main sn: 0 of level 0
2b5f2ce3-0def-4abd-a52a-dd526138394b:1168 [log] > Debug logs enabled for "main" in hls.js version 1.6.13
2b5f2ce3-0def-4abd-a52a-dd526138394b:6343 [log] > [decrypter]: WebCrypto AES decrypt
transmuxer-interface.ts:396 [log] > [mp4-remuxer]: ISGenerated flag reset
transmuxer-interface.ts:396 [log] > [mp4-remuxer]: Reset initPTS: null > null
transmuxer-interface.ts:396 [log] > [mp4-remuxer]: reset next timestamp
transmuxer-interface.ts:396 [log] > [mp4-remuxer]: Adjusting PTS for rollover in timeline near -0.1111111111111111 video
transmuxer-interface.ts:396 [log] > [mp4-remuxer]: Adjusting PTS for rollover in timeline near -0.1111111111111111 video
transmuxer-interface.ts:396 [log] > [mp4-remuxer]: Found initPTS at playlist time: 0 offset: 95443.8288 (8589944592/90000) trackId: 1
base-stream-controller.ts:2230 [log] > [stream-controller]: FRAG_LOADING->PARSING
stream-controller.ts:1519 [log] > [stream-controller]: Init video buffer, container:video/mp4, codecs[level/parsed]=[avc1.4D401F/avc1.4d401f]
buffer-controller.ts:594 [log] > [buffer-controller]: BUFFER_CODECS: "video" (current SB count 0)
buffer-controller.ts:1375 [log] > [buffer-controller]: checkPendingTracks (pending: 1 codec events expected: 2) {"video":{"listeners":[],"codec":"avc1.4d401f","container":"video/mp4","levelCodec":"avc1.4D401F","metadata":{"width":1280,"height":720},"id":"main"}}
buffer-controller.ts:952 [log] > [buffer-controller]: queuing "video" append sn: 0 of level 0 cc: 0
audio-stream-controller.ts:153 [log] > [audio-stream-controller]: InitPTS for cc: 0 found from main: 95443.8288 (8589944592/90000) trackId: 1
buffer-controller.ts:952 [log] > [buffer-controller]: queuing "video" append sn: 0 of level 0 cc: 0
transmuxer-interface.ts:396 [log] > [transmuxer.ts]: Flushed main sn: 0 of level 0
base-stream-controller.ts:2230 [log] > [stream-controller]: PARSING->PARSED
base-stream-controller.ts:2177 [log] > [stream-controller]: Parsed main sn: 0 of level 0 (frag:[0.000-8.400])
base-stream-controller.ts:2230 [log] > [audio-stream-controller]: WAITING_INIT_PTS->FRAG_LOADING
transmuxer-interface.ts:238 [log] > [transmuxer-interface]: Starting new transmux session for audio sn: 0 track: 0 id: 1
        discontinuity: true
        trackSwitch: true
        contiguous: false
        accurateTimeOffset: false
        timeOffset: 0
        initSegmentChange: true
2b5f2ce3-0def-4abd-a52a-dd526138394b:6343 [log] > [decrypter]: WebCrypto AES decrypt
transmuxer-interface.ts:396 [log] > ADTS sync word found !
transmuxer-interface.ts:396 [log] > [mp4-remuxer]: ISGenerated flag reset
transmuxer-interface.ts:396 [log] > [mp4-remuxer]: Reset initPTS: null > 95443.8288 (8589944592/90000) trackId: 1
transmuxer-interface.ts:396 [log] > [mp4-remuxer]: reset next timestamp
2b5f2ce3-0def-4abd-a52a-dd526138394b:11133 [log] > manifest codec:mp4a.40.2, parsed codec:mp4a.40.2, channels:6, rate:48000 (ADTS object type:2 sampling index:3)
transmuxer-interface.ts:396 [warn] > [mp4-remuxer]: Audio frame @ 95443.718s overlaps marker by -111 ms.
TransmuxerInterface.onWorkerMessage @ transmuxer-interface.ts:396
base-stream-controller.ts:2230 [log] > [audio-stream-controller]: FRAG_LOADING->PARSING
audio-stream-controller.ts:965 [log] > [audio-stream-controller]: Init audio buffer, container:audio/mp4, codecs[level/parsed]=[mp4a.40.2/mp4a.40.2]
buffer-controller.ts:594 [log] > [buffer-controller]: BUFFER_CODECS: "audio" (current SB count 0)
buffer-controller.ts:1375 [log] > [buffer-controller]: checkPendingTracks (pending: 2 codec events expected: 2) {"video":{"listeners":[],"codec":"avc1.4d401f","container":"video/mp4","levelCodec":"avc1.4D401F","metadata":{"width":1280,"height":720},"id":"main"},"audio":{"listeners":[],"codec":"mp4a.40.2","container":"audio/mp4","levelCodec":"mp4a.40.2","metadata":{"channelCount":6},"id":"audio"}}
buffer-controller.ts:1444 [log] > [buffer-controller]: creating sourceBuffer(video/mp4;codecs=avc1.4d401f) Queued {"listeners":[],"codec":"avc1.4d401f","container":"video/mp4","levelCodec":"avc1.4D401F","metadata":{"width":1280,"height":720},"id":"main"}
buffer-controller.ts:1444 [log] > [buffer-controller]: creating sourceBuffer(audio/mp4;codecs=mp4a.40.2) {"listeners":[],"codec":"mp4a.40.2","container":"audio/mp4","levelCodec":"mp4a.40.2","metadata":{"channelCount":6},"id":"audio"}
stream-controller.ts:964 [log] > [stream-controller]: Alternate track found, use video.buffered to schedule main fragment loading
buffer-controller.ts:1413 [log] > [buffer-controller]: SourceBuffers created. Running queue: 
video: (SourceBuffer) append-video, append-video, async-blocker
audio: (SourceBuffer) 
audiovideo: (none) }
buffer-controller.ts:952 [log] > [buffer-controller]: queuing "audio" append sn: 0 of track 0 cc: 0
buffer-controller.ts:952 [log] > [buffer-controller]: queuing "audio" append sn: 0 of track 0 cc: 0
transmuxer-interface.ts:396 [log] > [transmuxer.ts]: Flushed audio sn: 0 of track 0
base-stream-controller.ts:2230 [log] > [audio-stream-controller]: PARSING->PARSED
base-stream-controller.ts:2177 [log] > [audio-stream-controller]: Parsed audio sn: 0 of track 0 (frag:[0.000-5.884])
buffer-controller.ts:1639 [log] > [buffer-controller]: Updating video SourceBuffer timestampOffset to -95443.8288 (sn: 0 cc: 0)
buffer-controller.ts:1639 [log] > [buffer-controller]: Updating audio SourceBuffer timestampOffset to -95443.8288 (sn: 0 cc: 0)
base-stream-controller.ts:768 [log] > [audio-stream-controller]: Buffered audio sn: 0 of track 0 (frag:[0.000-5.884] > buffer:[0.000-5.905])
base-stream-controller.ts:2230 [log] > [audio-stream-controller]: PARSED->IDLE
base-stream-controller.ts:839 [log] > [audio-stream-controller]: Loading key for 1 of [0-4], track 0
base-stream-controller.ts:2230 [log] > [audio-stream-controller]: IDLE->KEY_LOADING
base-stream-controller.ts:965 [log] > [audio-stream-controller]: Loading audio sn: 1 of track 0 (frag:[5.884-11.900]) cc: 0 [0-4], target: 5.905
base-stream-controller.ts:2230 [log] > [audio-stream-controller]: KEY_LOADING->FRAG_LOADING
base-stream-controller.ts:768 [log] > [stream-controller]: Buffered main sn: 0 of level 0 (frag:[0.000-8.400] > buffer:[0.000-8.400])
base-stream-controller.ts:2230 [log] > [stream-controller]: PARSED->IDLE
base-stream-controller.ts:839 [log] > [stream-controller]: Loading key for 1 of [0-3], level 0
base-stream-controller.ts:2230 [log] > [stream-controller]: IDLE->KEY_LOADING
base-stream-controller.ts:965 [log] > [stream-controller]: Loading main sn: 1 of level 0 (frag:[8.400-16.080]) cc: 0 [0-3], target: 8.4
base-stream-controller.ts:2230 [log] > [stream-controller]: KEY_LOADING->FRAG_LOADING
favicon.ico:1  GET https://hlsjs.video-dev.org/favicon.ico 404 (Not Found)
base-stream-controller.ts:355 [log] > [stream-controller]: Media seeking to 22.459, state: FRAG_LOADING, out of buffer
base-stream-controller.ts:379 [log] > [stream-controller]: Cancelling fragment load for seek (sn: 1)
base-stream-controller.ts:2054 [log] > [stream-controller]: Reset loading state
base-stream-controller.ts:2230 [log] > [stream-controller]: FRAG_LOADING->IDLE
base-stream-controller.ts:1851 [log] > [stream-controller]: Fragment 1 of level 0 was aborted
base-stream-controller.ts:355 [log] > [audio-stream-controller]: Media seeking to 22.459, state: FRAG_LOADING, out of buffer
base-stream-controller.ts:379 [log] > [audio-stream-controller]: Cancelling fragment load for seek (sn: 1)
base-stream-controller.ts:2054 [log] > [audio-stream-controller]: Reset loading state
base-stream-controller.ts:2230 [log] > [audio-stream-controller]: FRAG_LOADING->IDLE
base-stream-controller.ts:1851 [log] > [audio-stream-controller]: Fragment 1 of track 0 was aborted
base-stream-controller.ts:355 [log] > [subtitle-stream-controller]: Media seeking to 22.459, state: IDLE, out of buffer
base-stream-controller.ts:839 [log] > [stream-controller]: Loading key for 2 of [0-3], level 0
base-stream-controller.ts:2230 [log] > [stream-controller]: IDLE->KEY_LOADING
base-stream-controller.ts:965 [log] > [stream-controller]: Loading main sn: 2 of level 0 (frag:[16.080-23.600]) cc: 0 [0-3], target: 22.459
base-stream-controller.ts:2230 [log] > [stream-controller]: KEY_LOADING->FRAG_LOADING
base-stream-controller.ts:839 [log] > [audio-stream-controller]: Loading key for 3 of [0-4], track 0
base-stream-controller.ts:2230 [log] > [audio-stream-controller]: IDLE->KEY_LOADING
base-stream-controller.ts:965 [log] > [audio-stream-controller]: Loading audio sn: 3 of track 0 (frag:[17.916-23.932]) cc: 0 [0-4], target: 22.459
base-stream-controller.ts:2230 [log] > [audio-stream-controller]: KEY_LOADING->FRAG_LOADING
transmuxer-interface.ts:238 [log] > [transmuxer-interface]: Starting new transmux session for audio sn: 3 track: 0 id: 1
        discontinuity: false
        trackSwitch: false
        contiguous: false
        accurateTimeOffset: false
        timeOffset: 17.915555555555557
        initSegmentChange: false
base-stream-controller.ts:537 [log] > [audio-stream-controller]: Loaded audio sn: 3 of track 0
transmuxer-interface.ts:396 [log] > [mp4-remuxer]: reset next timestamp
base-stream-controller.ts:2230 [log] > [audio-stream-controller]: FRAG_LOADING->PARSING
buffer-controller.ts:952 [log] > [buffer-controller]: queuing "audio" append sn: 3 of track 0 cc: 0
transmuxer-interface.ts:396 [log] > [transmuxer.ts]: Flushed audio sn: 3 of track 0
base-stream-controller.ts:2230 [log] > [audio-stream-controller]: PARSING->PARSED
base-stream-controller.ts:2177 [log] > [audio-stream-controller]: Parsed audio sn: 3 of track 0 (frag:[17.940-23.935])
transmuxer-interface.ts:238 [log] > [transmuxer-interface]: Starting new transmux session for main sn: 2 level: 0 id: 1
        discontinuity: false
        trackSwitch: false
        contiguous: false
        accurateTimeOffset: true
        timeOffset: 16.08
        initSegmentChange: false
base-stream-controller.ts:537 [log] > [stream-controller]: Loaded main sn: 2 of level 0
transmuxer-interface.ts:396 [log] > [mp4-remuxer]: reset next timestamp
base-stream-controller.ts:2230 [log] > [stream-controller]: FRAG_LOADING->PARSING
buffer-controller.ts:952 [log] > [buffer-controller]: queuing "video" append sn: 2 of level 0 cc: 0
transmuxer-interface.ts:396 [log] > [transmuxer.ts]: Flushed main sn: 2 of level 0
base-stream-controller.ts:2230 [log] > [stream-controller]: PARSING->PARSED
base-stream-controller.ts:2177 [log] > [stream-controller]: Parsed main sn: 2 of level 0 (frag:[16.080-23.600])
base-stream-controller.ts:768 [log] > [audio-stream-controller]: Buffered audio sn: 3 of track 0 (frag:[17.940-23.935] > buffer:[0.000-5.905][17.940-23.956])
base-stream-controller.ts:2230 [log] > [audio-stream-controller]: PARSED->IDLE
base-stream-controller.ts:839 [log] > [audio-stream-controller]: Loading key for 4 of [0-4], track 0
base-stream-controller.ts:2230 [log] > [audio-stream-controller]: IDLE->KEY_LOADING
base-stream-controller.ts:965 [log] > [audio-stream-controller]: Loading audio sn: 4 of track 0 (frag:[23.935-29.417]) cc: 0 [0-4], target: 23.956
base-stream-controller.ts:2230 [log] > [audio-stream-controller]: KEY_LOADING->FRAG_LOADING
base-stream-controller.ts:768 [log] > [stream-controller]: Buffered main sn: 2 of level 0 (frag:[16.080-23.600] > buffer:[0.000-8.400][16.080-23.600])
base-stream-controller.ts:2230 [log] > [stream-controller]: PARSED->IDLE
base-stream-controller.ts:839 [log] > [stream-controller]: Loading key for 3 of [0-3], level 0
base-stream-controller.ts:2230 [log] > [stream-controller]: IDLE->KEY_LOADING
base-stream-controller.ts:965 [log] > [stream-controller]: Loading main sn: 3 of level 0 (frag:[23.600-29.520]) cc: 0 [0-3], target: 23.6
base-stream-controller.ts:2230 [log] > [stream-controller]: KEY_LOADING->FRAG_LOADING
stream-controller.ts:573 [log] > [stream-controller]: Media seeked to 22.459
buffer-controller.ts:963 [log] > [buffer-controller]: queuing "video" remove 0-14.759999999999998
buffer-controller.ts:1672 [log] > [buffer-controller]: Removing [0,14.759999999999998] from the video SourceBuffer
buffer-controller.ts:963 [log] > [buffer-controller]: queuing "audio" remove 0-14.759999999999998
buffer-controller.ts:1672 [log] > [buffer-controller]: Removing [0,14.759999999999998] from the audio SourceBuffer
base-stream-controller.ts:355 [log] > [stream-controller]: Media seeking to 17.270, state: FRAG_LOADING, in buffer
base-stream-controller.ts:355 [log] > [audio-stream-controller]: Media seeking to 17.270, state: FRAG_LOADING, in buffer
base-stream-controller.ts:355 [log] > [subtitle-stream-controller]: Media seeking to 17.270, state: IDLE, in buffer
gap-controller.ts:602 [warn] > [gap-controller]: skipping hole, adjusting currentTime from 17.270321 to 17.989887
_trySkipBufferHole @ gap-controller.ts:602
poll @ gap-controller.ts:274
tick @ gap-controller.ts:147
setInterval
setInterval @ task-loop.ts:71
onMediaAttached @ gap-controller.ts:84
emit @ index.js:203
emit @ hls.ts:386
trigger @ hls.ts:394
BufferController._this2._onMediaSourceOpen @ buffer-controller.ts:1555
main.js:745 Error event: {type: 'mediaError', details: 'bufferSeekOverHole', fatal: false, error: Error: fragment loaded with buffer holes, seeking from 17.270321 to 17.989887
    at GapController.…, reason: 'fragment loaded with buffer holes, seeking from 17.270321 to 17.989887', …}
(anonymous) @ main.js:745
emit @ index.js:203
emit @ hls.ts:386
trigger @ hls.ts:394
_trySkipBufferHole @ gap-controller.ts:627
poll @ gap-controller.ts:274
tick @ gap-controller.ts:147
setInterval
setInterval @ task-loop.ts:71
onMediaAttached @ gap-controller.ts:84
emit @ index.js:203
emit @ hls.ts:386
trigger @ hls.ts:394
BufferController._this2._onMediaSourceOpen @ buffer-controller.ts:1555
base-stream-controller.ts:355 [log] > [stream-controller]: Media seeking to 17.990, state: FRAG_LOADING, in buffer
base-stream-controller.ts:355 [log] > [audio-stream-controller]: Media seeking to 17.990, state: FRAG_LOADING, in buffer
base-stream-controller.ts:355 [log] > [subtitle-stream-controller]: Media seeking to 17.990, state: IDLE, in buffer
stream-controller.ts:573 [log] > [stream-controller]: Media seeked to 17.990
base-stream-controller.ts:355 [log] > [stream-controller]: Media seeking to 16.488, state: FRAG_LOADING, in buffer
base-stream-controller.ts:355 [log] > [audio-stream-controller]: Media seeking to 16.488, state: FRAG_LOADING, in buffer
base-stream-controller.ts:355 [log] > [subtitle-stream-controller]: Media seeking to 16.488, state: IDLE, in buffer
gap-controller.ts:602 [warn] > [gap-controller]: skipping hole, adjusting currentTime from 16.487625 to 17.989887
_trySkipBufferHole @ gap-controller.ts:602
poll @ gap-controller.ts:274
tick @ gap-controller.ts:147
setInterval
setInterval @ task-loop.ts:71
onMediaAttached @ gap-controller.ts:84
emit @ index.js:203
emit @ hls.ts:386
trigger @ hls.ts:394
BufferController._this2._onMediaSourceOpen @ buffer-controller.ts:1555
main.js:745 Error event: {type: 'mediaError', details: 'bufferSeekOverHole', fatal: false, error: Error: fragment loaded with buffer holes, seeking from 16.487625 to 17.989887
    at GapController.…, reason: 'fragment loaded with buffer holes, seeking from 16.487625 to 17.989887', …}
(anonymous) @ main.js:745
emit @ index.js:203
emit @ hls.ts:386
trigger @ hls.ts:394
_trySkipBufferHole @ gap-controller.ts:627
poll @ gap-controller.ts:274
tick @ gap-controller.ts:147
setInterval
setInterval @ task-loop.ts:71
onMediaAttached @ gap-controller.ts:84
emit @ index.js:203
emit @ hls.ts:386
trigger @ hls.ts:394
BufferController._this2._onMediaSourceOpen @ buffer-controller.ts:1555
base-stream-controller.ts:355 [log] > [stream-controller]: Media seeking to 17.990, state: FRAG_LOADING, in buffer
base-stream-controller.ts:355 [log] > [audio-stream-controller]: Media seeking to 17.990, state: FRAG_LOADING, in buffer
base-stream-controller.ts:355 [log] > [subtitle-stream-controller]: Media seeking to 17.990, state: IDLE, in buffer
stream-controller.ts:573 [log] > [stream-controller]: Media seeked to 17.990
base-stream-controller.ts:355 [log] > [stream-controller]: Media seeking to 15.281, state: FRAG_LOADING, in buffer
base-stream-controller.ts:355 [log] > [audio-stream-controller]: Media seeking to 15.281, state: FRAG_LOADING, in buffer
base-stream-controller.ts:355 [log] > [subtitle-stream-controller]: Media seeking to 15.281, state: IDLE, in buffer
base-stream-controller.ts:537 [log] > [audio-stream-controller]: Loaded audio sn: 4 of track 0
base-stream-controller.ts:2230 [log] > [audio-stream-controller]: FRAG_LOADING->PARSING
buffer-controller.ts:952 [log] > [buffer-controller]: queuing "audio" append sn: 4 of track 0 cc: 0
transmuxer-interface.ts:396 [log] > [transmuxer.ts]: Flushed audio sn: 4 of track 0
base-stream-controller.ts:2230 [log] > [audio-stream-controller]: PARSING->PARSED
base-stream-controller.ts:2177 [log] > [audio-stream-controller]: Parsed audio sn: 4 of track 0 (frag:[23.956-29.439])
base-stream-controller.ts:537 [log] > [stream-controller]: Loaded main sn: 3 of level 0
base-stream-controller.ts:2230 [log] > [stream-controller]: FRAG_LOADING->PARSING
buffer-controller.ts:952 [log] > [buffer-controller]: queuing "video" append sn: 3 of level 0 cc: 0
transmuxer-interface.ts:396 [log] > [transmuxer.ts]: Flushed main sn: 3 of level 0
base-stream-controller.ts:2230 [log] > [stream-controller]: PARSING->PARSED
base-stream-controller.ts:2177 [log] > [stream-controller]: Parsed main sn: 3 of level 0 (frag:[23.600-29.560])
base-stream-controller.ts:768 [log] > [audio-stream-controller]: Buffered audio sn: 4 of track 0 (frag:[23.956-29.439] > buffer:[17.940-29.460])
base-stream-controller.ts:2230 [log] > [audio-stream-controller]: PARSED->IDLE
base-stream-controller.ts:768 [log] > [stream-controller]: Buffered main sn: 3 of level 0 (frag:[23.600-29.560] > buffer:[16.080-29.560])
base-stream-controller.ts:2230 [log] > [stream-controller]: PARSED->IDLE
base-stream-controller.ts:965 [log] > [stream-controller]: Loading main sn: 1 of level 0 (frag:[8.400-16.080]) cc: 0 [0-3], target: 15.281
base-stream-controller.ts:2230 [log] > [stream-controller]: IDLE->FRAG_LOADING
transmuxer-interface.ts:238 [log] > [transmuxer-interface]: Starting new transmux session for main sn: 1 level: 0 id: 1
        discontinuity: false
        trackSwitch: false
        contiguous: false
        accurateTimeOffset: true
        timeOffset: 8.399999999999999
        initSegmentChange: false
base-stream-controller.ts:537 [log] > [stream-controller]: Loaded main sn: 1 of level 0
transmuxer-interface.ts:396 [log] > [mp4-remuxer]: reset next timestamp
base-stream-controller.ts:2230 [log] > [stream-controller]: FRAG_LOADING->PARSING
buffer-controller.ts:952 [log] > [buffer-controller]: queuing "video" append sn: 1 of level 0 cc: 0
transmuxer-interface.ts:396 [log] > [transmuxer.ts]: Flushed main sn: 1 of level 0
base-stream-controller.ts:2230 [log] > [stream-controller]: PARSING->PARSED
base-stream-controller.ts:2177 [log] > [stream-controller]: Parsed main sn: 1 of level 0 (frag:[8.400-16.080])
base-stream-controller.ts:768 [log] > [stream-controller]: Buffered main sn: 1 of level 0 (frag:[8.400-16.080] > buffer:[8.400-29.560])
base-stream-controller.ts:2230 [log] > [stream-controller]: PARSED->IDLE
buffer-controller.ts:1074 [log] > [buffer-controller]: video buffer reached EOS
base-stream-controller.ts:2230 [log] > [stream-controller]: IDLE->ENDED

Chrome media internals output

Metadata

Metadata

Assignees

No one assigned

    Labels

    BugConfirmedBug report confirmed or reproduced.

    Type

    No type

    Projects

    Status

    Done

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions