From 031e8f4523ab0d654d7f8534ba403f378e1b19c3 Mon Sep 17 00:00:00 2001 From: "Carlos (Almeira)" Date: Mon, 30 Mar 2026 08:26:32 -0500 Subject: [PATCH] feat: synchronize live TV/Radio pages with global floating player --- src/components/media/GlobalPlayer.tsx | 27 ++++++-- src/components/media/LivePlayer.tsx | 88 ++++++++++++++++++++------- src/store/usePlayerStore.ts | 6 +- 3 files changed, 94 insertions(+), 27 deletions(-) diff --git a/src/components/media/GlobalPlayer.tsx b/src/components/media/GlobalPlayer.tsx index d3beb7b..91f33b1 100644 --- a/src/components/media/GlobalPlayer.tsx +++ b/src/components/media/GlobalPlayer.tsx @@ -10,7 +10,7 @@ import 'video.js/dist/video-js.css'; export const GlobalPlayer = () => { const { audioUrl, isAudioPlaying, audioVolume, toggleAudio, setAudioVolume, - isVideoActive, videoUrl, setVideoActive + isVideoActive, videoUrl, videoType, setVideoActive } = usePlayerStore(); const audioRef = useRef(null); @@ -36,9 +36,16 @@ export const GlobalPlayer = () => { // Handle Video Player Initialization useEffect(() => { - if (isVideoActive && videoRef.current && !playerRef.current) { + if (isVideoActive && videoRef.current && videoType === 'm3u8') { + // Cleanup previous if exists + if (playerRef.current) { + playerRef.current.dispose(); + playerRef.current = null; + } + const videoElement = document.createElement('video-js'); videoElement.classList.add('vjs-big-play-centered', 'vjs-almeira'); + videoRef.current.innerHTML = ''; videoRef.current.appendChild(videoElement); const player = playerRef.current = videojs(videoElement, { @@ -47,7 +54,7 @@ export const GlobalPlayer = () => { responsive: true, fluid: true, sources: [{ - src: videoUrl || 'https://demo.unified-streaming.com/k8s/features/stable/video/tears-of-steel/tears-of-steel.ism/.m3u8', // Fallback para test + src: videoUrl || 'https://demo.unified-streaming.com/k8s/features/stable/video/tears-of-steel/tears-of-steel.ism/.m3u8', type: 'application/x-mpegURL' }] }); @@ -62,7 +69,7 @@ export const GlobalPlayer = () => { playerRef.current = null; } }; - }, [isVideoActive, videoUrl]); + }, [isVideoActive, videoUrl, videoType]); // Sync Volume useEffect(() => { @@ -91,7 +98,17 @@ export const GlobalPlayer = () => { {isVideoActive && (
-
+ {videoType === 'm3u8' ? ( +
+ ) : ( +