修改为下载完成之后才播放

This commit is contained in:
CN-JS-HuiBai
2026-04-03 23:09:17 +08:00
parent 4b46383852
commit 2342e1f8a5

View File

@@ -432,11 +432,14 @@ document.addEventListener('DOMContentLoaded', () => {
}
};
let hasDownloadCompleted = false;
const handleProgress = (progress) => {
if (!progress) return;
const status = progress.status;
if (status === 'downloading') {
hasDownloadCompleted = false;
showDownloadPhase();
const percent = Math.min(Math.max(Math.round(progress.percent || 0), 0), 100);
updateTranscodeProgressBar(percent);
@@ -446,6 +449,7 @@ document.addEventListener('DOMContentLoaded', () => {
downloadProgressText.textContent = `${percent}%`;
downloadProgressFill.style.width = `${percent}%`;
} else if (status === 'downloaded') {
hasDownloadCompleted = true;
showDownloadPhase();
updateTranscodeProgressBar(100);
const downloaded = formatBytes(progress.downloadedBytes || progress.totalBytes || 0);
@@ -457,6 +461,7 @@ document.addEventListener('DOMContentLoaded', () => {
showTranscodePhase();
}, 600);
} else if (status === 'transcoding') {
hasDownloadCompleted = true;
showTranscodePhase();
const percent = Math.min(Math.max(Math.round(progress.percent || 0), 0), 100);
updateTranscodeProgressBar(percent);
@@ -471,6 +476,7 @@ document.addEventListener('DOMContentLoaded', () => {
statTime.textContent = progress.timemark ? `${progress.timemark}` : '';
}
} else if (status === 'finished') {
hasDownloadCompleted = true;
showTranscodePhase();
updateTranscodeProgressBar(100);
transcodeProgressText.textContent = '100%';
@@ -498,6 +504,7 @@ document.addEventListener('DOMContentLoaded', () => {
};
const resetPhases = () => {
hasDownloadCompleted = false;
if (downloadPhase) downloadPhase.classList.remove('hidden');
if (downloadSizeText) downloadSizeText.textContent = '准备下载...';
if (downloadProgressText) downloadProgressText.textContent = '0%';
@@ -1237,7 +1244,9 @@ document.addEventListener('DOMContentLoaded', () => {
const streamUrl = buildStreamUrl();
videoPlayer.src = streamUrl;
videoPlayer.load();
videoPlayer.addEventListener('loadedmetadata', () => {
const onCanPlayAfterDownload = () => {
if (!hasDownloadCompleted) return;
videoPlayer.removeEventListener('canplay', onCanPlayAfterDownload);
syncVideoDurationFromPlayer();
transcodingOverlay.classList.add('hidden');
videoPlayer.classList.remove('hidden');
@@ -1250,10 +1259,12 @@ document.addEventListener('DOMContentLoaded', () => {
updateVolumeControls();
updateFullscreenControls();
schedulePlaybackChromeHide();
videoPlayer.play().catch(() => {});
loadSubtitleTracks(seekOffset).catch((error) => {
console.error('Subtitle load failed:', error);
});
}, { once: true });
};
videoPlayer.addEventListener('canplay', onCanPlayAfterDownload);
} catch (err) {
console.error(err);
transcodingOverlay.innerHTML = `<p style="color: #ef4444;">Transcode Failed: ${err.message}</p>`;