Fix no preview case

This commit is contained in:
Nick Mowen 2024-01-26 07:24:18 -07:00
parent be6bc2af94
commit f261bce514

View File

@ -32,42 +32,12 @@ export default function DynamicVideoPlayer({
[config] [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 // controlling playback
const playerRef = useRef<Player | undefined>(undefined); const playerRef = useRef<Player | undefined>(undefined);
const previewRef = useRef<Player | undefined>(undefined); const previewRef = useRef<Player | undefined>(undefined);
const [isScrubbing, setIsScrubbing] = useState(false); const [isScrubbing, setIsScrubbing] = useState(false);
const [hasPreview, setHasPreview] = useState(false);
const [focusedItem, setFocusedItem] = useState<Timeline | undefined>( const [focusedItem, setFocusedItem] = useState<Timeline | undefined>(
undefined undefined
); );
@ -85,6 +55,21 @@ export default function DynamicVideoPlayer({
); );
}, [config]); }, [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 // state of playback player
const recordingParams = useMemo(() => { const recordingParams = useMemo(() => {
@ -111,19 +96,20 @@ export default function DynamicVideoPlayer({
"," ","
)}/master.m3u8`; )}/master.m3u8`;
const preview = cameraPreviews.find(
(preview) =>
Math.round(preview.start) >= timeRange.start &&
Math.floor(preview.end) <= timeRange.end
);
setHasPreview(preview != undefined);
controller.newPlayback({ controller.newPlayback({
recordings, recordings,
playbackUri, playbackUri,
preview: cameraPreviews.find( preview,
(preview) =>
Math.round(preview.start) >= timeRange.start &&
Math.floor(preview.end) <= timeRange.end
),
}); });
}, [controller, recordings]); }, [controller, recordings]);
const hasPreview = true;
if (!controller) { if (!controller) {
return <ActivityIndicator />; return <ActivityIndicator />;
} }
@ -154,6 +140,10 @@ export default function DynamicVideoPlayer({
player.on("timeupdate", () => { player.on("timeupdate", () => {
controller.updateProgress(player.currentTime() || 0); controller.updateProgress(player.currentTime() || 0);
}); });
if (onControllerReady) {
onControllerReady(controller);
}
}} }}
onDispose={() => { onDispose={() => {
playerRef.current = undefined; playerRef.current = undefined;
@ -167,7 +157,9 @@ export default function DynamicVideoPlayer({
)} )}
</VideoPlayer> </VideoPlayer>
</div> </div>
<div className={`w-full ${isScrubbing ? "visible" : "hidden"}`}> <div
className={`w-full ${hasPreview && isScrubbing ? "visible" : "hidden"}`}
>
<VideoPlayer <VideoPlayer
options={{ options={{
preload: "auto", preload: "auto",
@ -175,16 +167,11 @@ export default function DynamicVideoPlayer({
controls: false, controls: false,
muted: true, muted: true,
loadingSpinner: false, loadingSpinner: false,
sources: [initialPreviewSource],
}} }}
seekOptions={{}} seekOptions={{}}
onReady={(player) => { onReady={(player) => {
previewRef.current = player; previewRef.current = player;
player.on("seeked", () => controller.finishedSeeking()); player.on("seeked", () => controller.finishedSeeking());
if (onControllerReady) {
onControllerReady(controller);
}
}} }}
onDispose={() => { onDispose={() => {
previewRef.current = undefined; previewRef.current = undefined;