修复问题4
This commit is contained in:
@@ -93,6 +93,7 @@ document.addEventListener('DOMContentLoaded', () => {
|
|||||||
let controlsPointerReleaseTimeout = null;
|
let controlsPointerReleaseTimeout = null;
|
||||||
let managedSubtitleTracks = [];
|
let managedSubtitleTracks = [];
|
||||||
let selectedSubtitleTrackId = 'off';
|
let selectedSubtitleTrackId = 'off';
|
||||||
|
let pendingAutoPlayAfterDownload = false;
|
||||||
|
|
||||||
if (videoPlayer) {
|
if (videoPlayer) {
|
||||||
videoPlayer.controls = false;
|
videoPlayer.controls = false;
|
||||||
@@ -215,6 +216,29 @@ document.addEventListener('DOMContentLoaded', () => {
|
|||||||
controlSubtitleToggle.textContent = selectedOption ? selectedOption.textContent : 'CC Off';
|
controlSubtitleToggle.textContent = selectedOption ? selectedOption.textContent : 'CC Off';
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const maybeStartPlaybackAfterDownload = () => {
|
||||||
|
if (!pendingAutoPlayAfterDownload || !hasDownloadCompleted) return;
|
||||||
|
if (!videoPlayer || videoPlayer.readyState < 2) return;
|
||||||
|
|
||||||
|
pendingAutoPlayAfterDownload = false;
|
||||||
|
syncVideoDurationFromPlayer();
|
||||||
|
transcodingOverlay.classList.add('hidden');
|
||||||
|
videoPlayer.classList.remove('hidden');
|
||||||
|
isStreamActive = true;
|
||||||
|
lastAbsolutePlaybackTime = seekOffset;
|
||||||
|
showSeekBar();
|
||||||
|
showCustomControls();
|
||||||
|
updateSeekBarPosition(seekOffset);
|
||||||
|
updatePlayControls();
|
||||||
|
updateVolumeControls();
|
||||||
|
updateFullscreenControls();
|
||||||
|
schedulePlaybackChromeHide();
|
||||||
|
videoPlayer.play().catch(() => {});
|
||||||
|
loadSubtitleTracks(seekOffset).catch((error) => {
|
||||||
|
console.error('Subtitle load failed:', error);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
const resetSubtitleTracks = () => {
|
const resetSubtitleTracks = () => {
|
||||||
managedSubtitleTracks.forEach((track) => track.element.remove());
|
managedSubtitleTracks.forEach((track) => track.element.remove());
|
||||||
managedSubtitleTracks = [];
|
managedSubtitleTracks = [];
|
||||||
@@ -468,6 +492,7 @@ document.addEventListener('DOMContentLoaded', () => {
|
|||||||
}, 600);
|
}, 600);
|
||||||
} else if (status === 'transcoding') {
|
} else if (status === 'transcoding') {
|
||||||
hasDownloadCompleted = true;
|
hasDownloadCompleted = true;
|
||||||
|
maybeStartPlaybackAfterDownload();
|
||||||
if (!isStreamActive) {
|
if (!isStreamActive) {
|
||||||
if (transcodingOverlay) transcodingOverlay.classList.remove('hidden');
|
if (transcodingOverlay) transcodingOverlay.classList.remove('hidden');
|
||||||
if (videoPlayer) videoPlayer.classList.add('hidden');
|
if (videoPlayer) videoPlayer.classList.add('hidden');
|
||||||
@@ -487,6 +512,7 @@ document.addEventListener('DOMContentLoaded', () => {
|
|||||||
}
|
}
|
||||||
} else if (status === 'finished') {
|
} else if (status === 'finished') {
|
||||||
hasDownloadCompleted = true;
|
hasDownloadCompleted = true;
|
||||||
|
maybeStartPlaybackAfterDownload();
|
||||||
if (!isStreamActive) {
|
if (!isStreamActive) {
|
||||||
if (transcodingOverlay) transcodingOverlay.classList.remove('hidden');
|
if (transcodingOverlay) transcodingOverlay.classList.remove('hidden');
|
||||||
showTranscodePhase();
|
showTranscodePhase();
|
||||||
@@ -520,6 +546,7 @@ document.addEventListener('DOMContentLoaded', () => {
|
|||||||
|
|
||||||
const resetPhases = () => {
|
const resetPhases = () => {
|
||||||
hasDownloadCompleted = false;
|
hasDownloadCompleted = false;
|
||||||
|
pendingAutoPlayAfterDownload = false;
|
||||||
if (downloadPhase) downloadPhase.classList.remove('hidden');
|
if (downloadPhase) downloadPhase.classList.remove('hidden');
|
||||||
if (downloadSizeText) downloadSizeText.textContent = '准备下载...';
|
if (downloadSizeText) downloadSizeText.textContent = '准备下载...';
|
||||||
if (downloadProgressText) downloadProgressText.textContent = '0%';
|
if (downloadProgressText) downloadProgressText.textContent = '0%';
|
||||||
@@ -573,6 +600,8 @@ document.addEventListener('DOMContentLoaded', () => {
|
|||||||
});
|
});
|
||||||
videoPlayer.addEventListener('loadedmetadata', syncVideoDurationFromPlayer);
|
videoPlayer.addEventListener('loadedmetadata', syncVideoDurationFromPlayer);
|
||||||
videoPlayer.addEventListener('durationchange', syncVideoDurationFromPlayer);
|
videoPlayer.addEventListener('durationchange', syncVideoDurationFromPlayer);
|
||||||
|
videoPlayer.addEventListener('loadeddata', maybeStartPlaybackAfterDownload);
|
||||||
|
videoPlayer.addEventListener('canplay', maybeStartPlaybackAfterDownload);
|
||||||
|
|
||||||
videoPlayer.addEventListener('play', () => {
|
videoPlayer.addEventListener('play', () => {
|
||||||
updatePlayControls();
|
updatePlayControls();
|
||||||
@@ -1251,6 +1280,7 @@ document.addEventListener('DOMContentLoaded', () => {
|
|||||||
seekOffset = 0;
|
seekOffset = 0;
|
||||||
videoDuration = 0;
|
videoDuration = 0;
|
||||||
isStreamActive = false;
|
isStreamActive = false;
|
||||||
|
pendingAutoPlayAfterDownload = true;
|
||||||
hideSeekBar();
|
hideSeekBar();
|
||||||
hideCustomControls();
|
hideCustomControls();
|
||||||
setPlaybackStatus('Paused', 'paused');
|
setPlaybackStatus('Paused', 'paused');
|
||||||
@@ -1261,27 +1291,7 @@ document.addEventListener('DOMContentLoaded', () => {
|
|||||||
const streamUrl = buildStreamUrl();
|
const streamUrl = buildStreamUrl();
|
||||||
videoPlayer.src = streamUrl;
|
videoPlayer.src = streamUrl;
|
||||||
videoPlayer.load();
|
videoPlayer.load();
|
||||||
const onCanPlayAfterDownload = () => {
|
maybeStartPlaybackAfterDownload();
|
||||||
if (!hasDownloadCompleted) return;
|
|
||||||
videoPlayer.removeEventListener('canplay', onCanPlayAfterDownload);
|
|
||||||
syncVideoDurationFromPlayer();
|
|
||||||
transcodingOverlay.classList.add('hidden');
|
|
||||||
videoPlayer.classList.remove('hidden');
|
|
||||||
isStreamActive = true;
|
|
||||||
lastAbsolutePlaybackTime = seekOffset;
|
|
||||||
showSeekBar();
|
|
||||||
showCustomControls();
|
|
||||||
updateSeekBarPosition(seekOffset);
|
|
||||||
updatePlayControls();
|
|
||||||
updateVolumeControls();
|
|
||||||
updateFullscreenControls();
|
|
||||||
schedulePlaybackChromeHide();
|
|
||||||
videoPlayer.play().catch(() => {});
|
|
||||||
loadSubtitleTracks(seekOffset).catch((error) => {
|
|
||||||
console.error('Subtitle load failed:', error);
|
|
||||||
});
|
|
||||||
};
|
|
||||||
videoPlayer.addEventListener('canplay', onCanPlayAfterDownload);
|
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error(err);
|
console.error(err);
|
||||||
transcodingOverlay.innerHTML = `<p style="color: #ef4444;">Transcode Failed: ${err.message}</p>`;
|
transcodingOverlay.innerHTML = `<p style="color: #ef4444;">Transcode Failed: ${err.message}</p>`;
|
||||||
@@ -1304,6 +1314,7 @@ document.addEventListener('DOMContentLoaded', () => {
|
|||||||
|
|
||||||
handleProgress({ status: 'cancelled', percent: 0, details: 'Transcode stopped' });
|
handleProgress({ status: 'cancelled', percent: 0, details: 'Transcode stopped' });
|
||||||
isStreamActive = false;
|
isStreamActive = false;
|
||||||
|
pendingAutoPlayAfterDownload = false;
|
||||||
videoPlayer.pause();
|
videoPlayer.pause();
|
||||||
videoPlayer.removeAttribute('src');
|
videoPlayer.removeAttribute('src');
|
||||||
videoPlayer.load();
|
videoPlayer.load();
|
||||||
|
|||||||
Reference in New Issue
Block a user