mirror of
https://github.com/blakeblackshear/frigate.git
synced 2026-02-07 19:55:26 +03:00
Fix no preview case
This commit is contained in:
parent
be6bc2af94
commit
f261bce514
@ -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;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user