diff --git a/web/src/components/player/HlsVideoPlayer.tsx b/web/src/components/player/HlsVideoPlayer.tsx index 2bbf4d801..4c496fcb5 100644 --- a/web/src/components/player/HlsVideoPlayer.tsx +++ b/web/src/components/player/HlsVideoPlayer.tsx @@ -19,7 +19,6 @@ const unsupportedErrorCodes = [ ]; type HlsVideoPlayerProps = { - className: string; children?: ReactNode; videoRef: MutableRefObject; visible: boolean; @@ -31,7 +30,6 @@ type HlsVideoPlayerProps = { onPlaying?: () => void; }; export default function HlsVideoPlayer({ - className, children, videoRef, visible, @@ -91,116 +89,118 @@ export default function HlsVideoPlayer({ return ( -
{ - setControls(true); - } - : undefined - } - onMouseOut={ - isDesktop - ? () => { - setControls(controlsOpen); - } - : undefined - } - onClick={isDesktop ? undefined : () => setControls(!controls)} + - - - { - if (!videoRef.current) { - return; - } - - if (play) { - videoRef.current.play(); - } else { - videoRef.current.pause(); + if (isMobile) { + setControls(true); + setMobileCtrlTimeout(setTimeout(() => setControls(false), 4000)); } }} - onSeek={(diff) => { - const currentTime = videoRef.current?.currentTime; + onPlaying={onPlaying} + onPause={() => { + setIsPlaying(false); - if (!videoRef.current || !currentTime) { - return; + if (isMobile && mobileCtrlTimeout) { + clearTimeout(mobileCtrlTimeout); } - - videoRef.current.currentTime = Math.max(0, currentTime + diff); }} - onSetPlaybackRate={(rate) => - videoRef.current ? (videoRef.current.playbackRate = rate) : null + onTimeUpdate={() => + onTimeUpdate && videoRef.current + ? onTimeUpdate(videoRef.current.currentTime) + : undefined } + onLoadedData={onPlayerLoaded} + onLoadedMetadata={() => setLoadedMetadata(true)} + onEnded={onClipEnded} + onError={(e) => { + if ( + !hlsRef.current && + // @ts-expect-error code does exist + unsupportedErrorCodes.includes(e.target.error.code) && + videoRef.current + ) { + setLoadedMetadata(false); + setUseHlsCompat(true); + } + }} /> - {children} -
+
{ + setControls(true); + } + : undefined + } + onMouseOut={ + isDesktop + ? () => { + setControls(controlsOpen); + } + : undefined + } + onClick={isDesktop ? undefined : () => setControls(!controls)} + > +
+ { + if (!videoRef.current) { + return; + } + + if (play) { + videoRef.current.play(); + } else { + videoRef.current.pause(); + } + }} + onSeek={(diff) => { + const currentTime = videoRef.current?.currentTime; + + if (!videoRef.current || !currentTime) { + return; + } + + videoRef.current.currentTime = Math.max(0, currentTime + diff); + }} + onSetPlaybackRate={(rate) => + videoRef.current ? (videoRef.current.playbackRate = rate) : null + } + /> + {children} +
+
+
); } diff --git a/web/src/components/player/dynamic/DynamicVideoPlayer.tsx b/web/src/components/player/dynamic/DynamicVideoPlayer.tsx index f0c72032c..f9d208fd0 100644 --- a/web/src/components/player/dynamic/DynamicVideoPlayer.tsx +++ b/web/src/components/player/dynamic/DynamicVideoPlayer.tsx @@ -150,7 +150,6 @@ export default function DynamicVideoPlayer({ return ( <>