use overlay so player state is maintained between camera switches

This commit is contained in:
Nicolas Mowen 2024-05-10 08:28:51 -06:00
parent 79de73aeb7
commit ac250cc891

View File

@ -14,6 +14,7 @@ import useSWR from "swr";
import { FrigateConfig } from "@/types/frigateConfig";
import { AxiosResponse } from "axios";
import { toast } from "sonner";
import { useOverlayState } from "@/hooks/use-overlay-state";
// Android native hls does not seek correctly
const USE_NATIVE_HLS = !isAndroid;
@ -108,8 +109,8 @@ export default function HlsVideoPlayer({
// controls
const [isPlaying, setIsPlaying] = useState(true);
const [muted, setMuted] = useState(true);
const [volume, setVolume] = useState(1.0);
const [muted, setMuted] = useOverlayState("playerMuted", true);
const [volume, setVolume] = useOverlayState("playerVolume", 1.0);
const [mobileCtrlTimeout, setMobileCtrlTimeout] = useState<NodeJS.Timeout>();
const [controls, setControls] = useState(isMobile);
const [controlsOpen, setControlsOpen] = useState(false);
@ -160,7 +161,7 @@ export default function HlsVideoPlayer({
fullscreen: !isIOS,
}}
setControlsOpen={setControlsOpen}
setMuted={setMuted}
setMuted={(muted) => setMuted(muted, true)}
playbackRate={videoRef.current?.playbackRate ?? 1}
hotKeys={hotKeys}
onPlayPause={(play) => {
@ -226,7 +227,9 @@ export default function HlsVideoPlayer({
controls={false}
playsInline
muted={muted}
onVolumeChange={() => setVolume(videoRef.current?.volume ?? 1.0)}
onVolumeChange={() =>
setVolume(videoRef.current?.volume ?? 1.0, true)
}
onPlay={() => {
setIsPlaying(true);
@ -249,7 +252,13 @@ export default function HlsVideoPlayer({
: undefined
}
onLoadedData={onPlayerLoaded}
onLoadedMetadata={handleLoadedMetadata}
onLoadedMetadata={() => {
handleLoadedMetadata();
if (videoRef.current) {
videoRef.current.volume = volume;
}
}}
onEnded={onClipEnded}
onError={(e) => {
if (