Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Player freezes when master playlist has FMP4 and TS segments at the same time #5195

Closed
5 tasks done
zalishchuk opened this issue Jan 28, 2023 · 7 comments · Fixed by #5235
Closed
5 tasks done

Player freezes when master playlist has FMP4 and TS segments at the same time #5195

zalishchuk opened this issue Jan 28, 2023 · 7 comments · Fixed by #5235

Comments

@zalishchuk
Copy link

zalishchuk commented Jan 28, 2023

What version of Hls.js are you using?

v1.3.1

What browser (including version) are you using?

Chrome 109.0.5414.119 (Official Build) (arm64)

What OS (including version) are you using?

macOS Monterey 12.5 (21G72)

Test stream

https://fmp4-ts-hls-demo.vercel.app/stream.m3u8

Configuration

{
  "debug": true,
  "enableWorker": true,
  "lowLatencyMode": true,
  "backBufferLength": 90
}

Additional player setup steps

No response

Checklist

Steps to reproduce

  1. Load provided m3u8 file
  2. Switch the quality level to any of provided with hvc1 codec
  3. Playback freezes

Expected behaviour

Player should switch the video quality level to the playlist with fmp4 hevc segments and continue playback. If you remove avc1 playlists from the master playlist everything works just fine, the problem appears only when you have both ts and fmp4 containers in the same manifest.

What actually happened?

Playback freezes.

Console output

Console Output

