From abad4568da5fab7e02c6c000b8f7349dffb09981 Mon Sep 17 00:00:00 2001 From: Kieran Date: Thu, 22 Jun 2023 19:53:15 +0100 Subject: [PATCH] Show offline on video player --- src/element/live-video-player.tsx | 19 +++++++++++++++---- src/pages/stream-page.css | 19 +++++++++++++++++++ 2 files changed, 34 insertions(+), 4 deletions(-) diff --git a/src/element/live-video-player.tsx b/src/element/live-video-player.tsx index bad2cec..6b3df9b 100644 --- a/src/element/live-video-player.tsx +++ b/src/element/live-video-player.tsx @@ -1,9 +1,15 @@ import Hls from "hls.js"; -import { HTMLProps, useEffect, useMemo, useRef } from "react"; +import { HTMLProps, useEffect, useMemo, useRef, useState } from "react"; + +export enum VideoStatus { + Online = "online", + Offline = "offline" +} export function LiveVideoPlayer(props: HTMLProps & { stream?: string }) { const video = useRef(null); const streamCached = useMemo(() => props.stream, [props.stream]); + const [status, setStatus] = useState(); useEffect(() => { if (streamCached && video.current && !video.current.src && Hls.isSupported()) { @@ -13,17 +19,22 @@ export function LiveVideoPlayer(props: HTMLProps & { stream?: hls.on(Hls.Events.ERROR, (event, data) => { console.debug(event, data); const errorType = data.type; - if(errorType === Hls.ErrorTypes.NETWORK_ERROR) { + if (errorType === Hls.ErrorTypes.NETWORK_ERROR) { hls.stopLoad(); hls.detachMedia(); + setStatus(VideoStatus.Offline); } }) + hls.on(Hls.Events.MANIFEST_PARSED, () => { + setStatus(VideoStatus.Online); + }) return () => hls.destroy(); } }, [video, streamCached]); return ( -
-