From f261bce514fff0bcf31c9a5066d1cb3f9013e46f Mon Sep 17 00:00:00 2001 From: Nick Mowen Date: Fri, 26 Jan 2024 07:24:18 -0700 Subject: [PATCH] Fix no preview case --- .../components/player/DynamicVideoPlayer.tsx | 75 ++++++++----------- 1 file changed, 31 insertions(+), 44 deletions(-) diff --git a/web/src/components/player/DynamicVideoPlayer.tsx b/web/src/components/player/DynamicVideoPlayer.tsx index 20a83f959..eded9cbd3 100644 --- a/web/src/components/player/DynamicVideoPlayer.tsx +++ b/web/src/components/player/DynamicVideoPlayer.tsx @@ -32,42 +32,12 @@ export default function DynamicVideoPlayer({ [config] ); - // initial state - - const initialPlaybackSource = useMemo(() => { - const date = new Date(timeRange.start * 1000); - return { - src: `${apiHost}vod/${date.getFullYear()}-${ - date.getMonth() + 1 - }/${date.getDate()}/${date.getHours()}/${camera}/${timezone.replaceAll( - "/", - "," - )}/master.m3u8`, - type: "application/vnd.apple.mpegurl", - }; - }, []); - const initialPreviewSource = useMemo(() => { - const source = cameraPreviews.find( - (preview) => - Math.round(preview.start) >= timeRange.start && - Math.floor(preview.end) <= timeRange.end - )?.src; - - if (source) { - return { - src: source, - type: "video/mp4", - }; - } else { - return undefined; - } - }, []); - // controlling playback const playerRef = useRef(undefined); const previewRef = useRef(undefined); const [isScrubbing, setIsScrubbing] = useState(false); + const [hasPreview, setHasPreview] = useState(false); const [focusedItem, setFocusedItem] = useState( undefined ); @@ -85,6 +55,21 @@ export default function DynamicVideoPlayer({ ); }, [config]); + // initial state + + const initialPlaybackSource = useMemo(() => { + const date = new Date(timeRange.start * 1000); + return { + src: `${apiHost}vod/${date.getFullYear()}-${ + date.getMonth() + 1 + }/${date.getDate()}/${date.getHours()}/${camera}/${timezone.replaceAll( + "/", + "," + )}/master.m3u8`, + type: "application/vnd.apple.mpegurl", + }; + }, []); + // state of playback player const recordingParams = useMemo(() => { @@ -111,19 +96,20 @@ export default function DynamicVideoPlayer({ "," )}/master.m3u8`; + const preview = cameraPreviews.find( + (preview) => + Math.round(preview.start) >= timeRange.start && + Math.floor(preview.end) <= timeRange.end + ); + setHasPreview(preview != undefined); + controller.newPlayback({ recordings, playbackUri, - preview: cameraPreviews.find( - (preview) => - Math.round(preview.start) >= timeRange.start && - Math.floor(preview.end) <= timeRange.end - ), + preview, }); }, [controller, recordings]); - const hasPreview = true; - if (!controller) { return ; } @@ -154,6 +140,10 @@ export default function DynamicVideoPlayer({ player.on("timeupdate", () => { controller.updateProgress(player.currentTime() || 0); }); + + if (onControllerReady) { + onControllerReady(controller); + } }} onDispose={() => { playerRef.current = undefined; @@ -167,7 +157,9 @@ export default function DynamicVideoPlayer({ )} -
+
{ previewRef.current = player; player.on("seeked", () => controller.finishedSeeking()); - - if (onControllerReady) { - onControllerReady(controller); - } }} onDispose={() => { previewRef.current = undefined;