diff --git a/js/app/components/player/video-retry.tsx b/js/app/components/player/video-retry.tsx index cb9d9ff7a..47107dac1 100644 --- a/js/app/components/player/video-retry.tsx +++ b/js/app/components/player/video-retry.tsx @@ -1,42 +1,41 @@ import { - PlayerStatus, usePlayerStore, + useSegment, useStreamplaceStore, } from "@streamplace/components"; -import React, { useEffect, useState } from "react"; +import React, { useEffect } from "react"; + +import { useRef } from "react"; export default function VideoRetry(props: { children: React.ReactNode }) { - const [resetTime, setResetTime] = useState(Date.now()); - const [retryCount, setRetryCount] = useState(0); + const lastSegmentRef = useRef(null); + const retryTimeoutRef = useRef(null); + const segment = useSegment(); const status = usePlayerStore((x) => x.status); - const playerEvent = usePlayerStore((x) => x.playerEvent); - + const offline = usePlayerStore((x) => x.offline); const spurl = useStreamplaceStore((x) => x.url); - const isPlaying = status === PlayerStatus.PLAYING; + console.log("Status", status, offline); useEffect(() => { - if (isPlaying) { - setRetryCount(0); - return; + if ( + lastSegmentRef.current !== null && + segment && + segment.startTime !== lastSegmentRef.current && + offline + ) { + const jitter = 500 + Math.random() * 1500; + retryTimeoutRef.current = setTimeout(() => { + console.log("Detected new segment and stalled state, retrying video"); + lastSegmentRef.current = segment?.startTime; + }, jitter); } + }, [offline, segment, spurl]); - const baseDelay = 3000; // 3 seconds - const maxDelay = 30000; // 30 seconds - const delay = Math.min(baseDelay * Math.pow(2, retryCount), maxDelay); - - const handle = setTimeout(() => { - // console.log(`retrying (attempt ${retryCount + 1}, delay: ${delay}ms)`); - setResetTime(Date.now()); - setRetryCount((prev) => prev + 1); - playerEvent(spurl, new Date().toISOString(), "retry", { - delay, - }); - }, delay); - - return () => clearTimeout(handle); - }, [isPlaying, resetTime, retryCount, playerEvent]); - - return {props.children}; + return ( + + {props.children} + + ); } -- knotmirror 0.0.1 From 6f45b9e14efe2e9dcfeb6f37f714d79b628643d8 Mon Sep 17 00:00:00 2001 From: "Natalie B." <22222885+espeon@users.noreply.github.com> Date: Tue, 17 Jun 2025 17:26:10 -0500 Subject: [PATCH 2/2] remove logging --- js/app/components/player/video-retry.tsx | 4 ---- 1 file changed, 4 deletions(-) diff --git a/js/app/components/player/video-retry.tsx b/js/app/components/player/video-retry.tsx index 47107dac1..c687284c1 100644 --- a/js/app/components/player/video-retry.tsx +++ b/js/app/components/player/video-retry.tsx @@ -12,12 +12,9 @@ export default function VideoRetry(props: { children: React.ReactNode }) { const retryTimeoutRef = useRef(null); const segment = useSegment(); - const status = usePlayerStore((x) => x.status); const offline = usePlayerStore((x) => x.offline); const spurl = useStreamplaceStore((x) => x.url); - console.log("Status", status, offline); - useEffect(() => { if ( lastSegmentRef.current !== null && @@ -27,7 +24,6 @@ export default function VideoRetry(props: { children: React.ReactNode }) { ) { const jitter = 500 + Math.random() * 1500; retryTimeoutRef.current = setTimeout(() => { - console.log("Detected new segment and stalled state, retrying video"); lastSegmentRef.current = segment?.startTime; }, jitter); }