diff --git a/web/player_lite.html b/web/player_lite.html index 663d483..8748aef 100644 --- a/web/player_lite.html +++ b/web/player_lite.html @@ -245,22 +245,19 @@ const isTurbo = urlParams.get('turbo') === 'true'; const hls = new Hls({ - maxBufferLength: 120, // Doubled for stability + maxBufferLength: 120, maxMaxBufferLength: 240, enableWorker: true, - liveSyncDurationCount: 6, // Slightly more buffer for micro-cut protection - liveMaxLatencyDurationCount: 40, - lowLatencyMode: false, // Disabled for better stability on laggy connections - // Robustness features - nudgeOffset: 0.6, // More aggressive jump over corrupted frames - nudgeMaxRetries: 25, - maxLiveSyncPlaybackRate: 1.2, // Smooth catch-up - // Turbo-Start specific - startLevel: 0, - initialLiveManifestSize: 1, - abrEwmaDefaultEstimate: 700000, - manifestLoadingRetryDelay: 500, - levelLoadingRetryDelay: 500 + liveSyncDurationCount: 10, + liveMaxLatencyDurationCount: 30, + lowLatencyMode: false, + nudgeOffset: 0.8, + nudgeMaxRetries: 30, + maxLiveSyncPlaybackRate: 1.1, + initialLiveManifestSize: 3, + abrEwmaDefaultEstimate: 1000000, + manifestLoadingRetryDelay: 1000, + levelLoadingRetryDelay: 1000 }); window.hlsInstance = hls; @@ -269,7 +266,12 @@ hls.on(Hls.Events.MANIFEST_PARSED, () => { hideLoading(); - video.play().catch(() => playOverlay.style.display = 'flex'); + const checkBuffer = setInterval(() => { + if (video.buffered.length > 0 && video.buffered.end(0) > 1.5) { + clearInterval(checkBuffer); + video.play().catch(() => playOverlay.style.display = 'flex'); + } + }, 200); }); hls.on(Hls.Events.ERROR, (event, data) => {