diff --git a/web/src/components/image/AnimatedEventThumbnail.tsx b/web/src/components/image/AnimatedEventThumbnail.tsx index 7fa01a978..347138b0b 100644 --- a/web/src/components/image/AnimatedEventThumbnail.tsx +++ b/web/src/components/image/AnimatedEventThumbnail.tsx @@ -22,30 +22,23 @@ export function AnimatedEventThumbnail({ event }: AnimatedEventThumbnailProps) { return `${baseUrl}api/events/${event.id}/preview.gif`; }, [event]); - const aspect = useMemo(() => { + const aspectRatio = useMemo(() => { if (!config) { - return ""; + return 1; } const detect = config.cameras[event.camera].detect; - const aspect = detect.width / detect.height; - - if (aspect > 2) { - return "aspect-wide"; - } else if (aspect < 1) { - return "aspect-tall"; - } else { - return "aspect-video"; - } - }, [config, event]); + return detect.width / detect.height; + }, [config]); return (
diff --git a/web/src/components/player/LivePlayer.tsx b/web/src/components/player/LivePlayer.tsx index 7713f3b5b..093410de0 100644 --- a/web/src/components/player/LivePlayer.tsx +++ b/web/src/components/player/LivePlayer.tsx @@ -87,6 +87,7 @@ export default function LivePlayer({ setLiveReady(true)} /> ); diff --git a/web/src/components/player/PreviewThumbnailPlayer.tsx b/web/src/components/player/PreviewThumbnailPlayer.tsx index f35ab0dcc..068354ce8 100644 --- a/web/src/components/player/PreviewThumbnailPlayer.tsx +++ b/web/src/components/player/PreviewThumbnailPlayer.tsx @@ -2,7 +2,6 @@ import VideoPlayer from "./VideoPlayer"; import React, { useCallback, useEffect, - useMemo, useRef, useState, } from "react"; @@ -11,6 +10,7 @@ import Player from "video.js/dist/types/player"; import { AspectRatio } from "../ui/aspect-ratio"; import { LuPlayCircle } from "react-icons/lu"; import { isCurrentHour } from "@/utils/dateUtil"; +import { isSafari } from "@/utils/browserUtil"; type PreviewPlayerProps = { camera: string; @@ -38,9 +38,6 @@ export default function PreviewThumbnailPlayer({ onClick, }: PreviewPlayerProps) { const playerRef = useRef(null); - const isSafari = useMemo(() => { - return /^((?!chrome|android).)*safari/i.test(navigator.userAgent); - }, []); const [visible, setVisible] = useState(false); const [isInitiallyVisible, setIsInitiallyVisible] = useState(false); @@ -135,7 +132,6 @@ export default function PreviewThumbnailPlayer({ camera={camera} eventId={eventId} isMobile={isMobile} - isSafari={isSafari} onClick={onClick} /> @@ -151,7 +147,6 @@ type PreviewContentProps = { isInitiallyVisible: boolean; startTs: number; isMobile: boolean; - isSafari: boolean; onClick?: () => void; }; function PreviewContent({ @@ -163,10 +158,10 @@ function PreviewContent({ isInitiallyVisible, startTs, isMobile, - isSafari, onClick, }: PreviewContentProps) { const apiHost = useApiHost(); + const slowPlayack = isSafari(); // handle touchstart -> touchend as click const [touchStart, setTouchStart] = useState(0); @@ -237,7 +232,7 @@ function PreviewContent({ player.pause(); // autoplay + pause is required for iOS } - player.playbackRate(isSafari ? 2 : 8); + player.playbackRate(slowPlayack ? 2 : 8); player.currentTime(startTs - relevantPreview.start); if (isMobile && onClick) { player.on("touchstart", handleTouchStart); diff --git a/web/src/components/player/WebRTCPlayer.tsx b/web/src/components/player/WebRTCPlayer.tsx index e869738d7..1e86dab70 100644 --- a/web/src/components/player/WebRTCPlayer.tsx +++ b/web/src/components/player/WebRTCPlayer.tsx @@ -4,16 +4,21 @@ import { useCallback, useEffect, useRef } from "react"; type WebRtcPlayerProps = { className?: string; camera: string; + playbackEnabled?: boolean; onPlaying?: () => void; }; export default function WebRtcPlayer({ className, camera, + playbackEnabled = true, onPlaying, }: WebRtcPlayerProps) { + // camera states + const pcRef = useRef(); const videoRef = useRef(null); + const PeerConnection = useCallback( async (media: string) => { if (!videoRef.current) { @@ -129,6 +134,10 @@ export default function WebRtcPlayer({ return; } + if (!playbackEnabled) { + return; + } + const url = `${baseUrl.replace( /^http/, "ws" @@ -143,18 +152,16 @@ export default function WebRtcPlayer({ pcRef.current = undefined; } }; - }, [camera, connect, PeerConnection, pcRef, videoRef]); + }, [camera, connect, PeerConnection, pcRef, videoRef, playbackEnabled]); return ( -
-
+