hls.ts:291 [log] > destroy
hls.ts:319 [log] > detachMedia
buffer-controller.ts:168 [log] > [buffer-controller]: media source detaching
base-stream-controller.ts:1500 [log] > [stream-controller]: IDLE->STOPPED
base-stream-controller.ts:1500 [log] > [subtitle-stream-controller]: IDLE->STOPPED
main.js:341 Using Hls.js config: {debug: true, enableWorker: true, lowLatencyMode: true, backBufferLength: 90}
logger.ts:74 [log] > Debug logs enabled for "Hls instance"
hls.ts:371 [log] > stopLoad
hls.ts:339 [log] > loadSource:https://fmp4-ts-hls-demo.vercel.app/stream.m3u8
stream-controller.ts:550 [log] > [stream-controller]: Trigger BUFFER_RESET
hls.ts:310 [log] > attachMedia
buffer-controller.ts:789 [log] > [buffer-controller]: Media source opened
base-stream-controller.ts:1500 [log] > [subtitle-stream-controller]: STOPPED->IDLE
level-controller.ts:191 [log] > [level-controller]: manifest loaded, 10 level(s) found, first bitrate: 2842024
buffer-controller.ts:142 [log] > 2 bufferCodec event(s) expected
hls.ts:361 [log] > startLoad(-1)
level-controller.ts:272 [log] > [level-controller]: switching to level 7 from -1
audio-track-controller.ts:134 [log] > [audio-track-controller]: Updating audio tracks, 2 track(s) found in "audio" group-id
audio-track-controller.ts:185 [log] > [audio-track-controller]: Now switching to audio-track index 0
base-stream-controller.ts:1500 [log] > [audio-stream-controller]: STOPPED->IDLE
base-stream-controller.ts:1500 [log] > [audio-stream-controller]: IDLE->WAITING_TRACK
level-controller.ts:584 [log] > [level-controller]: Attempt loading level index 7 with URL-id 0 https://fmp4-ts-hls-demo.vercel.app/manifest0/video_TS_h264_aac_96000_1280x720_2750000_variant.m3u8
base-stream-controller.ts:1500 [log] > [stream-controller]: STOPPED->IDLE
audio-track-controller.ts:259 [log] > [audio-track-controller]: loading audio-track playlist for id: 0
base-stream-controller.ts:1500 [log] > [audio-stream-controller]: WAITING_TRACK->STOPPED
base-stream-controller.ts:1500 [log] > [audio-stream-controller]: STOPPED->WAITING_TRACK
base-stream-controller.ts:1500 [log] > [subtitle-stream-controller]: IDLE->STOPPED
base-stream-controller.ts:1500 [log] > [subtitle-stream-controller]: STOPPED->IDLE
hls.ts:291 [log] > destroy
hls.ts:319 [log] > detachMedia
buffer-controller.ts:168 [log] > [buffer-controller]: media source detaching
base-stream-controller.ts:1500 [log] > [stream-controller]: IDLE->STOPPED
base-stream-controller.ts:1500 [log] > [audio-stream-controller]: WAITING_TRACK->STOPPED
base-stream-controller.ts:1500 [log] > [subtitle-stream-controller]: IDLE->STOPPED
main.js:341 Using Hls.js config: {debug: true, enableWorker: true, lowLatencyMode: true, backBufferLength: 90}
logger.ts:74 [log] > Debug logs enabled for "Hls instance"
hls.ts:371 [log] > stopLoad
hls.ts:339 [log] > loadSource:https://fmp4-ts-hls-demo.vercel.app/stream.m3u8
stream-controller.ts:550 [log] > [stream-controller]: Trigger BUFFER_RESET
hls.ts:310 [log] > attachMedia
buffer-controller.ts:789 [log] > [buffer-controller]: Media source opened
base-stream-controller.ts:1500 [log] > [subtitle-stream-controller]: STOPPED->IDLE
level-controller.ts:191 [log] > [level-controller]: manifest loaded, 10 level(s) found, first bitrate: 2842024
buffer-controller.ts:142 [log] > 2 bufferCodec event(s) expected
hls.ts:361 [log] > startLoad(-1)
level-controller.ts:272 [log] > [level-controller]: switching to level 7 from -1
audio-track-controller.ts:134 [log] > [audio-track-controller]: Updating audio tracks, 2 track(s) found in "audio" group-id
audio-track-controller.ts:185 [log] > [audio-track-controller]: Now switching to audio-track index 0
base-stream-controller.ts:1500 [log] > [audio-stream-controller]: STOPPED->IDLE
base-stream-controller.ts:1500 [log] > [audio-stream-controller]: IDLE->WAITING_TRACK
level-controller.ts:584 [log] > [level-controller]: Attempt loading level index 7 with URL-id 0 https://fmp4-ts-hls-demo.vercel.app/manifest0/video_TS_h264_aac_96000_1280x720_2750000_variant.m3u8
base-stream-controller.ts:1500 [log] > [stream-controller]: STOPPED->IDLE
audio-track-controller.ts:259 [log] > [audio-track-controller]: loading audio-track playlist for id: 0
base-stream-controller.ts:1500 [log] > [audio-stream-controller]: WAITING_TRACK->STOPPED
base-stream-controller.ts:1500 [log] > [audio-stream-controller]: STOPPED->WAITING_TRACK
base-stream-controller.ts:1500 [log] > [subtitle-stream-controller]: IDLE->STOPPED
base-stream-controller.ts:1500 [log] > [subtitle-stream-controller]: STOPPED->IDLE
audio-track-controller.ts:87 [log] > [audio-track-controller]: audioTrack 0 loaded [0-37]
stream-controller.ts:615 [log] > [stream-controller]: Level 7 loaded [0,37], cc [0, 0] duration:148.125
buffer-controller.ts:681 [log] > [buffer-controller]: Updating Media Source duration to 148.125
base-stream-controller.ts:655 [log] > [stream-controller]: Loading fragment 0 cc: 0 of [0-37] level: 7, target: 0
base-stream-controller.ts:1500 [log] > [stream-controller]: IDLE->FRAG_LOADING
audio-track-controller.ts:87 [log] > [audio-track-controller]: audioTrack 0 loaded [0-37]
audio-stream-controller.ts:448 [log] > [audio-stream-controller]: Track 0 loaded [0,37],duration:148.194
base-stream-controller.ts:1500 [log] > [audio-stream-controller]: WAITING_TRACK->IDLE
base-stream-controller.ts:655 [log] > [audio-stream-controller]: Loading fragment 0 cc: 0 of [0-37] track: 0, target: 0
base-stream-controller.ts:1500 [log] > [audio-stream-controller]: IDLE->FRAG_LOADING
transmuxer-interface.ts:68 [log] > demuxing in webworker
audio-stream-controller.ts:555 [log] > [audio-stream-controller]: Unknown video PTS for cc 0, waiting for video PTS before demuxing audio frag 0 of [0 ,37],track 0
base-stream-controller.ts:1500 [log] > [audio-stream-controller]: FRAG_LOADING->WAITING_INIT_PTS
base-stream-controller.ts:371 [log] > [audio-stream-controller]: Loaded fragment 0 of level 0
transmuxer-interface.ts:68 [log] > demuxing in webworker
transmuxer-interface.ts:201 [log] > [transmuxer-interface, main]: Starting new transmux session for sn: 0 p: -1 level: 7 id: 1
discontinuity: true
trackSwitch: true
contiguous: false
accurateTimeOffset: true
timeOffset: 0
initSegmentChange: true
base-stream-controller.ts:371 [log] > [stream-controller]: Loaded fragment 0 of level 7
435c68bc-19a4-43f4-aea0-b26a40f348d6:633 [log] > Debug logs enabled for "audio"
34702c8e-3112-4161-a892-407c7c2c9417:633 [log] > Debug logs enabled for "main"
transmuxer-interface.ts:349 [log] > [mp4-remuxer]: ISGenerated flag reset
transmuxer-interface.ts:349 [log] > [mp4-remuxer]: initPTS & initDTS reset
transmuxer-interface.ts:349 [log] > [mp4-remuxer]: reset next timestamp
base-stream-controller.ts:1500 [log] > [stream-controller]: FRAG_LOADING->PARSING
stream-controller.ts:1254 [log] > [stream-controller]: Init video buffer, container:video/mp4, codecs[level/parsed]=[avc1.4d401f/avc1.4d401f]
audio-stream-controller.ts:118 [log] > [audio-stream-controller]: InitPTS for cc: 0 found from main: 126000
base-stream-controller.ts:1500 [log] > [audio-stream-controller]: WAITING_INIT_PTS->FRAG_LOADING
transmuxer-interface.ts:201 [log] > [transmuxer-interface, audio]: Starting new transmux session for sn: 0 p: -1 level: 0 id: 1
discontinuity: true
trackSwitch: true
contiguous: false
accurateTimeOffset: false
timeOffset: 0
initSegmentChange: true
transmuxer-interface.ts:349 [log] > [transmuxer.ts]: Flushed fragment 0 of level 7
base-stream-controller.ts:1500 [log] > [stream-controller]: PARSING->PARSED
transmuxer-interface.ts:349 [log] > [mp4-remuxer]: ISGenerated flag reset
transmuxer-interface.ts:349 [log] > [mp4-remuxer]: initPTS & initDTS reset
transmuxer-interface.ts:349 [log] > [mp4-remuxer]: reset next timestamp
transmuxer-interface.ts:349 [log] > manifest codec:mp4a.40.2, ADTS type:2, samplingIndex:4
transmuxer-interface.ts:349 [log] > parsed codec:mp4a.40.5, rate:44100, channels:1
base-stream-controller.ts:1500 [log] > [audio-stream-controller]: FRAG_LOADING->PARSING
audio-stream-controller.ts:854 [log] > [audio-stream-controller]: Switching audio track : flushing all audio
audio-stream-controller.ts:802 [log] > [audio-stream-controller]: Init audio buffer, container:audio/mp4, codecs[parsed]=[mp4a.40.5]
buffer-controller.ts:750 [log] > [buffer-controller]: creating sourceBuffer(video/mp4;codecs=avc1.4d401f)
buffer-controller.ts:750 [log] > [buffer-controller]: creating sourceBuffer(audio/mp4;codecs=mp4a.40.5)
stream-controller.ts:822 [log] > [stream-controller]: Alternate track found, use video.buffered to schedule main fragment loading
buffer-controller.ts:864 [log] > [buffer-controller]: Removing [0,148.125] from the audio SourceBuffer
transmuxer-interface.ts:349 [log] > [transmuxer.ts]: Flushed fragment 0 of level 0
base-stream-controller.ts:1500 [log] > [audio-stream-controller]: PARSING->PARSED
base-stream-controller.ts:504 [log] > [audio-stream-controller]: Buffered audio sn: 0 of track 0 [0.000,4.017]
base-stream-controller.ts:1500 [log] > [audio-stream-controller]: PARSED->IDLE
base-stream-controller.ts:655 [log] > [audio-stream-controller]: Loading fragment 1 cc: 0 of [0-37] track: 0, target: 4.04
base-stream-controller.ts:1500 [log] > [audio-stream-controller]: IDLE->FRAG_LOADING
base-stream-controller.ts:504 [log] > [stream-controller]: Buffered main sn: 0 of level 7 [0.000,4.000]
base-stream-controller.ts:1500 [log] > [stream-controller]: PARSED->IDLE
level-controller.ts:272 [log] > [level-controller]: switching to level 8 from 7
level-controller.ts:584 [log] > [level-controller]: Attempt loading level index 8 with URL-id 0 https://fmp4-ts-hls-demo.vercel.app/manifest1/video_TS_h264_aac_96000_1920x1080_4500000_variant.m3u8
base-stream-controller.ts:1500 [log] > [stream-controller]: IDLE->WAITING_LEVEL
stream-controller.ts:615 [log] > [stream-controller]: Level 8 loaded [0,37], cc [0, 0] duration:148.125
base-stream-controller.ts:1500 [log] > [stream-controller]: WAITING_LEVEL->IDLE
base-stream-controller.ts:655 [log] > [stream-controller]: Loading fragment 1 cc: 0 of [0-37] level: 8, target: 4
base-stream-controller.ts:1500 [log] > [stream-controller]: IDLE->FRAG_LOADING
base-stream-controller.ts:371 [log] > [audio-stream-controller]: Loaded fragment 1 of level 0
base-stream-controller.ts:1500 [log] > [audio-stream-controller]: FRAG_LOADING->PARSING
transmuxer-interface.ts:349 [log] > [transmuxer.ts]: Flushed fragment 1 of level 0
base-stream-controller.ts:1500 [log] > [audio-stream-controller]: PARSING->PARSED
base-stream-controller.ts:504 [log] > [audio-stream-controller]: Buffered audio sn: 1 of track 0 [0.000,8.011]
base-stream-controller.ts:1500 [log] > [audio-stream-controller]: PARSED->IDLE
base-stream-controller.ts:655 [log] > [audio-stream-controller]: Loading fragment 2 cc: 0 of [0-37] track: 0, target: 8.011
base-stream-controller.ts:1500 [log] > [audio-stream-controller]: IDLE->FRAG_LOADING
transmuxer-interface.ts:201 [log] > [transmuxer-interface, main]: Starting new transmux session for sn: 1 p: -1 level: 8 id: 1
discontinuity: false
trackSwitch: true
contiguous: false
accurateTimeOffset: true
timeOffset: 4
initSegmentChange: false
base-stream-controller.ts:371 [log] > [stream-controller]: Loaded fragment 1 of level 8
transmuxer-interface.ts:349 [log] > [mp4-remuxer]: ISGenerated flag reset
transmuxer-interface.ts:349 [log] > [mp4-remuxer]: initPTS & initDTS reset
transmuxer-interface.ts:349 [log] > [mp4-remuxer]: reset next timestamp
base-stream-controller.ts:1500 [log] > [stream-controller]: FRAG_LOADING->PARSING
stream-controller.ts:1254 [log] > [stream-controller]: Init video buffer, container:video/mp4, codecs[level/parsed]=[avc1.4d4028/avc1.4d4028]
transmuxer-interface.ts:349 [log] > [transmuxer.ts]: Flushed fragment 1 of level 8
base-stream-controller.ts:1500 [log] > [stream-controller]: PARSING->PARSED
base-stream-controller.ts:504 [log] > [stream-controller]: Buffered main sn: 1 of level 8 [0.000,8.000]
base-stream-controller.ts:1500 [log] > [stream-controller]: PARSED->IDLE
base-stream-controller.ts:655 [log] > [stream-controller]: Loading fragment 2 cc: 0 of [0-37] level: 8, target: 8
base-stream-controller.ts:1500 [log] > [stream-controller]: IDLE->FRAG_LOADING
base-stream-controller.ts:371 [log] > [audio-stream-controller]: Loaded fragment 2 of level 0
base-stream-controller.ts:1500 [log] > [audio-stream-controller]: FRAG_LOADING->PARSING
transmuxer-interface.ts:349 [log] > [transmuxer.ts]: Flushed fragment 2 of level 0
base-stream-controller.ts:1500 [log] > [audio-stream-controller]: PARSING->PARSED
base-stream-controller.ts:504 [log] > [audio-stream-controller]: Buffered audio sn: 2 of track 0 [0.000,12.005]
base-stream-controller.ts:1500 [log] > [audio-stream-controller]: PARSED->IDLE
base-stream-controller.ts:655 [log] > [audio-stream-controller]: Loading fragment 3 cc: 0 of [0-37] track: 0, target: 12.005
base-stream-controller.ts:1500 [log] > [audio-stream-controller]: IDLE->FRAG_LOADING
base-stream-controller.ts:371 [log] > [stream-controller]: Loaded fragment 2 of level 8
base-stream-controller.ts:1500 [log] > [stream-controller]: FRAG_LOADING->PARSING
transmuxer-interface.ts:349 [log] > [transmuxer.ts]: Flushed fragment 2 of level 8
base-stream-controller.ts:1500 [log] > [stream-controller]: PARSING->PARSED
base-stream-controller.ts:504 [log] > [stream-controller]: Buffered main sn: 2 of level 8 [0.000,12.000]
base-stream-controller.ts:1500 [log] > [stream-controller]: PARSED->IDLE
base-stream-controller.ts:655 [log] > [stream-controller]: Loading fragment 3 cc: 0 of [0-37] level: 8, target: 12
base-stream-controller.ts:1500 [log] > [stream-controller]: IDLE->FRAG_LOADING
base-stream-controller.ts:371 [log] > [audio-stream-controller]: Loaded fragment 3 of level 0
base-stream-controller.ts:1500 [log] > [audio-stream-controller]: FRAG_LOADING->PARSING
transmuxer-interface.ts:349 [log] > [transmuxer.ts]: Flushed fragment 3 of level 0
base-stream-controller.ts:1500 [log] > [audio-stream-controller]: PARSING->PARSED
base-stream-controller.ts:504 [log] > [audio-stream-controller]: Buffered audio sn: 3 of track 0 [0.000,16.022]
base-stream-controller.ts:1500 [log] > [audio-stream-controller]: PARSED->IDLE
base-stream-controller.ts:655 [log] > [audio-stream-controller]: Loading fragment 4 cc: 0 of [0-37] track: 0, target: 16.022
base-stream-controller.ts:1500 [log] > [audio-stream-controller]: IDLE->FRAG_LOADING
base-stream-controller.ts:371 [log] > [audio-stream-controller]: Loaded fragment 4 of level 0
base-stream-controller.ts:1500 [log] > [audio-stream-controller]: FRAG_LOADING->PARSING
transmuxer-interface.ts:349 [log] > [transmuxer.ts]: Flushed fragment 4 of level 0
base-stream-controller.ts:1500 [log] > [audio-stream-controller]: PARSING->PARSED
base-stream-controller.ts:504 [log] > [audio-stream-controller]: Buffered audio sn: 4 of track 0 [0.000,20.016]
base-stream-controller.ts:1500 [log] > [audio-stream-controller]: PARSED->IDLE
base-stream-controller.ts:371 [log] > [stream-controller]: Loaded fragment 3 of level 8
base-stream-controller.ts:1500 [log] > [stream-controller]: FRAG_LOADING->PARSING
transmuxer-interface.ts:349 [log] > [transmuxer.ts]: Flushed fragment 3 of level 8
base-stream-controller.ts:1500 [log] > [stream-controller]: PARSING->PARSED
base-stream-controller.ts:504 [log] > [stream-controller]: Buffered main sn: 3 of level 8 [0.000,16.000]
base-stream-controller.ts:1500 [log] > [stream-controller]: PARSED->IDLE
base-stream-controller.ts:655 [log] > [stream-controller]: Loading fragment 4 cc: 0 of [0-37] level: 8, target: 16
base-stream-controller.ts:1500 [log] > [stream-controller]: IDLE->FRAG_LOADING
base-stream-controller.ts:655 [log] > [audio-stream-controller]: Loading fragment 5 cc: 0 of [0-37] track: 0, target: 20.016
base-stream-controller.ts:1500 [log] > [audio-stream-controller]: IDLE->FRAG_LOADING
base-stream-controller.ts:371 [log] > [stream-controller]: Loaded fragment 4 of level 8
base-stream-controller.ts:1500 [log] > [stream-controller]: FRAG_LOADING->PARSING
transmuxer-interface.ts:349 [log] > [transmuxer.ts]: Flushed fragment 4 of level 8
base-stream-controller.ts:1500 [log] > [stream-controller]: PARSING->PARSED
base-stream-controller.ts:504 [log] > [stream-controller]: Buffered main sn: 4 of level 8 [0.000,20.000]
base-stream-controller.ts:1500 [log] > [stream-controller]: PARSED->IDLE
base-stream-controller.ts:655 [log] > [stream-controller]: Loading fragment 5 cc: 0 of [0-37] level: 8, target: 20
base-stream-controller.ts:1500 [log] > [stream-controller]: IDLE->FRAG_LOADING
base-stream-controller.ts:371 [log] > [audio-stream-controller]: Loaded fragment 5 of level 0
base-stream-controller.ts:1500 [log] > [audio-stream-controller]: FRAG_LOADING->PARSING
transmuxer-interface.ts:349 [log] > [transmuxer.ts]: Flushed fragment 5 of level 0
base-stream-controller.ts:1500 [log] > [audio-stream-controller]: PARSING->PARSED
base-stream-controller.ts:504 [log] > [audio-stream-controller]: Buffered audio sn: 5 of track 0 [0.000,24.009]
base-stream-controller.ts:1500 [log] > [audio-stream-controller]: PARSED->IDLE
base-stream-controller.ts:655 [log] > [audio-stream-controller]: Loading fragment 6 cc: 0 of [0-37] track: 0, target: 24.009
base-stream-controller.ts:1500 [log] > [audio-stream-controller]: IDLE->FRAG_LOADING
base-stream-controller.ts:371 [log] > [stream-controller]: Loaded fragment 5 of level 8
base-stream-controller.ts:371 [log] > [audio-stream-controller]: Loaded fragment 6 of level 0
base-stream-controller.ts:1500 [log] > [stream-controller]: FRAG_LOADING->PARSING
transmuxer-interface.ts:349 [log] > [transmuxer.ts]: Flushed fragment 5 of level 8
base-stream-controller.ts:1500 [log] > [stream-controller]: PARSING->PARSED
base-stream-controller.ts:1500 [log] > [audio-stream-controller]: FRAG_LOADING->PARSING
transmuxer-interface.ts:349 [log] > [transmuxer.ts]: Flushed fragment 6 of level 0
base-stream-controller.ts:1500 [log] > [audio-stream-controller]: PARSING->PARSED
base-stream-controller.ts:504 [log] > [audio-stream-controller]: Buffered audio sn: 6 of track 0 [0.000,28.003]
base-stream-controller.ts:1500 [log] > [audio-stream-controller]: PARSED->IDLE
base-stream-controller.ts:504 [log] > [stream-controller]: Buffered main sn: 5 of level 8 [0.000,24.000]
base-stream-controller.ts:1500 [log] > [stream-controller]: PARSED->IDLE
base-stream-controller.ts:655 [log] > [stream-controller]: Loading fragment 6 cc: 0 of [0-37] level: 8, target: 24
base-stream-controller.ts:1500 [log] > [stream-controller]: IDLE->FRAG_LOADING
base-stream-controller.ts:655 [log] > [audio-stream-controller]: Loading fragment 7 cc: 0 of [0-37] track: 0, target: 28.003
base-stream-controller.ts:1500 [log] > [audio-stream-controller]: IDLE->FRAG_LOADING
base-stream-controller.ts:371 [log] > [stream-controller]: Loaded fragment 6 of level 8
base-stream-controller.ts:1500 [log] > [stream-controller]: FRAG_LOADING->PARSING
transmuxer-interface.ts:349 [log] > [transmuxer.ts]: Flushed fragment 6 of level 8
base-stream-controller.ts:1500 [log] > [stream-controller]: PARSING->PARSED
base-stream-controller.ts:504 [log] > [stream-controller]: Buffered main sn: 6 of level 8 [0.000,28.000]
base-stream-controller.ts:1500 [log] > [stream-controller]: PARSED->IDLE
base-stream-controller.ts:655 [log] > [stream-controller]: Loading fragment 7 cc: 0 of [0-37] level: 8, target: 28
base-stream-controller.ts:1500 [log] > [stream-controller]: IDLE->FRAG_LOADING
base-stream-controller.ts:371 [log] > [audio-stream-controller]: Loaded fragment 7 of level 0
base-stream-controller.ts:1500 [log] > [audio-stream-controller]: FRAG_LOADING->PARSING
transmuxer-interface.ts:349 [log] > [transmuxer.ts]: Flushed fragment 7 of level 0
base-stream-controller.ts:1500 [log] > [audio-stream-controller]: PARSING->PARSED
base-stream-controller.ts:504 [log] > [audio-stream-controller]: Buffered audio sn: 7 of track 0 [0.000,32.020]
base-stream-controller.ts:1500 [log] > [audio-stream-controller]: PARSED->IDLE
base-stream-controller.ts:371 [log] > [stream-controller]: Loaded fragment 7 of level 8
base-stream-controller.ts:1500 [log] > [stream-controller]: FRAG_LOADING->PARSING
transmuxer-interface.ts:349 [log] > [transmuxer.ts]: Flushed fragment 7 of level 8
base-stream-controller.ts:1500 [log] > [stream-controller]: PARSING->PARSED
base-stream-controller.ts:504 [log] > [stream-controller]: Buffered main sn: 7 of level 8 [0.000,32.000]
base-stream-controller.ts:1500 [log] > [stream-controller]: PARSED->IDLE
base-stream-controller.ts:655 [log] > [stream-controller]: Loading fragment 8 cc: 0 of [0-37] level: 8, target: 32
base-stream-controller.ts:1500 [log] > [stream-controller]: IDLE->FRAG_LOADING
base-stream-controller.ts:371 [log] > [stream-controller]: Loaded fragment 8 of level 8
base-stream-controller.ts:1500 [log] > [stream-controller]: FRAG_LOADING->PARSING
transmuxer-interface.ts:349 [log] > [transmuxer.ts]: Flushed fragment 8 of level 8
base-stream-controller.ts:1500 [log] > [stream-controller]: PARSING->PARSED
base-stream-controller.ts:504 [log] > [stream-controller]: Buffered main sn: 8 of level 8 [0.000,36.000]
base-stream-controller.ts:1500 [log] > [stream-controller]: PARSED->IDLE
base-stream-controller.ts:655 [log] > [stream-controller]: Loading fragment 9 cc: 0 of [0-37] level: 8, target: 36
base-stream-controller.ts:1500 [log] > [stream-controller]: IDLE->FRAG_LOADING
base-stream-controller.ts:655 [log] > [audio-stream-controller]: Loading fragment 8 cc: 0 of [0-37] track: 0, target: 32.02
base-stream-controller.ts:1500 [log] > [audio-stream-controller]: IDLE->FRAG_LOADING
base-stream-controller.ts:371 [log] > [stream-controller]: Loaded fragment 9 of level 8
base-stream-controller.ts:1500 [log] > [stream-controller]: FRAG_LOADING->PARSING
transmuxer-interface.ts:349 [log] > [transmuxer.ts]: Flushed fragment 9 of level 8
base-stream-controller.ts:1500 [log] > [stream-controller]: PARSING->PARSED
base-stream-controller.ts:504 [log] > [stream-controller]: Buffered main sn: 9 of level 8 [0.000,40.000]
base-stream-controller.ts:1500 [log] > [stream-controller]: PARSED->IDLE
base-stream-controller.ts:655 [log] > [stream-controller]: Loading fragment 10 cc: 0 of [0-37] level: 8, target: 40
base-stream-controller.ts:1500 [log] > [stream-controller]: IDLE->FRAG_LOADING
base-stream-controller.ts:371 [log] > [audio-stream-controller]: Loaded fragment 8 of level 0
base-stream-controller.ts:1500 [log] > [audio-stream-controller]: FRAG_LOADING->PARSING
transmuxer-interface.ts:349 [log] > [transmuxer.ts]: Flushed fragment 8 of level 0
base-stream-controller.ts:1500 [log] > [audio-stream-controller]: PARSING->PARSED
base-stream-controller.ts:504 [log] > [audio-stream-controller]: Buffered audio sn: 8 of track 0 [0.000,36.014]
base-stream-controller.ts:1500 [log] > [audio-stream-controller]: PARSED->IDLE
base-stream-controller.ts:655 [log] > [audio-stream-controller]: Loading fragment 9 cc: 0 of [0-37] track: 0, target: 36.014
base-stream-controller.ts:1500 [log] > [audio-stream-controller]: IDLE->FRAG_LOADING
base-stream-controller.ts:371 [log] > [stream-controller]: Loaded fragment 10 of level 8
base-stream-controller.ts:1500 [log] > [stream-controller]: FRAG_LOADING->PARSING
transmuxer-interface.ts:349 [log] > [transmuxer.ts]: Flushed fragment 10 of level 8
base-stream-controller.ts:1500 [log] > [stream-controller]: PARSING->PARSED
base-stream-controller.ts:504 [log] > [stream-controller]: Buffered main sn: 10 of level 8 [0.000,44.000]
base-stream-controller.ts:1500 [log] > [stream-controller]: PARSED->IDLE
base-stream-controller.ts:655 [log] > [stream-controller]: Loading fragment 11 cc: 0 of [0-37] level: 8, target: 44
base-stream-controller.ts:1500 [log] > [stream-controller]: IDLE->FRAG_LOADING
base-stream-controller.ts:371 [log] > [audio-stream-controller]: Loaded fragment 9 of level 0
base-stream-controller.ts:1500 [log] > [audio-stream-controller]: FRAG_LOADING->PARSING
transmuxer-interface.ts:349 [log] > [transmuxer.ts]: Flushed fragment 9 of level 0
base-stream-controller.ts:1500 [log] > [audio-stream-controller]: PARSING->PARSED
base-stream-controller.ts:504 [log] > [audio-stream-controller]: Buffered audio sn: 9 of track 0 [0.000,40.008]
base-stream-controller.ts:1500 [log] > [audio-stream-controller]: PARSED->IDLE
base-stream-controller.ts:655 [log] > [audio-stream-controller]: Loading fragment 10 cc: 0 of [0-37] track: 0, target: 40.008
base-stream-controller.ts:1500 [log] > [audio-stream-controller]: IDLE->FRAG_LOADING
base-stream-controller.ts:371 [log] > [stream-controller]: Loaded fragment 11 of level 8
base-stream-controller.ts:1500 [log] > [stream-controller]: FRAG_LOADING->PARSING
transmuxer-interface.ts:349 [log] > [transmuxer.ts]: Flushed fragment 11 of level 8
base-stream-controller.ts:1500 [log] > [stream-controller]: PARSING->PARSED
base-stream-controller.ts:504 [log] > [stream-controller]: Buffered main sn: 11 of level 8 [0.000,48.000]
base-stream-controller.ts:1500 [log] > [stream-controller]: PARSED->IDLE
base-stream-controller.ts:655 [log] > [stream-controller]: Loading fragment 12 cc: 0 of [0-37] level: 8, target: 48
base-stream-controller.ts:1500 [log] > [stream-controller]: IDLE->FRAG_LOADING
base-stream-controller.ts:371 [log] > [audio-stream-controller]: Loaded fragment 10 of level 0
base-stream-controller.ts:1500 [log] > [audio-stream-controller]: FRAG_LOADING->PARSING
transmuxer-interface.ts:349 [log] > [transmuxer.ts]: Flushed fragment 10 of level 0
base-stream-controller.ts:1500 [log] > [audio-stream-controller]: PARSING->PARSED
base-stream-controller.ts:504 [log] > [audio-stream-controller]: Buffered audio sn: 10 of track 0 [0.000,44.002]
base-stream-controller.ts:1500 [log] > [audio-stream-controller]: PARSED->IDLE
base-stream-controller.ts:655 [log] > [audio-stream-controller]: Loading fragment 11 cc: 0 of [0-37] track: 0, target: 44.002
base-stream-controller.ts:1500 [log] > [audio-stream-controller]: IDLE->FRAG_LOADING
base-stream-controller.ts:371 [log] > [stream-controller]: Loaded fragment 12 of level 8
base-stream-controller.ts:1500 [log] > [stream-controller]: FRAG_LOADING->PARSING
transmuxer-interface.ts:349 [log] > [transmuxer.ts]: Flushed fragment 12 of level 8
base-stream-controller.ts:1500 [log] > [stream-controller]: PARSING->PARSED
base-stream-controller.ts:504 [log] > [stream-controller]: Buffered main sn: 12 of level 8 [0.000,52.000]
base-stream-controller.ts:1500 [log] > [stream-controller]: PARSED->IDLE
base-stream-controller.ts:655 [log] > [stream-controller]: Loading fragment 13 cc: 0 of [0-37] level: 8, target: 52
base-stream-controller.ts:1500 [log] > [stream-controller]: IDLE->FRAG_LOADING
base-stream-controller.ts:371 [log] > [audio-stream-controller]: Loaded fragment 11 of level 0
base-stream-controller.ts:1500 [log] > [audio-stream-controller]: FRAG_LOADING->PARSING
transmuxer-interface.ts:349 [log] > [transmuxer.ts]: Flushed fragment 11 of level 0
base-stream-controller.ts:1500 [log] > [audio-stream-controller]: PARSING->PARSED
base-stream-controller.ts:504 [log] > [audio-stream-controller]: Buffered audio sn: 11 of track 0 [0.000,48.019]
base-stream-controller.ts:1500 [log] > [audio-stream-controller]: PARSED->IDLE
base-stream-controller.ts:655 [log] > [audio-stream-controller]: Loading fragment 12 cc: 0 of [0-37] track: 0, target: 48.019
base-stream-controller.ts:1500 [log] > [audio-stream-controller]: IDLE->FRAG_LOADING
base-stream-controller.ts:371 [log] > [audio-stream-controller]: Loaded fragment 12 of level 0
base-stream-controller.ts:1500 [log] > [audio-stream-controller]: FRAG_LOADING->PARSING
transmuxer-interface.ts:349 [log] > [transmuxer.ts]: Flushed fragment 12 of level 0
base-stream-controller.ts:1500 [log] > [audio-stream-controller]: PARSING->PARSED
base-stream-controller.ts:504 [log] > [audio-stream-controller]: Buffered audio sn: 12 of track 0 [0.000,52.013]
base-stream-controller.ts:1500 [log] > [audio-stream-controller]: PARSED->IDLE
base-stream-controller.ts:371 [log] > [stream-controller]: Loaded fragment 13 of level 8
base-stream-controller.ts:1500 [log] > [stream-controller]: FRAG_LOADING->PARSING
transmuxer-interface.ts:349 [log] > [transmuxer.ts]: Flushed fragment 13 of level 8
base-stream-controller.ts:1500 [log] > [stream-controller]: PARSING->PARSED
base-stream-controller.ts:504 [log] > [stream-controller]: Buffered main sn: 13 of level 8 [0.000,56.000]
base-stream-controller.ts:1500 [log] > [stream-controller]: PARSED->IDLE
base-stream-controller.ts:655 [log] > [stream-controller]: Loading fragment 14 cc: 0 of [0-37] level: 8, target: 56
base-stream-controller.ts:1500 [log] > [stream-controller]: IDLE->FRAG_LOADING
base-stream-controller.ts:655 [log] > [audio-stream-controller]: Loading fragment 13 cc: 0 of [0-37] track: 0, target: 52.013
base-stream-controller.ts:1500 [log] > [audio-stream-controller]: IDLE->FRAG_LOADING
base-stream-controller.ts:371 [log] > [audio-stream-controller]: Loaded fragment 13 of level 0
base-stream-controller.ts:1500 [log] > [audio-stream-controller]: FRAG_LOADING->PARSING
transmuxer-interface.ts:349 [log] > [transmuxer.ts]: Flushed fragment 13 of level 0
base-stream-controller.ts:1500 [log] > [audio-stream-controller]: PARSING->PARSED
base-stream-controller.ts:504 [log] > [audio-stream-controller]: Buffered audio sn: 13 of track 0 [0.000,56.007]
base-stream-controller.ts:1500 [log] > [audio-stream-controller]: PARSED->IDLE
base-stream-controller.ts:371 [log] > [stream-controller]: Loaded fragment 14 of level 8
base-stream-controller.ts:1500 [log] > [stream-controller]: FRAG_LOADING->PARSING
transmuxer-interface.ts:349 [log] > [transmuxer.ts]: Flushed fragment 14 of level 8
base-stream-controller.ts:1500 [log] > [stream-controller]: PARSING->PARSED
base-stream-controller.ts:504 [log] > [stream-controller]: Buffered main sn: 14 of level 8 [0.000,60.000]
base-stream-controller.ts:1500 [log] > [stream-controller]: PARSED->IDLE
base-stream-controller.ts:655 [log] > [stream-controller]: Loading fragment 15 cc: 0 of [0-37] level: 8, target: 60
base-stream-controller.ts:1500 [log] > [stream-controller]: IDLE->FRAG_LOADING
base-stream-controller.ts:655 [log] > [audio-stream-controller]: Loading fragment 14 cc: 0 of [0-37] track: 0, target: 56.007
base-stream-controller.ts:1500 [log] > [audio-stream-controller]: IDLE->FRAG_LOADING
base-stream-controller.ts:371 [log] > [audio-stream-controller]: Loaded fragment 14 of level 0
base-stream-controller.ts:1500 [log] > [audio-stream-controller]: FRAG_LOADING->PARSING
transmuxer-interface.ts:349 [log] > [transmuxer.ts]: Flushed fragment 14 of level 0
base-stream-controller.ts:1500 [log] > [audio-stream-controller]: PARSING->PARSED
base-stream-controller.ts:504 [log] > [audio-stream-controller]: Buffered audio sn: 14 of track 0 [0.000,60.000]
base-stream-controller.ts:1500 [log] > [audio-stream-controller]: PARSED->IDLE
base-stream-controller.ts:371 [log] > [stream-controller]: Loaded fragment 15 of level 8
base-stream-controller.ts:1500 [log] > [stream-controller]: FRAG_LOADING->PARSING
transmuxer-interface.ts:349 [log] > [transmuxer.ts]: Flushed fragment 15 of level 8
base-stream-controller.ts:1500 [log] > [stream-controller]: PARSING->PARSED
base-stream-controller.ts:504 [log] > [stream-controller]: Buffered main sn: 15 of level 8 [0.000,64.000]
base-stream-controller.ts:1500 [log] > [stream-controller]: PARSED->IDLE
base-stream-controller.ts:655 [log] > [stream-controller]: Loading fragment 16 cc: 0 of [0-37] level: 8, target: 64
base-stream-controller.ts:1500 [log] > [stream-controller]: IDLE->FRAG_LOADING
base-stream-controller.ts:655 [log] > [audio-stream-controller]: Loading fragment 15 cc: 0 of [0-37] track: 0, target: 60
base-stream-controller.ts:1500 [log] > [audio-stream-controller]: IDLE->FRAG_LOADING
base-stream-controller.ts:371 [log] > [audio-stream-controller]: Loaded fragment 15 of level 0
base-stream-controller.ts:1500 [log] > [audio-stream-controller]: FRAG_LOADING->PARSING
transmuxer-interface.ts:349 [log] > [transmuxer.ts]: Flushed fragment 15 of level 0
base-stream-controller.ts:1500 [log] > [audio-stream-controller]: PARSING->PARSED
base-stream-controller.ts:504 [log] > [audio-stream-controller]: Buffered audio sn: 15 of track 0 [0.000,64.017]
base-stream-controller.ts:1500 [log] > [audio-stream-controller]: PARSED->IDLE
hls.ts:427 [log] > set currentLevel:0
hls.ts:468 [log] > set loadLevel:0
level-controller.ts:272 [log] > [level-controller]: switching to level 0 from 8
level-controller.ts:584 [log] > [level-controller]: Attempt loading level index 0 with URL-id 0 https://fmp4-ts-hls-demo.vercel.app/manifest7/video_M4S_h265_aac_96000_426x240_500000_variant.m3u8
base-stream-controller.ts:1500 [log] > [stream-controller]: FRAG_LOADING->IDLE
buffer-controller.ts:864 [log] > [buffer-controller]: Removing [0,148.125] from the video SourceBuffer
base-stream-controller.ts:1299 [warn] > [stream-controller]: Fragment 16 of level 8 was aborted
handleFragLoadAborted @ base-stream-controller.ts:1299
handleFragLoadError @ base-stream-controller.ts:747
(anonymous) @ base-stream-controller.ts:698
Promise.catch (async)
_doFragLoad @ base-stream-controller.ts:698
_loadFragForPlayback @ base-stream-controller.ts:351
loadFragment @ base-stream-controller.ts:327
loadFragment @ stream-controller.ts:357
doTickIdle @ stream-controller.ts:336
doTick @ stream-controller.ts:170
tick @ task-loop.ts:110
fragBufferedComplete @ base-stream-controller.ts:528
onFragBuffered @ stream-controller.ts:856
emit @ index.js:203
emit @ hls.ts:250
trigger @ hls.ts:258
onUnblocked @ buffer-controller.ts:503
(anonymous) @ buffer-controller.ts:914
Promise.then (async)
blockBuffers @ buffer-controller.ts:912
onFragParsed @ buffer-controller.ts:517
emit @ index.js:203
emit @ hls.ts:250
trigger @ hls.ts:258
updateLevelTiming @ base-stream-controller.ts:1486
_handleTransmuxerFlush @ base-stream-controller.ts:780
onWorkerMessage @ transmuxer-interface.ts:342
level-controller.ts:272 [log] > [level-controller]: switching to level 0 from 0
level-controller.ts:584 [log] > [level-controller]: Attempt loading level index 0 with URL-id 0 https://fmp4-ts-hls-demo.vercel.app/manifest7/video_M4S_h265_aac_96000_426x240_500000_variant.m3u8
base-stream-controller.ts:1500 [log] > [stream-controller]: IDLE->WAITING_LEVEL
stream-controller.ts:615 [log] > [stream-controller]: Level 0 loaded [0,37], cc [0, 0] duration:148.125
base-stream-controller.ts:1500 [log] > [stream-controller]: WAITING_LEVEL->IDLE
base-stream-controller.ts:655 [log] > [stream-controller]: Loading fragment initSegment cc: 0 of [0-37] level: 0, target: 0
base-stream-controller.ts:1500 [log] > [stream-controller]: IDLE->FRAG_LOADING
base-stream-controller.ts:1500 [log] > [stream-controller]: FRAG_LOADING->IDLE
base-stream-controller.ts:504 [log] > [stream-controller]: Buffered main sn: initSegment of level 0
base-stream-controller.ts:655 [log] > [stream-controller]: Loading fragment 2 cc: 0 of [0-37] level: 0, target: 8.043
base-stream-controller.ts:1500 [log] > [stream-controller]: IDLE->FRAG_LOADING
transmuxer-interface.ts:201 [log] > [transmuxer-interface, main]: Starting new transmux session for sn: 2 p: -1 level: 0 id: 1
discontinuity: false
trackSwitch: true
contiguous: false
accurateTimeOffset: true
timeOffset: 8
initSegmentChange: true
base-stream-controller.ts:371 [log] > [stream-controller]: Loaded fragment 2 of level 0
base-stream-controller.ts:1500 [log] > [stream-controller]: FRAG_LOADING->PARSING
stream-controller.ts:1254 [log] > [stream-controller]: Init video buffer, container:video/mp4, codecs[level/parsed]=[hvc1.1.2.L60/hvc1.1.2.L60]
buffer-controller.ts:304 [log] > [buffer-controller]: changing video sourceBuffer type to video/mp4;codecs=hvc1.1.2.L60
buffer-controller.ts:265 [log] > [buffer-controller]: switching codec avc1 to hvc1
transmuxer-interface.ts:349 [log] > [transmuxer.ts]: Flushed fragment 2 of level 0
base-stream-controller.ts:1500 [log] > [stream-controller]: PARSING->PARSED
base-stream-controller.ts:504 [log] > [stream-controller]: Buffered main sn: 2 of level 0 [0.000,4.000]
base-stream-controller.ts:1500 [log] > [stream-controller]: PARSED->IDLE
base-stream-controller.ts:655 [log] > [stream-controller]: Loading fragment 37 cc: 0 of [0-37] level: 0, target: 8.157
base-stream-controller.ts:1500 [log] > [stream-controller]: IDLE->FRAG_LOADING
transmuxer-interface.ts:201 [log] > [transmuxer-interface, main]: Starting new transmux session for sn: 37 p: -1 level: 0 id: 1
discontinuity: false
trackSwitch: false
contiguous: false
accurateTimeOffset: true
timeOffset: -125852
initSegmentChange: false
base-stream-controller.ts:371 [log] > [stream-controller]: Loaded fragment 37 of level 0
base-stream-controller.ts:1500 [log] > [stream-controller]: FRAG_LOADING->PARSING
transmuxer-interface.ts:349 [log] > [transmuxer.ts]: Flushed fragment 37 of level 0
base-stream-controller.ts:1500 [log] > [stream-controller]: PARSING->PARSED
base-stream-controller.ts:504 [log] > [stream-controller]: Buffered main sn: 37 of level 0 [0.000,4.000]
base-stream-controller.ts:1500 [log] > [stream-controller]: PARSED->IDLE
buffer-controller.ts:533 [log] > [buffer-controller]: video sourceBuffer now EOS
base-stream-controller.ts:1500 [log] > [stream-controller]: IDLE->ENDED

