only call onPlaying when loadeddata is fired or after timeout

This commit is contained in:
Josh Hawkins 2024-07-04 17:07:31 -05:00
parent b29757544c
commit bdad02bff9

View File

@ -46,6 +46,7 @@ function MSEPlayer({
const visibilityCheck: boolean = !pip;
const [isPlaying, setIsPlaying] = useState(false);
const playTimeoutRef = useRef<NodeJS.Timeout | null>(null);
const [wsState, setWsState] = useState<number>(WebSocket.CLOSED);
const [connectTS, setConnectTS] = useState<number>(0);
@ -371,24 +372,21 @@ function MSEPlayer({
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [playbackEnabled]);
return (
<video
ref={videoRef}
className={className}
playsInline
preload="auto"
onLoadedData={() => {
const handleLoadedData = useCallback(() => {
handleLoadedMetadata?.();
if (playTimeoutRef.current) {
clearTimeout(playTimeoutRef.current);
playTimeoutRef.current = null;
}
onPlaying?.();
setIsPlaying(true);
}}
muted={!audioEnabled}
onPause={() => videoRef.current?.play()}
onProgress={() => {
if (!isPlaying) {
setIsPlaying(true);
handleLoadedMetadata?.();
onPlaying?.();
}, [handleLoadedMetadata, onPlaying]);
const handleProgress = useCallback(() => {
if (!isPlaying && !playTimeoutRef.current && playbackEnabled) {
playTimeoutRef.current = setTimeout(() => {
handleLoadedData();
}, 5000);
}
if (onError != undefined) {
if (videoRef.current?.paused) {
@ -413,7 +411,26 @@ function MSEPlayer({
}, 3000),
);
}
}}
}, [
isPlaying,
onError,
videoRef,
bufferTimeout,
onDisconnect,
handleLoadedData,
playbackEnabled,
]);
return (
<video
ref={videoRef}
className={className}
playsInline
preload="auto"
onLoadedData={handleLoadedData}
muted={!audioEnabled}
onPause={() => videoRef.current?.play()}
onProgress={handleProgress}
onError={(e) => {
if (
// @ts-expect-error code does exist