What version of HLS.js are you using?
v1.7.0-alpha.1.0.canary.11781
What browser (including version) are you using?
Chrome 147.0.7727.138 (Official Build) (arm64)
What OS (including version) are you using?
macOS X 15.4.1
Test stream
https://foliovision.com/hls/master.m3u8
Configuration
{
"debug": true,
"enableWorker": true,
"lowLatencyMode": true,
"backBufferLength": 90
}
Additional player setup steps
In our HLS stream https://foliovision.com/hls/master.m3u8, both video and audio streams use the same HLS AES-128 decryption key, on the same URL.
This has worked fine for a long time, then starting with HLS.js 1.6.11 it would load the decryption key separately for video and audio, reported here (no need to read, only adding link for reference): #3900 (comment)
We are happy to see that HLS.js 1.7.0 is loading the decryption key only once again.
But it seems to run into this strange playback issue.
The point is that since Safari playing HLS stream natively only load the descryption key once, so should HLS.js.
So to sum it up:
More details in test steps below.
Checklist
Steps to reproduce
- Open https://hlsjs-dev.video-dev.org/demo/
- Paste in https://foliovision.com/hls/master.m3u8 as the URL
- Click outside of the input field
Expected behaviour
- Open https://hlsjs-dev.video-dev.org/demo/
- Paste in https://foliovision.com/hls/master.m3u8 as the URL
- Click outside of the input field
- The video should start
What actually happened?
- Open https://hlsjs-dev.video-dev.org/demo/
- Paste in https://foliovision.com/hls/master.m3u8 as the URL
- Click outside of the input field
- Watch that the video does not start automatically
Following appears on console:
[audio-stream-controller]: Found no media in audio playlist 0 sn: 0 at playlist time: 0. Resetting transmuxer to fallback to playlist timing
- Once you click to play, it will start at 6th second
Following appears on console:
[gap-controller]: skipping hole, adjusting currentTime from 0 to 6.0048889999999995
Console output
[log] > destroy
hls.ts:503 [log] > detachMedia
buffer-controller.ts:479 [log] > [buffer-controller]: media source detaching
base-stream-controller.ts:2405 [log] > [stream-controller]: IDLE->STOPPED
base-stream-controller.ts:2405 [log] > [audio-stream-controller]: IDLE->STOPPED
base-stream-controller.ts:2405 [log] > [subtitle-stream-controller]: IDLE->STOPPED
19c3be89-6a11-477a-a9a4-e861a69d08b1:1692 [log] > Debug logs enabled for "main" in hls.js version 1.7.0-alpha.1.0.canary.11781
19c3be89-6a11-477a-a9a4-e861a69d08b1:1692 [log] > Debug logs enabled for "audio" in hls.js version 1.7.0-alpha.1.0.canary.11781
interstitials-controller.ts:291 [log] > [interstitials]: clear schedule state
main.js:366 Using Hls.js config: {debug: true, enableWorker: true, lowLatencyMode: true, backBufferLength: 90}
logger.ts:102 [log] > Debug logs enabled for "Hls instance" in hls.js version 1.7.0-alpha.1.0.canary.11781
hls.ts:604 [log] > stopLoad
hls.ts:538 [log] > loadSource:https://foliovision.com/hls/master.m3u8
interstitials-controller.ts:291 [log] > [interstitials]: clear schedule state
stream-controller.ts:569 [log] > [stream-controller]: Trigger BUFFER_RESET
hls.ts:487 [log] > attachMedia
buffer-controller.ts:331 [log] > [buffer-controller]: created media source: MediaSource
level-controller.ts:331 [log] > [level-controller]: manifest loaded, 1 level(s) found, first bitrate: 2051101
abr-controller.ts:67 [log] > [abr]: setting initial bwe to 2051101
buffer-controller.ts:276 [log] > [buffer-controller]: 2 bufferCodec event(s) expected.
playlist-loader.ts:395 [log] > auto startLoad with configured startPosition -1
hls.ts:581 [log] > startLoad(-1)
level-controller.ts:443 [log] > [level-controller]: Switching to level 0 (720p SDR avc1,mp4a @2051101) from level -1
audio-track-controller.ts:190 [log] > [audio-track-controller]: Updating audio tracks, 1 track(s) found in group(s): audio_aac
audio-track-controller.ts:342 [log] > [audio-track-controller]: Switching to audio-track 0 "Unknown" lang:und group:audio_aac channels:undefined
base-stream-controller.ts:2205 [log] > [audio-stream-controller]: Reset loading state
level-controller.ts:648 [log] > [level-controller]: Loading level index 0 https://foliovision.com/hls/media-1/stream.m3u8
base-stream-controller.ts:2405 [log] > [stream-controller]: STOPPED->IDLE
audio-track-controller.ts:440 [log] > [audio-track-controller]: Loading audio-track 0 "Unknown" lang:und group:audio_aac https://foliovision.com/hls/audio/aac/und/stream.m3u8
base-stream-controller.ts:2405 [log] > [audio-stream-controller]: STOPPED->WAITING_TRACK
base-stream-controller.ts:2405 [log] > [subtitle-stream-controller]: STOPPED->IDLE
stream-controller.ts:628 [log] > [stream-controller]: Level 0 loaded [0,3][part-3--1], cc [0, 0] duration:29.519999999999996
base-stream-controller.ts:1939 [log] > [stream-controller]: setting startPosition to 0 by default
interstitials-controller.ts:1158 [log] > [interstitials]: setSchedulePosition 0, undefined ([primary: 0.00-29.52]) pos: 0
interstitials-controller.ts:2028 [log] > [interstitials]: INTERSTITIALS_BUFFERED_TO_BOUNDARY [primary: 0.00-29.52]
interstitials-controller.ts:1420 [log] > [interstitials]: resuming [primary: 0.00-29.52]
interstitials-controller.ts:1510 [log] > [interstitials]: [attachPrimary] Advancing timeline position to 0
buffer-controller.ts:1504 [log] > [buffer-controller]: Updating MediaSource duration to 29.520
audio-track-controller.ts:105 [log] > [audio-track-controller]: Audio track 0 "Unknown" lang:und group:audio_aac loaded [0-4]
audio-stream-controller.ts:558 [log] > [audio-stream-controller]: Audio track 0 "Unknown" of "audio_aac" loaded [0,4][part-4--1],duration:29.546667
base-stream-controller.ts:1939 [log] > [audio-stream-controller]: setting startPosition to 0 by default
base-stream-controller.ts:2405 [log] > [audio-stream-controller]: WAITING_TRACK->IDLE
buffer-controller.ts:1712 [log] > [buffer-controller]: Media source opened
interstitials-controller.ts:291 [log] > [interstitials]: clear schedule state
interstitials-controller.ts:1158 [log] > [interstitials]: setSchedulePosition 0, undefined ([primary: 0.00-29.52]) pos: 0
interstitials-controller.ts:2028 [log] > [interstitials]: INTERSTITIALS_BUFFERED_TO_BOUNDARY [primary: 0.00-29.52]
interstitials-controller.ts:1420 [log] > [interstitials]: resuming [primary: 0.00-29.52]
interstitials-controller.ts:1510 [log] > [interstitials]: [attachPrimary] Advancing timeline position to 0
buffer-controller.ts:1527 [log] > [buffer-controller]: checkPendingTracks (pending: 0 codec events expected: 2) {}
base-stream-controller.ts:911 [log] > [stream-controller]: Loading key for 0 of [0-3], main playlist 0
base-stream-controller.ts:2405 [log] > [stream-controller]: IDLE->KEY_LOADING
key-loader.ts:213 [log] > [key-loader]: Loading URI: https://foliovision.com/hls/key.bin from main 0
base-stream-controller.ts:1032 [log] > [stream-controller]: Loading main sn: 0 of main playlist 0 (frag:[0-8.4]) cc: 0 [0-3], target: 0
base-stream-controller.ts:2405 [log] > [stream-controller]: KEY_LOADING->FRAG_LOADING
base-stream-controller.ts:911 [log] > [audio-stream-controller]: Loading key for 0 of [0-4], audio playlist 0
base-stream-controller.ts:2405 [log] > [audio-stream-controller]: IDLE->KEY_LOADING
base-stream-controller.ts:1032 [log] > [audio-stream-controller]: Loading audio sn: 0 of audio playlist 0 (frag:[0-6.016]) cc: 0 [0-4], target: 0
base-stream-controller.ts:2405 [log] > [audio-stream-controller]: KEY_LOADING->FRAG_LOADING
base-stream-controller.ts:553 [log] > [audio-stream-controller]: load progress audio sn: 0 of audio playlist 0 (frag:[0-6.016]) chunk: 1
transmuxer-interface.ts:88 [log] > injecting Web Worker for "audio"
audio-stream-controller.ts:683 [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:2405 [log] > [audio-stream-controller]: FRAG_LOADING->WAITING_INIT_PTS
base-stream-controller.ts:581 [log] > [audio-stream-controller]: Loaded audio sn: 0 of audio playlist 0 (bytes 291392)
base-stream-controller.ts:553 [log] > [stream-controller]: load progress main sn: 0 of main playlist 0 (frag:[0-8.4]) chunk: 1
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 main playlist: 0 id: 1
discontinuity: true
trackSwitch: true
contiguous: false
accurateTimeOffset: true
timeOffset: 0
initSegmentChange: true
base-stream-controller.ts:581 [log] > [stream-controller]: Loaded main sn: 0 of main playlist 0 (bytes 1270512)
base-stream-controller.ts:883 [log] > [stream-controller]: load complete main sn: 0 of main playlist 0 (frag:[0-8.4])
c622c81e-05c5-4905-a0bc-6ee58053b35e:1692 [log] > Debug logs enabled for "audio" in hls.js version 1.7.0-alpha.1.0.canary.11781
c622c81e-05c5-4905-a0bc-6ee58053b35e:1692 [log] > Debug logs enabled for "main" in hls.js version 1.7.0-alpha.1.0.canary.11781
c622c81e-05c5-4905-a0bc-6ee58053b35e:6684 [log] > [decrypter]: WebCrypto AES decrypt
transmuxer-interface.ts:396 [log] > Using TSDemuxer
transmuxer-interface.ts:396 [log] > Using MP4Remuxer
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]: Found initPTS at playlist time: 0 offset: 0.1111111111111111 (10000/90000) trackId: 1
base-stream-controller.ts:2405 [log] > [stream-controller]: FRAG_LOADING->PARSING
stream-controller.ts:1503 [log] > [stream-controller]: Init video buffer, container:video/mp4, codecs[level/parsed]=[avc1.4D401F/avc1.4d401f]
buffer-controller.ts:608 [log] > [buffer-controller]: BUFFER_CODECS: "video" (current SB count 0)
buffer-controller.ts:1527 [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:1014 [log] > [buffer-controller]: queuing "video" append sn: 0 of main playlist 0 cc: 0 offset: undefined bytes: 725
audio-stream-controller.ts:150 [log] > [audio-stream-controller]: InitPTS for cc: 0 found from main: 0.1111111111111111 (10000/90000) trackId: 1
buffer-controller.ts:1014 [log] > [buffer-controller]: queuing "video" append sn: 0 of main playlist 0 cc: 0 offset: -0.1111111111111111 bytes: 1223478
transmuxer-interface.ts:396 [log] > [transmuxer.ts]: Flushed main sn: 0 of main playlist 0
base-stream-controller.ts:2262 [log] > [stream-controller]: update level timing main sn: 0 of main playlist 0 (frag:[0-8.4])
base-stream-controller.ts:2405 [log] > [stream-controller]: PARSING->PARSED
base-stream-controller.ts:2340 [log] > [stream-controller]: Parsed main sn: 0 of main playlist 0 (frag:[0-8.4])
base-stream-controller.ts:2405 [log] > [audio-stream-controller]: WAITING_INIT_PTS->FRAG_LOADING
transmuxer-interface.ts:238 [log] > [transmuxer-interface]: Starting new transmux session for audio sn: 0 audio playlist: 0 id: 1
discontinuity: true
trackSwitch: true
contiguous: false
accurateTimeOffset: false
timeOffset: 0
initSegmentChange: true
base-stream-controller.ts:883 [log] > [audio-stream-controller]: load complete audio sn: 0 of audio playlist 0 (frag:[0-6.016])
transmuxer-interface.ts:396 [warn] > [transmuxer] Failed to find demuxer by probing fragment data
(anonymous) @ transmuxer-interface.ts:396
postMessage
forwardMessage @ c622c81e-05c5-4905-a0bc-6ee58053b35e:18013
logger.<computed> @ c622c81e-05c5-4905-a0bc-6ee58053b35e:18023
push @ c622c81e-05c5-4905-a0bc-6ee58053b35e:17615
(anonymous) @ c622c81e-05c5-4905-a0bc-6ee58053b35e:17915
Worker.postMessage
push @ transmuxer-interface.ts:263
_handleFragmentLoadProgress @ audio-stream-controller.ts:670
doTick @ audio-stream-controller.ts:278
tick @ task-loop.ts:109
setInterval
setInterval @ task-loop.ts:71
startLoad @ audio-stream-controller.ts:223
startLoad @ hls.ts:590
checkAutostartLoad @ playlist-loader.ts:398
emit @ index.js:203
emit @ hls.ts:404
trigger @ hls.ts:412
handleMasterPlaylist @ playlist-loader.ts:515
onSuccess @ playlist-loader.ts:358
readystatechange @ xhr-loader.ts:210
XMLHttpRequest.send
openAndSendXhr @ xhr-loader.ts:136
loadInternal @ xhr-loader.ts:95
load @ base-loader.ts:43
load @ playlist-loader.ts:383
onManifestLoading @ playlist-loader.ts:164
emit @ index.js:203
emit @ hls.ts:404
trigger @ hls.ts:412
loadSource @ hls.ts:549
loadSelectedStream @ main.js:374
applyConfigEditorValue @ main.js:1762
onclick @ demo/:140Understand this warning
base-stream-controller.ts:2405 [log] > [audio-stream-controller]: FRAG_LOADING->PARSING
base-stream-controller.ts:2262 [log] > [audio-stream-controller]: update level timing audio sn: 0 of audio playlist 0 (frag:[0-6.016])
base-stream-controller.ts:2323 [warn] > [audio-stream-controller]: Found no media in audio playlist 0 sn: 0 at playlist time: 0. Resetting transmuxer to fallback to playlist timing
updateLevelTiming @ base-stream-controller.ts:2323
_handleTransmuxerFlush @ base-stream-controller.ts:1184
(anonymous) @ transmuxer-interface.ts:389
postMessage
handleFlushResult @ c622c81e-05c5-4905-a0bc-6ee58053b35e:18006
(anonymous) @ c622c81e-05c5-4905-a0bc-6ee58053b35e:17955
Worker.postMessage
flush @ transmuxer-interface.ts:304
_handleFragmentLoadComplete @ base-stream-controller.ts:888
doTick @ audio-stream-controller.ts:280
tick @ task-loop.ts:109
setInterval
setInterval @ task-loop.ts:71
startLoad @ audio-stream-controller.ts:223
startLoad @ hls.ts:590
checkAutostartLoad @ playlist-loader.ts:398
emit @ index.js:203
emit @ hls.ts:404
trigger @ hls.ts:412
handleMasterPlaylist @ playlist-loader.ts:515
onSuccess @ playlist-loader.ts:358
readystatechange @ xhr-loader.ts:210
XMLHttpRequest.send
openAndSendXhr @ xhr-loader.ts:136
loadInternal @ xhr-loader.ts:95
load @ base-loader.ts:43
load @ playlist-loader.ts:383
onManifestLoading @ playlist-loader.ts:164
emit @ index.js:203
emit @ hls.ts:404
trigger @ hls.ts:412
loadSource @ hls.ts:549
loadSelectedStream @ main.js:374
applyConfigEditorValue @ main.js:1762
onclick @ demo/:140Understand this warning
base-stream-controller.ts:2405 [log] > [audio-stream-controller]: PARSING->ERROR
main.js:736 Error event: {type: 'mediaError', details: 'fragParsingError', fatal: false, error: Error: Found no media in audio playlist 0 sn: 0 at playlist time: 0. Resetting transmuxer to fallba…, frag: Fragment, …}
(anonymous) @ main.js:736
emit @ index.js:203
emit @ hls.ts:404
trigger @ hls.ts:412
updateLevelTiming @ base-stream-controller.ts:2324
_handleTransmuxerFlush @ base-stream-controller.ts:1184
(anonymous) @ transmuxer-interface.ts:389
postMessage
handleFlushResult @ c622c81e-05c5-4905-a0bc-6ee58053b35e:18006
(anonymous) @ c622c81e-05c5-4905-a0bc-6ee58053b35e:17955
Worker.postMessage
flush @ transmuxer-interface.ts:304
_handleFragmentLoadComplete @ base-stream-controller.ts:888
doTick @ audio-stream-controller.ts:280
tick @ task-loop.ts:109
setInterval
setInterval @ task-loop.ts:71
startLoad @ audio-stream-controller.ts:223
startLoad @ hls.ts:590
checkAutostartLoad @ playlist-loader.ts:398
emit @ index.js:203
emit @ hls.ts:404
trigger @ hls.ts:412
handleMasterPlaylist @ playlist-loader.ts:515
onSuccess @ playlist-loader.ts:358
readystatechange @ xhr-loader.ts:210
XMLHttpRequest.send
openAndSendXhr @ xhr-loader.ts:136
loadInternal @ xhr-loader.ts:95
load @ base-loader.ts:43
load @ playlist-loader.ts:383
onManifestLoading @ playlist-loader.ts:164
emit @ index.js:203
emit @ hls.ts:404
trigger @ hls.ts:412
loadSource @ hls.ts:549
loadSelectedStream @ main.js:374
applyConfigEditorValue @ main.js:1762
onclick @ demo/:140Understand this warning
base-stream-controller.ts:2405 [log] > [audio-stream-controller]: ERROR->PARSED
base-stream-controller.ts:2340 [log] > [audio-stream-controller]: Parsed audio sn: 0 of audio playlist 0 (frag:[0-6.016])
buffer-controller.ts:1127 [log] > [buffer-controller]: Fragments must have at least one ElementaryStreamType set. audio 0 sn: 0
buffer-controller.ts:2007 [log] > [buffer-controller]: Blocking operation requested, but no SourceBuffers exist
c622c81e-05c5-4905-a0bc-6ee58053b35e:1692 [log] > Debug logs enabled for "audio" in hls.js version 1.7.0-alpha.1.0.canary.11781
base-stream-controller.ts:828 [log] > [audio-stream-controller]: Buffered audio sn: 0 of audio playlist 0 (frag:[0-6.016]) > buffer:)
base-stream-controller.ts:2405 [log] > [audio-stream-controller]: PARSED->IDLE
base-stream-controller.ts:911 [log] > [audio-stream-controller]: Loading key for 1 of [0-4], audio playlist 0
base-stream-controller.ts:2405 [log] > [audio-stream-controller]: IDLE->KEY_LOADING
base-stream-controller.ts:1032 [log] > [audio-stream-controller]: Loading audio sn: 1 of audio playlist 0 (frag:[6.016-12.032]) cc: 0 [0-4], target: 6.016
base-stream-controller.ts:2405 [log] > [audio-stream-controller]: KEY_LOADING->FRAG_LOADING
base-stream-controller.ts:553 [log] > [audio-stream-controller]: load progress audio sn: 1 of audio playlist 0 (frag:[6.016-12.032]) chunk: 1
transmuxer-interface.ts:238 [log] > [transmuxer-interface]: Starting new transmux session for audio sn: 1 audio playlist: 0 id: 1
discontinuity: true
trackSwitch: true
contiguous: false
accurateTimeOffset: false
timeOffset: 6.016
initSegmentChange: true
base-stream-controller.ts:581 [log] > [audio-stream-controller]: Loaded audio sn: 1 of audio playlist 0 (bytes 290944)
base-stream-controller.ts:883 [log] > [audio-stream-controller]: load complete audio sn: 1 of audio playlist 0 (frag:[6.016-12.032])
c622c81e-05c5-4905-a0bc-6ee58053b35e:6684 [log] > [decrypter]: WebCrypto AES decrypt
transmuxer-interface.ts:396 [log] > ADTS sync word found !
transmuxer-interface.ts:396 [log] > Using AACDemuxer
transmuxer-interface.ts:396 [log] > Using MP4Remuxer
transmuxer-interface.ts:396 [log] > [mp4-remuxer]: ISGenerated flag reset
transmuxer-interface.ts:396 [log] > [mp4-remuxer]: Reset initPTS: null > 0.1111111111111111 (10000/90000) trackId: 1
transmuxer-interface.ts:396 [log] > [mp4-remuxer]: reset next timestamp
c622c81e-05c5-4905-a0bc-6ee58053b35e:11902 [log] > manifest codec:mp4a.40.2, parsed codec:mp4a.40.2, channels:6, rate:48000 (ADTS object type:2 sampling index:3)
base-stream-controller.ts:2405 [log] > [audio-stream-controller]: FRAG_LOADING->PARSING
audio-stream-controller.ts:1008 [log] > [audio-stream-controller]: Init audio buffer, container:audio/mp4, codecs[level/parsed]=[mp4a.40.2/mp4a.40.2]
buffer-controller.ts:608 [log] > [buffer-controller]: BUFFER_CODECS: "audio" (current SB count 0)
buffer-controller.ts:1527 [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:1596 [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:1596 [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:941 [log] > [stream-controller]: Alternate track found, use video.buffered to schedule main fragment loading
buffer-controller.ts:1565 [log] > [buffer-controller]: SourceBuffers created. Running queue:
video: (SourceBuffer) append-video, append-video, async-blocker
audio: (SourceBuffer)
audiovideo: (none) }
buffer-controller.ts:1014 [log] > [buffer-controller]: queuing "audio" append sn: 1 of audio playlist 0 cc: 0 offset: undefined bytes: 628
buffer-controller.ts:1014 [log] > [buffer-controller]: queuing "audio" append sn: 1 of audio playlist 0 cc: 0 offset: -0.1111111111111111 bytes: 293783
transmuxer-interface.ts:396 [log] > [transmuxer.ts]: Flushed audio sn: 1 of audio playlist 0
base-stream-controller.ts:2262 [log] > [audio-stream-controller]: update level timing audio sn: 1 of audio playlist 0 (frag:[6.016-12.032])
base-stream-controller.ts:2405 [log] > [audio-stream-controller]: PARSING->PARSED
base-stream-controller.ts:2340 [log] > [audio-stream-controller]: Parsed audio sn: 1 of audio playlist 0 (frag:[5.904888888888889-11.92088888888889])
buffer-controller.ts:1844 [log] > [buffer-controller]: Updating video SourceBuffer timestampOffset to -0.1111111111111111 (sn: 0 cc: 0)
buffer-controller.ts:1844 [log] > [buffer-controller]: Updating audio SourceBuffer timestampOffset to -0.1111111111111111 (sn: 1 cc: 0)
base-stream-controller.ts:828 [log] > [audio-stream-controller]: Buffered audio sn: 1 of audio playlist 0 (frag:[5.904888888888889-11.92088888888889]) > buffer:[5.905-11.921])
base-stream-controller.ts:851 [log] > [audio-stream-controller]: Resetting level fragment error count of 1 on frag buffered
base-stream-controller.ts:2405 [log] > [audio-stream-controller]: PARSED->IDLE
base-stream-controller.ts:828 [log] > [stream-controller]: Buffered main sn: 0 of main playlist 0 (frag:[0-8.4]) > buffer:[0.000-8.400])
base-stream-controller.ts:2405 [log] > [stream-controller]: PARSED->IDLE
base-stream-controller.ts:911 [log] > [stream-controller]: Loading key for 1 of [0-3], main playlist 0
base-stream-controller.ts:2405 [log] > [stream-controller]: IDLE->KEY_LOADING
base-stream-controller.ts:1032 [log] > [stream-controller]: Loading main sn: 1 of main playlist 0 (frag:[8.4-16.08]) cc: 0 [0-3], target: 8.4
base-stream-controller.ts:2405 [log] > [stream-controller]: KEY_LOADING->FRAG_LOADING
base-stream-controller.ts:911 [log] > [audio-stream-controller]: Loading key for 2 of [0-4], audio playlist 0
base-stream-controller.ts:2405 [log] > [audio-stream-controller]: IDLE->KEY_LOADING
base-stream-controller.ts:1032 [log] > [audio-stream-controller]: Loading audio sn: 2 of audio playlist 0 (frag:[11.92088888888889-17.936888888888888]) cc: 0 [0-4], target: 11.92088888888889
base-stream-controller.ts:2405 [log] > [audio-stream-controller]: KEY_LOADING->FRAG_LOADING
base-stream-controller.ts:553 [log] > [stream-controller]: load progress main sn: 1 of main playlist 0 (frag:[8.4-16.08]) chunk: 1
base-stream-controller.ts:581 [log] > [stream-controller]: Loaded main sn: 1 of main playlist 0 (bytes 443312)
base-stream-controller.ts:883 [log] > [stream-controller]: load complete main sn: 1 of main playlist 0 (frag:[8.4-16.08])
base-stream-controller.ts:553 [log] > [audio-stream-controller]: load progress audio sn: 2 of audio playlist 0 (frag:[11.92088888888889-17.936888888888888]) chunk: 1
base-stream-controller.ts:581 [log] > [audio-stream-controller]: Loaded audio sn: 2 of audio playlist 0 (bytes 291088)
base-stream-controller.ts:883 [log] > [audio-stream-controller]: load complete audio sn: 2 of audio playlist 0 (frag:[11.92088888888889-17.936888888888888])
base-stream-controller.ts:2405 [log] > [stream-controller]: FRAG_LOADING->PARSING
buffer-controller.ts:1014 [log] > [buffer-controller]: queuing "video" append sn: 1 of main playlist 0 cc: 0 offset: -0.1111111111111111 bytes: 416341
transmuxer-interface.ts:396 [log] > [transmuxer.ts]: Flushed main sn: 1 of main playlist 0
base-stream-controller.ts:2262 [log] > [stream-controller]: update level timing main sn: 1 of main playlist 0 (frag:[8.4-16.08])
base-stream-controller.ts:2405 [log] > [stream-controller]: PARSING->PARSED
base-stream-controller.ts:2340 [log] > [stream-controller]: Parsed main sn: 1 of main playlist 0 (frag:[8.4-16.08])
base-stream-controller.ts:2405 [log] > [audio-stream-controller]: FRAG_LOADING->PARSING
buffer-controller.ts:1014 [log] > [buffer-controller]: queuing "audio" append sn: 2 of audio playlist 0 cc: 0 offset: -0.1111111111111111 bytes: 293941
transmuxer-interface.ts:396 [log] > [transmuxer.ts]: Flushed audio sn: 2 of audio playlist 0
base-stream-controller.ts:2262 [log] > [audio-stream-controller]: update level timing audio sn: 2 of audio playlist 0 (frag:[11.92088888888889-17.936888888888888])
base-stream-controller.ts:2405 [log] > [audio-stream-controller]: PARSING->PARSED
base-stream-controller.ts:2340 [log] > [audio-stream-controller]: Parsed audio sn: 2 of audio playlist 0 (frag:[11.92088888888889-17.936888888888888])
base-stream-controller.ts:828 [log] > [audio-stream-controller]: Buffered audio sn: 2 of audio playlist 0 (frag:[11.92088888888889-17.936888888888888]) > buffer:[5.905-17.937])
base-stream-controller.ts:2405 [log] > [audio-stream-controller]: PARSED->IDLE
base-stream-controller.ts:828 [log] > [stream-controller]: Buffered main sn: 1 of main playlist 0 (frag:[8.4-16.08]) > buffer:[0.000-16.080])
base-stream-controller.ts:2405 [log] > [stream-controller]: PARSED->IDLE
base-stream-controller.ts:911 [log] > [stream-controller]: Loading key for 2 of [0-3], main playlist 0
base-stream-controller.ts:2405 [log] > [stream-controller]: IDLE->KEY_LOADING
base-stream-controller.ts:1032 [log] > [stream-controller]: Loading main sn: 2 of main playlist 0 (frag:[16.08-23.599999999999998]) cc: 0 [0-3], target: 16.08
base-stream-controller.ts:2405 [log] > [stream-controller]: KEY_LOADING->FRAG_LOADING
base-stream-controller.ts:911 [log] > [audio-stream-controller]: Loading key for 3 of [0-4], audio playlist 0
base-stream-controller.ts:2405 [log] > [audio-stream-controller]: IDLE->KEY_LOADING
base-stream-controller.ts:1032 [log] > [audio-stream-controller]: Loading audio sn: 3 of audio playlist 0 (frag:[17.936888888888888-23.952888888888886]) cc: 0 [0-4], target: 17.936888888888888
base-stream-controller.ts:2405 [log] > [audio-stream-controller]: KEY_LOADING->FRAG_LOADING
base-stream-controller.ts:553 [log] > [stream-controller]: load progress main sn: 2 of main playlist 0 (frag:[16.08-23.599999999999998]) chunk: 1
base-stream-controller.ts:581 [log] > [stream-controller]: Loaded main sn: 2 of main playlist 0 (bytes 1047360)
base-stream-controller.ts:883 [log] > [stream-controller]: load complete main sn: 2 of main playlist 0 (frag:[16.08-23.599999999999998])
base-stream-controller.ts:553 [log] > [audio-stream-controller]: load progress audio sn: 3 of audio playlist 0 (frag:[17.936888888888888-23.952888888888886]) chunk: 1
base-stream-controller.ts:581 [log] > [audio-stream-controller]: Loaded audio sn: 3 of audio playlist 0 (bytes 288128)
base-stream-controller.ts:883 [log] > [audio-stream-controller]: load complete audio sn: 3 of audio playlist 0 (frag:[17.936888888888888-23.952888888888886])
base-stream-controller.ts:2405 [log] > [stream-controller]: FRAG_LOADING->PARSING
buffer-controller.ts:1014 [log] > [buffer-controller]: queuing "video" append sn: 2 of main playlist 0 cc: 0 offset: -0.1111111111111111 bytes: 1007013
transmuxer-interface.ts:396 [log] > [transmuxer.ts]: Flushed main sn: 2 of main playlist 0
base-stream-controller.ts:2262 [log] > [stream-controller]: update level timing main sn: 2 of main playlist 0 (frag:[16.08-23.599999999999998])
base-stream-controller.ts:2405 [log] > [stream-controller]: PARSING->PARSED
base-stream-controller.ts:2340 [log] > [stream-controller]: Parsed main sn: 2 of main playlist 0 (frag:[16.08-23.6])
base-stream-controller.ts:2405 [log] > [audio-stream-controller]: FRAG_LOADING->PARSING
buffer-controller.ts:1014 [log] > [buffer-controller]: queuing "audio" append sn: 3 of audio playlist 0 cc: 0 offset: -0.1111111111111111 bytes: 290975
transmuxer-interface.ts:396 [log] > [transmuxer.ts]: Flushed audio sn: 3 of audio playlist 0
base-stream-controller.ts:2262 [log] > [audio-stream-controller]: update level timing audio sn: 3 of audio playlist 0 (frag:[17.936888888888888-23.952888888888886])
base-stream-controller.ts:2405 [log] > [audio-stream-controller]: PARSING->PARSED
base-stream-controller.ts:2340 [log] > [audio-stream-controller]: Parsed audio sn: 3 of audio playlist 0 (frag:[17.936888888888888-23.95288888888889])
base-stream-controller.ts:828 [log] > [audio-stream-controller]: Buffered audio sn: 3 of audio playlist 0 (frag:[17.936888888888888-23.95288888888889]) > buffer:[5.905-23.953])
base-stream-controller.ts:2405 [log] > [audio-stream-controller]: PARSED->IDLE
base-stream-controller.ts:911 [log] > [audio-stream-controller]: Loading key for 4 of [0-4], audio playlist 0
base-stream-controller.ts:2405 [log] > [audio-stream-controller]: IDLE->KEY_LOADING
base-stream-controller.ts:1032 [log] > [audio-stream-controller]: Loading audio sn: 4 of audio playlist 0 (frag:[23.95288888888889-29.43555588888889]) cc: 0 [0-4], target: 23.95288888888889
base-stream-controller.ts:2405 [log] > [audio-stream-controller]: KEY_LOADING->FRAG_LOADING
base-stream-controller.ts:828 [log] > [stream-controller]: Buffered main sn: 2 of main playlist 0 (frag:[16.08-23.6]) > buffer:[0.000-23.600])
base-stream-controller.ts:2405 [log] > [stream-controller]: PARSED->IDLE
base-stream-controller.ts:911 [log] > [stream-controller]: Loading key for 3 of [0-3], main playlist 0
base-stream-controller.ts:2405 [log] > [stream-controller]: IDLE->KEY_LOADING
base-stream-controller.ts:1032 [log] > [stream-controller]: Loading main sn: 3 of main playlist 0 (frag:[23.6-29.520000000000003]) cc: 0 [0-3], target: 23.6
base-stream-controller.ts:2405 [log] > [stream-controller]: KEY_LOADING->FRAG_LOADING
base-stream-controller.ts:553 [log] > [audio-stream-controller]: load progress audio sn: 4 of audio playlist 0 (frag:[23.95288888888889-29.43555588888889]) chunk: 1
base-stream-controller.ts:581 [log] > [audio-stream-controller]: Loaded audio sn: 4 of audio playlist 0 (bytes 267680)
base-stream-controller.ts:883 [log] > [audio-stream-controller]: load complete audio sn: 4 of audio playlist 0 (frag:[23.95288888888889-29.43555588888889])
base-stream-controller.ts:2405 [log] > [audio-stream-controller]: FRAG_LOADING->PARSING
buffer-controller.ts:1014 [log] > [buffer-controller]: queuing "audio" append sn: 4 of audio playlist 0 cc: 0 offset: -0.1111111111111111 bytes: 270286
transmuxer-interface.ts:396 [log] > [transmuxer.ts]: Flushed audio sn: 4 of audio playlist 0
base-stream-controller.ts:2262 [log] > [audio-stream-controller]: update level timing audio sn: 4 of audio playlist 0 (frag:[23.95288888888889-29.43555588888889])
base-stream-controller.ts:2405 [log] > [audio-stream-controller]: PARSING->PARSED
base-stream-controller.ts:2340 [log] > [audio-stream-controller]: Parsed audio sn: 4 of audio playlist 0 (frag:[23.95288888888889-29.456888888888887])
base-stream-controller.ts:553 [log] > [stream-controller]: load progress main sn: 3 of main playlist 0 (frag:[23.6-29.520000000000003]) chunk: 1
base-stream-controller.ts:581 [log] > [stream-controller]: Loaded main sn: 3 of main playlist 0 (bytes 1228784)
base-stream-controller.ts:883 [log] > [stream-controller]: load complete main sn: 3 of main playlist 0 (frag:[23.6-29.520000000000003])
base-stream-controller.ts:2405 [log] > [stream-controller]: FRAG_LOADING->PARSING
buffer-controller.ts:1014 [log] > [buffer-controller]: queuing "video" append sn: 3 of main playlist 0 cc: 0 offset: -0.1111111111111111 bytes: 1187666
transmuxer-interface.ts:396 [log] > [transmuxer.ts]: Flushed main sn: 3 of main playlist 0
base-stream-controller.ts:2262 [log] > [stream-controller]: update level timing main sn: 3 of main playlist 0 (frag:[23.6-29.520000000000003])
base-stream-controller.ts:2405 [log] > [stream-controller]: PARSING->PARSED
base-stream-controller.ts:2340 [log] > [stream-controller]: Parsed main sn: 3 of main playlist 0 (frag:[23.6-29.56])
base-stream-controller.ts:828 [log] > [audio-stream-controller]: Buffered audio sn: 4 of audio playlist 0 (frag:[23.95288888888889-29.456888888888887]) > buffer:[5.905-29.457])
base-stream-controller.ts:2405 [log] > [audio-stream-controller]: PARSED->IDLE
base-stream-controller.ts:828 [log] > [stream-controller]: Buffered main sn: 3 of main playlist 0 (frag:[23.6-29.56]) > buffer:[0.000-29.560])
base-stream-controller.ts:2405 [log] > [stream-controller]: PARSED->IDLE
Chrome media internals output
{
"properties": {
"render_id": 23,
"player_id": 5,
"created": "2026-05-04 11:16:20.405251 UTC",
"origin_url": "https://hlsjs-dev.video-dev.org/",
"kFrameUrl": "https://hlsjs-dev.video-dev.org/demo/?src=https%3A%2F%2Ffoliovision.com%2Fhls%2Fmaster.m3u8&demoConfig=eyJlbmFibGVTdHJlYW1pbmciOnRydWUsImF1dG9SZWNvdmVyRXJyb3IiOnRydWUsInN0b3BPblN0YWxsIjpmYWxzZSwiZHVtcGZNUDQiOmZhbHNlLCJsZXZlbENhcHBpbmciOi0xLCJsaW1pdE1ldHJpY3MiOi0xfQ==&hlsjsConfig=eyJkZWJ1ZyI6dHJ1ZSwiZW5hYmxlV29ya2VyIjp0cnVlLCJsb3dMYXRlbmN5TW9kZSI6dHJ1ZSwiYmFja0J1ZmZlckxlbmd0aCI6OTB9",
"kFrameTitle": "hls.js demo",
"url": "blob:https://hlsjs-dev.video-dev.org/53d88e30-ed69-4b1f-93d0-364eca16aa89",
"info": "Selected VideoToolboxVideoDecoder for video decoding, config: codec: h264, profile: h264 main, level: 31, alpha_mode: is_opaque, coded size: [1280,720], visible rect: [0,0,1280,720], natural size: [1280,720], has extra data: false, encryption scheme: Unencrypted, rotation: 0°, flipped: 0, color space: {primaries:BT709, transfer:BT709, matrix:BT709, range:LIMITED}",
"kRendererName": "RendererImpl",
"pipeline_state": "kPlaying",
"kVideoTracks": [
{
"alpha mode": "is_opaque",
"codec": "h264",
"coded size": "1280x720",
"color space": {
"matrix": "BT709",
"primaries": "BT709",
"range": "LIMITED",
"transfer": "BT709"
},
"encryption scheme": "Unencrypted",
"has extra data": false,
"hdr metadata": {},
"natural size": "1280x720",
"orientation": "0°",
"profile": "h264 main",
"visible rect": "0,0 1280x720"
}
],
"kAudioTracks": [
{
"bytes per channel": 2,
"bytes per frame": 12,
"channel layout": "5.1_BACK",
"channels": 6,
"codec": "aac",
"codec delay": 0,
"discard decoder delay": false,
"encryption scheme": "Unencrypted",
"has extra data": true,
"profile": "unknown",
"sample format": "Signed 16-bit",
"samples per second": 48000,
"seek preroll": "0us"
}
],
"kIsAudioDecryptingDemuxerStream": false,
"kAudioDecoderName": "FFmpegAudioDecoder",
"kIsPlatformAudioDecoder": false,
"kIsVideoDecryptingDemuxerStream": false,
"kVideoDecoderName": "VideoToolboxVideoDecoder",
"kIsPlatformVideoDecoder": true,
"dimensions": "1280x720",
"kResolution": "1280x720",
"duration": 29.56,
"video_buffering_state": {
"state": "BUFFERING_HAVE_ENOUGH"
}
},
"events": [
{
"time": 0,
"key": "created",
"value": "2026-05-04 11:16:20.405251 UTC"
},
{
"time": 0.0769999623298645,
"key": "origin_url",
"value": "https://hlsjs-dev.video-dev.org/"
},
{
"time": 0.0820000171661377,
"key": "kFrameUrl",
"value": "https://hlsjs-dev.video-dev.org/demo/?src=https%3A%2F%2Ffoliovision.com%2Fhls%2Fmaster.m3u8&demoConfig=eyJlbmFibGVTdHJlYW1pbmciOnRydWUsImF1dG9SZWNvdmVyRXJyb3IiOnRydWUsInN0b3BPblN0YWxsIjpmYWxzZSwiZHVtcGZNUDQiOmZhbHNlLCJsZXZlbENhcHBpbmciOi0xLCJsaW1pdE1ldHJpY3MiOi0xfQ==&hlsjsConfig=eyJkZWJ1ZyI6dHJ1ZSwiZW5hYmxlV29ya2VyIjp0cnVlLCJsb3dMYXRlbmN5TW9kZSI6dHJ1ZSwiYmFja0J1ZmZlckxlbmd0aCI6OTB9"
},
{
"time": 0.08399999141693115,
"key": "kFrameTitle",
"value": "hls.js demo"
},
{
"time": 0.12999999523162842,
"key": "url",
"value": "blob:https://hlsjs-dev.video-dev.org/53d88e30-ed69-4b1f-93d0-364eca16aa89"
},
{
"time": 0.1809999942779541,
"key": "info",
"value": "ChunkDemuxer"
},
{
"time": 0.2019999623298645,
"key": "kRendererName",
"value": "RendererImpl"
},
{
"time": 0.22499996423721313,
"key": "pipeline_state",
"value": "kStarting"
},
{
"time": 122.55199998617172,
"key": "kVideoTracks",
"value": [
{
"alpha mode": "is_opaque",
"codec": "h264",
"coded size": "1280x720",
"color space": {
"matrix": "BT709",
"primaries": "BT709",
"range": "LIMITED",
"transfer": "BT709"
},
"encryption scheme": "Unencrypted",
"has extra data": false,
"hdr metadata": {},
"natural size": "1280x720",
"orientation": "0°",
"profile": "h264 main",
"visible rect": "0,0 1280x720"
}
]
},
{
"time": 122.5920000076294,
"key": "kAudioTracks",
"value": [
{
"bytes per channel": 2,
"bytes per frame": 12,
"channel layout": "5.1_BACK",
"channels": 6,
"codec": "aac",
"codec delay": 0,
"discard decoder delay": false,
"encryption scheme": "Unencrypted",
"has extra data": true,
"profile": "unknown",
"sample format": "Signed 16-bit",
"samples per second": 48000,
"seek preroll": "0us"
}
]
},
{
"time": 125.02399998903275,
"key": "kIsAudioDecryptingDemuxerStream",
"value": false
},
{
"time": 125.02599996328354,
"key": "kAudioDecoderName",
"value": "FFmpegAudioDecoder"
},
{
"time": 125.02700001001358,
"key": "kIsPlatformAudioDecoder",
"value": false
},
{
"time": 125.0329999923706,
"key": "info",
"value": "Selected FFmpegAudioDecoder for audio decoding, config: codec: aac, profile: unknown, bytes_per_channel: 2, channel_layout: 5.1_BACK, channels: 6, samples_per_second: 48000, sample_format: Signed 16-bit, bytes_per_frame: 12, seek_preroll: 0us, codec_delay: 0, has extra data: true, encryption scheme: Unencrypted, discard decoder delay: false, target_output_channel_layout: STEREO, target_output_sample_format: Unknown sample format"
},
{
"time": 125.05500000715256,
"key": "info",
"value": "Cannot select DecryptingVideoDecoder for video decoding. status=DecoderStatus::Codes::kUnsupportedEncryptionMode"
},
{
"time": 132.74099999666214,
"key": "kIsVideoDecryptingDemuxerStream",
"value": false
},
{
"time": 132.74299997091293,
"key": "kVideoDecoderName",
"value": "VideoToolboxVideoDecoder"
},
{
"time": 132.75599998235703,
"key": "kIsPlatformVideoDecoder",
"value": true
},
{
"time": 132.76199996471405,
"key": "info",
"value": "Selected VideoToolboxVideoDecoder for video decoding, config: codec: h264, profile: h264 main, level: 31, alpha_mode: is_opaque, coded size: [1280,720], visible rect: [0,0,1280,720], natural size: [1280,720], has extra data: false, encryption scheme: Unencrypted, rotation: 0°, flipped: 0, color space: {primaries:BT709, transfer:BT709, matrix:BT709, range:LIMITED}"
},
{
"time": 132.77999997138977,
"key": "pipeline_state",
"value": "kPlaying"
},
{
"time": 144.27599996328354,
"key": "dimensions",
"value": "1280x720"
},
{
"time": 144.27999997138977,
"key": "kResolution",
"value": "1280x720"
},
{
"time": 205.19599997997284,
"key": "duration",
"value": 29.56
},
{
"time": 140.0460000038147,
"key": "video_buffering_state",
"value": {
"state": "BUFFERING_HAVE_ENOUGH"
}
}
]
}
What version of HLS.js are you using?
v1.7.0-alpha.1.0.canary.11781
What browser (including version) are you using?
Chrome 147.0.7727.138 (Official Build) (arm64)
What OS (including version) are you using?
macOS X 15.4.1
Test stream
https://foliovision.com/hls/master.m3u8
Configuration
Additional player setup steps
In our HLS stream https://foliovision.com/hls/master.m3u8, both video and audio streams use the same HLS AES-128 decryption key, on the same URL.
This has worked fine for a long time, then starting with HLS.js 1.6.11 it would load the decryption key separately for video and audio, reported here (no need to read, only adding link for reference): #3900 (comment)
We are happy to see that HLS.js 1.7.0 is loading the decryption key only once again.
But it seems to run into this strange playback issue.
The point is that since Safari playing HLS stream natively only load the descryption key once, so should HLS.js.
So to sum it up:
More details in test steps below.
Checklist
Steps to reproduce
Expected behaviour
What actually happened?
Following appears on console:
Following appears on console:
Console output
Chrome media internals output
{ "properties": { "render_id": 23, "player_id": 5, "created": "2026-05-04 11:16:20.405251 UTC", "origin_url": "https://hlsjs-dev.video-dev.org/", "kFrameUrl": "https://hlsjs-dev.video-dev.org/demo/?src=https%3A%2F%2Ffoliovision.com%2Fhls%2Fmaster.m3u8&demoConfig=eyJlbmFibGVTdHJlYW1pbmciOnRydWUsImF1dG9SZWNvdmVyRXJyb3IiOnRydWUsInN0b3BPblN0YWxsIjpmYWxzZSwiZHVtcGZNUDQiOmZhbHNlLCJsZXZlbENhcHBpbmciOi0xLCJsaW1pdE1ldHJpY3MiOi0xfQ==&hlsjsConfig=eyJkZWJ1ZyI6dHJ1ZSwiZW5hYmxlV29ya2VyIjp0cnVlLCJsb3dMYXRlbmN5TW9kZSI6dHJ1ZSwiYmFja0J1ZmZlckxlbmd0aCI6OTB9", "kFrameTitle": "hls.js demo", "url": "blob:https://hlsjs-dev.video-dev.org/53d88e30-ed69-4b1f-93d0-364eca16aa89", "info": "Selected VideoToolboxVideoDecoder for video decoding, config: codec: h264, profile: h264 main, level: 31, alpha_mode: is_opaque, coded size: [1280,720], visible rect: [0,0,1280,720], natural size: [1280,720], has extra data: false, encryption scheme: Unencrypted, rotation: 0°, flipped: 0, color space: {primaries:BT709, transfer:BT709, matrix:BT709, range:LIMITED}", "kRendererName": "RendererImpl", "pipeline_state": "kPlaying", "kVideoTracks": [ { "alpha mode": "is_opaque", "codec": "h264", "coded size": "1280x720", "color space": { "matrix": "BT709", "primaries": "BT709", "range": "LIMITED", "transfer": "BT709" }, "encryption scheme": "Unencrypted", "has extra data": false, "hdr metadata": {}, "natural size": "1280x720", "orientation": "0°", "profile": "h264 main", "visible rect": "0,0 1280x720" } ], "kAudioTracks": [ { "bytes per channel": 2, "bytes per frame": 12, "channel layout": "5.1_BACK", "channels": 6, "codec": "aac", "codec delay": 0, "discard decoder delay": false, "encryption scheme": "Unencrypted", "has extra data": true, "profile": "unknown", "sample format": "Signed 16-bit", "samples per second": 48000, "seek preroll": "0us" } ], "kIsAudioDecryptingDemuxerStream": false, "kAudioDecoderName": "FFmpegAudioDecoder", "kIsPlatformAudioDecoder": false, "kIsVideoDecryptingDemuxerStream": false, "kVideoDecoderName": "VideoToolboxVideoDecoder", "kIsPlatformVideoDecoder": true, "dimensions": "1280x720", "kResolution": "1280x720", "duration": 29.56, "video_buffering_state": { "state": "BUFFERING_HAVE_ENOUGH" } }, "events": [ { "time": 0, "key": "created", "value": "2026-05-04 11:16:20.405251 UTC" }, { "time": 0.0769999623298645, "key": "origin_url", "value": "https://hlsjs-dev.video-dev.org/" }, { "time": 0.0820000171661377, "key": "kFrameUrl", "value": "https://hlsjs-dev.video-dev.org/demo/?src=https%3A%2F%2Ffoliovision.com%2Fhls%2Fmaster.m3u8&demoConfig=eyJlbmFibGVTdHJlYW1pbmciOnRydWUsImF1dG9SZWNvdmVyRXJyb3IiOnRydWUsInN0b3BPblN0YWxsIjpmYWxzZSwiZHVtcGZNUDQiOmZhbHNlLCJsZXZlbENhcHBpbmciOi0xLCJsaW1pdE1ldHJpY3MiOi0xfQ==&hlsjsConfig=eyJkZWJ1ZyI6dHJ1ZSwiZW5hYmxlV29ya2VyIjp0cnVlLCJsb3dMYXRlbmN5TW9kZSI6dHJ1ZSwiYmFja0J1ZmZlckxlbmd0aCI6OTB9" }, { "time": 0.08399999141693115, "key": "kFrameTitle", "value": "hls.js demo" }, { "time": 0.12999999523162842, "key": "url", "value": "blob:https://hlsjs-dev.video-dev.org/53d88e30-ed69-4b1f-93d0-364eca16aa89" }, { "time": 0.1809999942779541, "key": "info", "value": "ChunkDemuxer" }, { "time": 0.2019999623298645, "key": "kRendererName", "value": "RendererImpl" }, { "time": 0.22499996423721313, "key": "pipeline_state", "value": "kStarting" }, { "time": 122.55199998617172, "key": "kVideoTracks", "value": [ { "alpha mode": "is_opaque", "codec": "h264", "coded size": "1280x720", "color space": { "matrix": "BT709", "primaries": "BT709", "range": "LIMITED", "transfer": "BT709" }, "encryption scheme": "Unencrypted", "has extra data": false, "hdr metadata": {}, "natural size": "1280x720", "orientation": "0°", "profile": "h264 main", "visible rect": "0,0 1280x720" } ] }, { "time": 122.5920000076294, "key": "kAudioTracks", "value": [ { "bytes per channel": 2, "bytes per frame": 12, "channel layout": "5.1_BACK", "channels": 6, "codec": "aac", "codec delay": 0, "discard decoder delay": false, "encryption scheme": "Unencrypted", "has extra data": true, "profile": "unknown", "sample format": "Signed 16-bit", "samples per second": 48000, "seek preroll": "0us" } ] }, { "time": 125.02399998903275, "key": "kIsAudioDecryptingDemuxerStream", "value": false }, { "time": 125.02599996328354, "key": "kAudioDecoderName", "value": "FFmpegAudioDecoder" }, { "time": 125.02700001001358, "key": "kIsPlatformAudioDecoder", "value": false }, { "time": 125.0329999923706, "key": "info", "value": "Selected FFmpegAudioDecoder for audio decoding, config: codec: aac, profile: unknown, bytes_per_channel: 2, channel_layout: 5.1_BACK, channels: 6, samples_per_second: 48000, sample_format: Signed 16-bit, bytes_per_frame: 12, seek_preroll: 0us, codec_delay: 0, has extra data: true, encryption scheme: Unencrypted, discard decoder delay: false, target_output_channel_layout: STEREO, target_output_sample_format: Unknown sample format" }, { "time": 125.05500000715256, "key": "info", "value": "Cannot select DecryptingVideoDecoder for video decoding. status=DecoderStatus::Codes::kUnsupportedEncryptionMode" }, { "time": 132.74099999666214, "key": "kIsVideoDecryptingDemuxerStream", "value": false }, { "time": 132.74299997091293, "key": "kVideoDecoderName", "value": "VideoToolboxVideoDecoder" }, { "time": 132.75599998235703, "key": "kIsPlatformVideoDecoder", "value": true }, { "time": 132.76199996471405, "key": "info", "value": "Selected VideoToolboxVideoDecoder for video decoding, config: codec: h264, profile: h264 main, level: 31, alpha_mode: is_opaque, coded size: [1280,720], visible rect: [0,0,1280,720], natural size: [1280,720], has extra data: false, encryption scheme: Unencrypted, rotation: 0°, flipped: 0, color space: {primaries:BT709, transfer:BT709, matrix:BT709, range:LIMITED}" }, { "time": 132.77999997138977, "key": "pipeline_state", "value": "kPlaying" }, { "time": 144.27599996328354, "key": "dimensions", "value": "1280x720" }, { "time": 144.27999997138977, "key": "kResolution", "value": "1280x720" }, { "time": 205.19599997997284, "key": "duration", "value": 29.56 }, { "time": 140.0460000038147, "key": "video_buffering_state", "value": { "state": "BUFFERING_HAVE_ENOUGH" } } ] }