@@ -112,6 +112,7 @@ export function HLSVideoPlayer({
112112 const [ hasPlayedOnce , setHasPlayedOnce ] = useState ( false ) ;
113113 const [ isRetryingProcessing , setIsRetryingProcessing ] = useState ( false ) ;
114114 const [ sourceVersion , setSourceVersion ] = useState ( 0 ) ;
115+ const [ playerDuration , setPlayerDuration ] = useState ( fallbackDuration ?? 0 ) ;
115116 const queryClient = useQueryClient ( ) ;
116117 const playbackSrc =
117118 sourceVersion === 0
@@ -124,6 +125,10 @@ export function HLSVideoPlayer({
124125 setSourceVersion ( ( current ) => current + 1 ) ;
125126 } , [ ] ) ;
126127
128+ useEffect ( ( ) => {
129+ setPlayerDuration ( fallbackDuration ?? 0 ) ;
130+ } , [ fallbackDuration ] ) ;
131+
127132 useEffect ( ( ) => {
128133 const video = videoRef . current ;
129134 if ( ! video ) return ;
@@ -154,6 +159,12 @@ export function HLSVideoPlayer({
154159 setHasPlayedOnce ( true ) ;
155160 } ;
156161
162+ const handleLoadedMetadata = ( ) => {
163+ if ( Number . isFinite ( video . duration ) && video . duration > 0 ) {
164+ setPlayerDuration ( video . duration ) ;
165+ }
166+ } ;
167+
157168 const handleError = ( e : Event ) => {
158169 const error = ( e . target as HTMLVideoElement ) . error ;
159170 console . error ( "HLSVideoPlayer: Video error detected:" , {
@@ -165,11 +176,16 @@ export function HLSVideoPlayer({
165176 } ;
166177
167178 video . addEventListener ( "loadeddata" , handleLoadedData ) ;
179+ video . addEventListener ( "loadedmetadata" , handleLoadedMetadata ) ;
168180 video . addEventListener ( "canplay" , handleCanPlay ) ;
169181 video . addEventListener ( "load" , handleLoad ) ;
170182 video . addEventListener ( "play" , handlePlay ) ;
171183 video . addEventListener ( "error" , handleError ) ;
172184
185+ if ( Number . isFinite ( video . duration ) && video . duration > 0 ) {
186+ setPlayerDuration ( video . duration ) ;
187+ }
188+
173189 if ( video . readyState >= 2 ) {
174190 setVideoLoaded ( true ) ;
175191 if ( ! hasPlayedOnce ) {
@@ -179,6 +195,7 @@ export function HLSVideoPlayer({
179195
180196 return ( ) => {
181197 video . removeEventListener ( "loadeddata" , handleLoadedData ) ;
198+ video . removeEventListener ( "loadedmetadata" , handleLoadedMetadata ) ;
182199 video . removeEventListener ( "canplay" , handleCanPlay ) ;
183200 video . removeEventListener ( "load" , handleLoad ) ;
184201 video . removeEventListener ( "play" , handlePlay ) ;
@@ -566,7 +583,7 @@ export function HLSVideoPlayer({
566583 // enhancedAudioMuted={enhancedAudioMuted}
567584 // setEnhancedAudioMuted={setEnhancedAudioMuted}
568585 />
569- < MediaPlayerTime fallbackDuration = { fallbackDuration } />
586+ < MediaPlayerTime fallbackDuration = { playerDuration } />
570587 </ div >
571588 < div className = "flex gap-2 items-center" >
572589 { ! disableCaptions && (
0 commit comments