diff --git a/web/src/components/player/GenericVideoPlayer.tsx b/web/src/components/player/GenericVideoPlayer.tsx index 437a1405b..d64d9a736 100644 --- a/web/src/components/player/GenericVideoPlayer.tsx +++ b/web/src/components/player/GenericVideoPlayer.tsx @@ -109,7 +109,6 @@ export function GenericVideoPlayer({ videoRef={videoRef} currentSource={{ playlist: source, - startPosition: 0, }} hotKeys visible diff --git a/web/src/components/player/HlsVideoPlayer.tsx b/web/src/components/player/HlsVideoPlayer.tsx index 4df6f16e4..d9f0977cf 100644 --- a/web/src/components/player/HlsVideoPlayer.tsx +++ b/web/src/components/player/HlsVideoPlayer.tsx @@ -30,7 +30,7 @@ const unsupportedErrorCodes = [ export interface HlsSource { playlist: string; - startPosition: number; + startPosition?: number; } type HlsVideoPlayerProps = { diff --git a/web/src/components/player/dynamic/DynamicVideoPlayer.tsx b/web/src/components/player/dynamic/DynamicVideoPlayer.tsx index 9bc9a2edf..35e51c9a0 100644 --- a/web/src/components/player/dynamic/DynamicVideoPlayer.tsx +++ b/web/src/components/player/dynamic/DynamicVideoPlayer.tsx @@ -185,16 +185,26 @@ export default function DynamicVideoPlayer({ playerRef.current.autoplay = !isScrubbing; } - const inpointOffset = calculateInpointOffset( - recordingParams.after, - (recordings || [])[0], - ); + let startPosition = undefined; + + if (startTimestamp) { + const inpointOffset = calculateInpointOffset( + recordingParams.after, + (recordings || [])[0], + ); + const idealStartPosition = Math.max( + 0, + startTimestamp - timeRange.after - inpointOffset, + ); + + if (idealStartPosition >= recordings[0].start_time - timeRange.after) { + startPosition = idealStartPosition; + } + } setSource({ playlist: `${apiHost}vod/${camera}/start/${recordingParams.after}/end/${recordingParams.before}/master.m3u8`, - startPosition: startTimestamp - ? Math.max(0, startTimestamp - timeRange.after - inpointOffset) - : 0, + startPosition, }); setLoadingTimeout(setTimeout(() => setIsLoading(true), 1000));