Chrome media internals output

No response

@zalishchuk zalishchuk added Bug Needs Triage If there is a suspected stream issue, apply this label to triage if it is something we should fix. labels Jan 28, 2023
@robwalch
Copy link
Collaborator

robwalch commented Jan 30, 2023

Hi @zalishchuk,

To help us triage this issue, can you provide more information about which variants use which containers? Are all the AVC variants TS and all the HEVC variants fmp4? Do some Playlists contain a mix of TS and fmp4? HLS.js does not support HEVC in TS.

@robwalch
Copy link
Collaborator

robwalch commented Jan 30, 2023

After a quick glance, I suspect this issue is closely related to #5189.

I don't think it's the container format specifically that is the issue, but rather the difference in timestamp offsets between Playlists (basetime and samplerate / initPTS) that throw the alignment of variants off preventing successful switching.

@zalishchuk
Copy link
Author

@robwalch Hey! So, I didn't really got the idea of what kind of changes need to be made to make everything work as it should? And why does the player not crash with an error? I can't even restore video playback after changing the quality level from avc to hevc and back.

@robwalch
Copy link
Collaborator

robwalch commented Jan 30, 2023

Hi @zalishchuk,

We'll need to add additional logs to show the problem. The HEVC content is loading, parsing and appending, but we're not seeing where it's appending or what the parsed start and end times of each fragment are.

