video-dev / hls.js

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

Slow start on stream with CAN-BLOCK-RELOAD=YES #4766

Closed erankor closed 1 year ago

erankor commented 2 years ago

What version of Hls.js are you using?

v1.1.5

What browser (including version) are you using?

Chrome 103.0.5060.66 (Official Build) (64-bit)

What OS (including version) are you using?

Windows 10

Test stream

https://klive-stg.kaltura.com/env/cluster-1-a.live.nvq1/live/llhls/p/231/e/0_76i6kgsq/tl/main/st/0/t/0BbgSVSn03Iuv3kvYy2iBQ/master.m3u8

Configuration

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

Additional player setup steps

No response

Checklist

Steps to reproduce

Play the test stream :)

Expected behaviour

Playback will start after a few seconds (iOS/Safari plays the stream well)

What actually happened?

Playback starts after a long time ~15 sec. When hitting 'play', the player issues several blocking m3u8 requests with incrementing MSN's, until it finally starts playing. Note that this test stream uses the CAN-BLOCK-RELOAD tag, but it does not include any partial segments. In other words, it uses some low latency features, but it's not really a low latency stream. If it helps - you can change the 'master.m3u8' in the URL to 'master-v.m3u8' / 'master-a.m3u8', to get back only the video/audio respectively.

Thanks! Eran

Console output

During the stall, messages like these are printed in a loop:
base-stream-controller.ts:1384 [log] > [audio-stream-controller]: IDLE->WAITING_INIT_PTS
base-stream-controller.ts:1384 [log] > [audio-stream-controller]: WAITING_INIT_PTS->IDLE
audio-stream-controller.ts:807 [log] > [audio-stream-controller]: Waiting for video PTS in continuity counter 18 of live stream before loading audio fragment 49652789 of level 0
base-stream-controller.ts:1384 [log] > [audio-stream-controller]: IDLE->WAITING_INIT_PTS
base-stream-controller.ts:1384 [log] > [audio-stream-controller]: WAITING_INIT_PTS->IDLE
audio-stream-controller.ts:807 [log] > [audio-stream-controller]: Waiting for video PTS in continuity counter 18 of live stream before loading audio fragment 49652789 of level 0
base-stream-controller.ts:1384 [log] > [audio-stream-controller]: IDLE->WAITING_INIT_PTS
base-stream-controller.ts:1384 [log] > [audio-stream-controller]: WAITING_INIT_PTS->IDLE
audio-stream-controller.ts:807 [log] > [audio-stream-controller]: Waiting for video PTS in continuity counter 18 of live stream before loading audio fragment 49652789 of level 0
base-stream-controller.ts:1384 [log] > [audio-stream-controller]: IDLE->WAITING_INIT_PTS
base-stream-controller.ts:1384 [log] > [audio-stream-controller]: WAITING_INIT_PTS->IDLE
audio-stream-controller.ts:807 [log] > [audio-stream-controller]: Waiting for video PTS in continuity counter 18 of live stream before loading audio fragment 49652789 of level 0
base-stream-controller.ts:1384 [log] > [audio-stream-controller]: IDLE->WAITING_INIT_PTS
base-stream-controller.ts:1384 [log] > [audio-stream-controller]: WAITING_INIT_PTS->IDLE
audio-stream-controller.ts:807 [log] > [audio-stream-controller]: Waiting for video PTS in continuity counter 18 of live stream before loading audio fragment 49652789 of level 0
base-stream-controller.ts:1384 [log] > [audio-stream-controller]: IDLE->WAITING_INIT_PTS
base-stream-controller.ts:1384 [log] > [audio-stream-controller]: WAITING_INIT_PTS->IDLE
audio-stream-controller.ts:807 [log] > [audio-stream-controller]: Waiting for video PTS in continuity counter 18 of live stream before loading audio fragment 49652789 of level 0
base-stream-controller.ts:1384 [log] > [audio-stream-controller]: IDLE->WAITING_INIT_PTS
base-stream-controller.ts:1384 [log] > [audio-stream-controller]: WAITING_INIT_PTS->IDLE
audio-stream-controller.ts:807 [log] > [audio-stream-controller]: Waiting for video PTS in continuity counter 18 of live stream before loading audio fragment 49652789 of level 0
base-stream-controller.ts:1384 [log] > [audio-stream-controller]: IDLE->WAITING_INIT_PTS

Chrome media internals output

No response

robwalch commented 2 years ago

Not a Contribution

Your stream has no parts, but there is an expectation here for a partTarget:

https://github.com/video-dev/hls.js/blob/c10359d64f311ceeac4f42291459bcfe7bd00421/src/controller/base-stream-controller.ts#L1147

erankor commented 1 year ago

Thanks @robwalch!