@@ -19,13 +19,13 @@ export function readElementPlaybackStart(el: Element): number {
1919 return readMediaStart ( el ) ;
2020}
2121
22- const HOLD_END_EVENTS = [ "seeked" , "loadeddata" , "suspend" , " error", "emptied" , "abort" ] as const ;
22+ const HOLD_END_EVENTS = [ "seeked" , "loadeddata" , "error" , "emptied" , "abort" ] as const ;
2323const HOLD_CAP_MS = 5000 ;
2424const releaseHeldVideo = new WeakMap < HTMLMediaElement , ( ) => void > ( ) ;
2525
2626// A seeking video still paints its previous frame, and one still fetching its first data paints none (its seek
27- // waits for metadata without setting `seeking`); frame captures wait on the seek barrier until it lands. Each seek
28- // re-arms a 5 s cap, and listeners run in the capture phase so a failing <source> child releases the hold .
27+ // waits for metadata without setting `seeking`); frame captures wait on the barrier until it lands. The 5 s cap is
28+ // the only end for a stalled source (`suspend` also fires between range requests); capture phase catches <source>.
2929function holdSeekBarrierUntilVideoLands ( el : HTMLMediaElement ) : void {
3030 const loading =
3131 el . readyState < el . HAVE_CURRENT_DATA &&
@@ -36,7 +36,7 @@ function holdSeekBarrierUntilVideoLands(el: HTMLMediaElement): void {
3636 registerSeekCompletion (
3737 new Promise < void > ( ( resolve ) => {
3838 const done = ( event ?: Event ) => {
39- if ( ( event ?. type === "loadeddata" || event ?. type === "suspend" ) && el . seeking ) return ;
39+ if ( event ?. type === "loadeddata" && el . seeking ) return ;
4040 clearTimeout ( cap ) ;
4141 for ( const type of HOLD_END_EVENTS ) el . removeEventListener ( type , done , true ) ;
4242 if ( releaseHeldVideo . get ( el ) === done ) releaseHeldVideo . delete ( el ) ;
0 commit comments