What we do see is that it loaded and appended fragment 18, but the end of the buffer remained at 72. Then it loaded and appended fragment 37 (the last fragment) but still no change:

[log] > [stream-controller]: Buffered main sn: initSegment of level 9 [0.000,72.000]
hls.js:2380 [log] > [stream-controller]: Loading fragment 18 cc: 0 of [0-37] level: 9, target: 72
hls.js:2999 [log] > [stream-controller]: IDLE->FRAG_LOADING
hls.js:2999 [log] > [stream-controller]: FRAG_LOADING->PARSING
hls.js:9038 [log] > [stream-controller]: Init video buffer, container:video/mp4, codecs[level/parsed]=[hvc1.1.2.L120/hvc1.1.2.L120]
hls.js:2180 [log] > [stream-controller]: Loaded fragment 18 of level 9
hls.js:2999 [log] > [stream-controller]: PARSING->PARSED
hls.js:2284 [log] > [stream-controller]: Buffered main sn: 18 of level 9 [0.000,72.000]
hls.js:2999 [log] > [stream-controller]: PARSED->IDLE
hls.js:2380 [log] > [stream-controller]: Loading fragment 37 cc: 0 of [0-37] level: 9, target: 72
hls.js:2999 [log] > [stream-controller]: IDLE->FRAG_LOADING
hls.js:2999 [log] > [stream-controller]: FRAG_LOADING->PARSING
hls.js:2180 [log] > [stream-controller]: Loaded fragment 37 of level 9
hls.js:2999 [log] > [stream-controller]: PARSING->PARSED
hls.js:2284 [log] > [stream-controller]: Buffered main sn: 37 of level 9 [0.000,72.000]

