diff --git a/css/player-base.js b/css/player-base.js index 0b6a875d..222f106d 100644 --- a/css/player-base.js +++ b/css/player-base.js @@ -7,112 +7,112 @@ document.addEventListener("DOMContentLoaded", () => { const qua = new URLSearchParams(window.location.search).get("quality") || ""; localStorage.setItem(`progress-${new URLSearchParams(window.location.search).get('v')}`, 0); +if (qua !== "medium") { + const audio = document.getElementById('aud'); - if (qua !== "medium") { - const audio = document.getElementById('aud'); + const syncVolume = () => { + audio.volume = video.volume(); + }; - const syncVolume = () => { - audio.volume = video.volume(); - }; + const syncVolumeWithVideo = () => { + video.volume(audio.volume); + }; - const syncVolumeWithVideo = () => { - video.volume(audio.volume); - }; + const checkAudioBuffer = () => { + const buffered = audio.buffered; + const bufferedEnd = buffered.length > 0 ? buffered.end(buffered.length - 1) : 0; + return audio.currentTime <= bufferedEnd; + }; - const checkAudioBuffer = () => { - const buffered = audio.buffered; - const bufferedEnd = buffered.length > 0 ? buffered.end(buffered.length - 1) : 0; - return audio.currentTime <= bufferedEnd; - }; + const isVideoBuffered = () => { + // Check if video has enough buffered data + const buffered = video.buffered(); + return buffered.length > 0 && buffered.end(buffered.length - 1) >= video.currentTime(); + }; - const isVideoBuffered = () => { - // Check if video has enough buffered data - const buffered = video.buffered(); - return buffered.length > 0 && buffered.end(buffered.length - 1) >= video.currentTime(); - }; + const handleSeek = () => { + // Pause video and audio when seeking + video.pause(); + audio.pause(); - const handleSeek = () => { - // Pause video and audio when seeking - video.pause(); - audio.pause(); + // Sync audio with video during seeking + if (Math.abs(video.currentTime() - audio.currentTime) > 0.3) { + audio.currentTime = video.currentTime(); + } - // Sync audio with video during seeking - if (Math.abs(video.currentTime() - audio.currentTime) > 0.3) { - audio.currentTime = video.currentTime(); - } + // Wait for audio to be buffered sufficiently + if (!checkAudioBuffer()) { + audio.addEventListener('canplay', () => { + if (video.paused && isVideoBuffered()) { + video.play(); + audio.play(); + } + }, { once: true }); + } + }; - // Wait for audio to be buffered sufficiently - if (!checkAudioBuffer()) { - audio.addEventListener('canplay', () => { - if (video.paused && isVideoBuffered()) { - video.play(); - audio.play(); - } - }, { - once: true - }); - } - }; - - video.on('play', () => { - if (Math.abs(video.currentTime() - audio.currentTime) > 0.3) { - audio.currentTime = video.currentTime(); - } - - if (isVideoBuffered()) { - audio.play(); - } else { - video.pause(); - audio.pause(); - } - }); - - video.on('pause', () => { - audio.pause(); - }); - - video.on('waiting', () => { - video.pause(); - audio.pause(); - }); - - video.on('canplaythrough', () => { - if (!video.paused()) { - video.play(); - audio.play(); - } - }); - - video.on('seeking', handleSeek); - - video.on('seeked', () => { - if (isVideoBuffered()) { - video.play(); - } - audio.play(); // Ensure audio is playing after seek - }); - - video.on('volumechange', syncVolume); - audio.addEventListener('volumechange', syncVolumeWithVideo); - - // Listen for media control events - document.addEventListener('play', () => { + const playBothIfBuffered = () => { + if (isVideoBuffered() && checkAudioBuffer()) { video.play(); audio.play(); - }); + } + }; - document.addEventListener('pause', () => { + video.on('play', () => { + if (Math.abs(video.currentTime() - audio.currentTime) > 0.3) { + audio.currentTime = video.currentTime(); + } + + if (isVideoBuffered()) { + audio.play(); + } else { video.pause(); audio.pause(); - }); - document.addEventListener('fullscreenchange', () => { - if (!document.fullscreenElement) { - video.pause(); - audio.pause(); - } - }); - } -}); + } + }); + + video.on('pause', () => { + audio.pause(); + }); + + video.on('waiting', () => { + video.pause(); + audio.pause(); + + // Add event listener to resume when buffering is done + video.on('canplaythrough', playBothIfBuffered); + }); + + video.on('canplaythrough', playBothIfBuffered); + + video.on('seeking', handleSeek); + + video.on('seeked', () => { + playBothIfBuffered(); + }); + + video.on('volumechange', syncVolume); + audio.addEventListener('volumechange', syncVolumeWithVideo); + + // Listen for media control events + document.addEventListener('play', () => { + video.play(); + audio.play(); + }); + + document.addEventListener('pause', () => { + video.pause(); + audio.pause(); + }); + + document.addEventListener('fullscreenchange', () => { + if (!document.fullscreenElement) { + video.pause(); + audio.pause(); + } + }); +} + window.pokePlayer = { ver:`16-vjs-${videojs.VERSION}`,