diff --git a/packages/app/src/Element/LiveEvent.tsx b/packages/app/src/Element/LiveEvent.tsx index 75847998..576c9a64 100644 --- a/packages/app/src/Element/LiveEvent.tsx +++ b/packages/app/src/Element/LiveEvent.tsx @@ -1,21 +1,11 @@ import { NostrEvent } from "@snort/system"; import { findTag } from "SnortUtils"; -import { useEffect, useRef } from "react"; -import Hls from "hls.js"; +import { LiveVideoPlayer } from "Element/LiveVideoPlayer"; export function LiveEvent({ ev }: { ev: NostrEvent }) { - const video = useRef(null); - useEffect(() => { - const stream = findTag(ev, "streaming"); - if (stream && video.current && !video.current.src && Hls.isSupported()) { - const hls = new Hls(); - hls.loadSource(stream); - hls.attachMedia(video.current); - } - }, [video, ev]); - return ( -
-
- ); + const stream = findTag(ev, "streaming"); + if (stream) { + return ; + } + return null; } diff --git a/packages/app/src/Element/LiveVideoPlayer.tsx b/packages/app/src/Element/LiveVideoPlayer.tsx new file mode 100644 index 00000000..63164ac8 --- /dev/null +++ b/packages/app/src/Element/LiveVideoPlayer.tsx @@ -0,0 +1,18 @@ +import Hls from "hls.js"; +import { HTMLProps, useEffect, useRef } from "react"; + +export function LiveVideoPlayer(props: HTMLProps) { + const video = useRef(null); + useEffect(() => { + if (props.src && video.current && !video.current.src && Hls.isSupported()) { + const hls = new Hls(); + hls.loadSource(props.src); + hls.attachMedia(video.current); + } + }, [video, props]); + return ( +
+
+ ); +} diff --git a/packages/app/src/Element/MediaElement.tsx b/packages/app/src/Element/MediaElement.tsx index 0e2b61da..2f50b04d 100644 --- a/packages/app/src/Element/MediaElement.tsx +++ b/packages/app/src/Element/MediaElement.tsx @@ -12,6 +12,7 @@ import { useWallet } from "Wallet"; import { PaymentsCache } from "Cache/PaymentsCache"; import { Payment } from "Db"; import PageSpinner from "Element/PageSpinner"; +import { LiveVideoPlayer } from "Element/LiveVideoPlayer"; /* [ "imeta", @@ -172,11 +173,10 @@ export function MediaElement(props: MediaElementProps) { } else if (props.mime.startsWith("audio/")) { return