If you look at the timeline you will see the entire playlist repositioned to where all segments start at 0. This suggests the media times were not aligned with the timestamps in the other variants. It's not ideal but the player should at least be able to handle this for VOD content.

@zalishchuk
Copy link
Author

The interesting thing I found is that if you start the hls.js with "startLevel": 0 option (0 level is the hevc one) - everything works fine even when switching quality levels from avc1 to hvc1

@robwalch
Copy link
Collaborator

robwalch commented Jan 31, 2023

The interesting thing I found is that if you start the hls.js with "startLevel": 0 option (0 level is the hevc one) - everything works fine even when switching quality levels from avc1 to hvc1

Not really. The AVC is pushed 1.4s forward in that case.

For your stream to work in the current release of HLS.js it expects all variants within the same discontinuity to share the same base start time. These AVC variants in TS container have a start PTS of 126000 @ 90000 timescale, while the HEVC variants in fmp4 container have a start PTS of 0 @ 12288 timescale.

$ ffprobe -v error -hide_banner -select_streams v:0 -show_streams -i https://fmp4-ts-hls-demo.vercel.app/stream.m3u8                    
codec_long_name=H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10
width=1280
height=720
time_base=1/90000
start_pts=126000
start_time=1.400000

$ ffprobe -v error -hide_banner -select_streams v:9 -show_streams -i https://fmp4-ts-hls-demo.vercel.app/stream.m3u8                    
codec_long_name=H.265 / HEVC (High Efficiency Video Coding)
width=854
height=480
time_base=1/12288
start_pts=0
start_time=0.000000

#5191 includes some fixes for switching between variants with mixed time scales. I'll look into resetting the PTS offset as well when the scale changes or the offset is not within safe bounds.

@robwalch robwalch added this to the 1.4.0 milestone Jan 31, 2023
@robwalch robwalch added Confirmed and removed Needs Triage If there is a suspected stream issue, apply this label to triage if it is something we should fix. labels Jan 31, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants