diff --git a/frontend/src/components/Video/VideoPlayer.tsx b/frontend/src/components/Video/VideoPlayer.tsx index 2b93e4d..74bd400 100644 --- a/frontend/src/components/Video/VideoPlayer.tsx +++ b/frontend/src/components/Video/VideoPlayer.tsx @@ -1,61 +1,64 @@ import React, { useEffect, useRef } from "react"; +import { useParams } from "react-router-dom"; import videojs from "video.js"; -import type Player from "video.js/dist/types/player"; import "video.js/dist/video-js.css"; -interface VideoPlayerProps { - streamId: number; -} - -const VideoPlayer: React.FC = ({ streamId }) => { +const VideoPlayer: React.FC = () => { + const { streamerName } = useParams<{ streamerName: string }>(); // Get streamerName from URL const videoRef = useRef(null); - const playerRef = useRef(null); + const playerRef = useRef(null); useEffect(() => { - // Makes sure Video.js player is only initialized once - if (!playerRef.current && videoRef.current) { + if (!videoRef.current || !streamerName) return; + + const streamUrl = `http://localhost:8080/stream/${streamerName}/index.m3u8`; // Updated URL with streamerName + + if (!playerRef.current) { const videoElement = document.createElement("video"); - videoElement.classList.add( - "video-js", - "vjs-big-play-centered", - "w-full", - "h-full", - ); + videoElement.classList.add("video-js", "vjs-big-play-centered", "w-full", "h-full"); + videoElement.setAttribute("playsinline", "true"); videoRef.current.appendChild(videoElement); playerRef.current = videojs(videoElement, { controls: true, + autoplay: true, + muted: true, fluid: true, responsive: true, - // autoplay: true, - loop: true, - aspectRatio: "16:9", + liveui: true, sources: [ { - src: `/images/sample_game_video.mp4`, - // type: "application/x-mpegURL", - type: "video/mp4", + src: streamUrl, + type: "application/x-mpegURL", }, ], }); + + // Handle stream errors & retry + playerRef.current.on("error", () => { + console.error(`Stream failed to load: ${streamUrl}`); + setTimeout(() => { + console.log("Retrying stream..."); + playerRef.current?.src({ src: streamUrl, type: "application/x-mpegURL" }); + playerRef.current?.play(); + }, 5000); + }); + } else { + playerRef.current.src({ src: streamUrl, type: "application/x-mpegURL" }); + playerRef.current.play(); } - // Dispose the Video.js player when the component unmounts return () => { if (playerRef.current) { playerRef.current.dispose(); playerRef.current = null; } }; - }, [streamId]); + }, [streamerName]); return ( -
-
+
+
); };