From 4b46383852eaf5f93865509ca152039128807306 Mon Sep 17 00:00:00 2001 From: CN-JS-HuiBai Date: Fri, 3 Apr 2026 23:04:03 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E8=BF=9B=E5=BA=A6=E6=9D=A1?= =?UTF-8?q?=E6=B6=88=E5=A4=B1=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/js/main.js | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/public/js/main.js b/public/js/main.js index b2225d0..391051a 100644 --- a/public/js/main.js +++ b/public/js/main.js @@ -328,6 +328,23 @@ document.addEventListener('DOMContentLoaded', () => { seekBarTranscode.style.width = `${safePercent}%`; }; + const syncVideoDurationFromPlayer = () => { + if (!videoPlayer) return false; + const nextDuration = Number.isFinite(videoPlayer.duration) && videoPlayer.duration > 0 + ? videoPlayer.duration + : 0; + if (nextDuration <= 0) { + return false; + } + videoDuration = nextDuration; + if (seekTotalTime) { + seekTotalTime.textContent = formatTime(videoDuration); + } + showSeekBar(); + updateSeekBarPosition(seekOffset + (videoPlayer.currentTime || 0)); + return true; + }; + const showCustomControls = () => { if (customControls) { customControls.classList.remove('hidden'); @@ -400,6 +417,8 @@ document.addEventListener('DOMContentLoaded', () => { if (seekTotalTime) seekTotalTime.textContent = formatTime(videoDuration); showSeekBar(); updateSeekBarPosition(seekOffset + (videoPlayer.currentTime || 0)); + } else if (message.type === 'duration') { + syncVideoDurationFromPlayer(); } if (message.type === 'progress') { handleProgress(message.progress); @@ -530,6 +549,8 @@ document.addEventListener('DOMContentLoaded', () => { lastAbsolutePlaybackTime = absoluteTime; updateSeekBarPosition(absoluteTime); }); + videoPlayer.addEventListener('loadedmetadata', syncVideoDurationFromPlayer); + videoPlayer.addEventListener('durationchange', syncVideoDurationFromPlayer); videoPlayer.addEventListener('play', () => { updatePlayControls(); @@ -1217,6 +1238,7 @@ document.addEventListener('DOMContentLoaded', () => { videoPlayer.src = streamUrl; videoPlayer.load(); videoPlayer.addEventListener('loadedmetadata', () => { + syncVideoDurationFromPlayer(); transcodingOverlay.classList.add('hidden'); videoPlayer.classList.remove('hidden'); isStreamActive = true; @@ -1303,6 +1325,7 @@ document.addEventListener('DOMContentLoaded', () => { showSeekBar(); showCustomControls(); videoPlayer.addEventListener('loadedmetadata', () => { + syncVideoDurationFromPlayer(); updateSeekBarPosition(seekOffset); updatePlayControls(); updateVolumeControls();