Skip to content

Commit 12802cd

Browse files
authored
fix: detect stream ended after live-to-VOD transition when endListFragments is stale (#7754)
1 parent c9f719f commit 12802cd

1 file changed

Lines changed: 16 additions & 3 deletions

File tree

src/controller/base-stream-controller.ts

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -297,9 +297,22 @@ export default class BaseStreamController
297297
return lastPartBuffered;
298298
}
299299

300-
const playlistType =
301-
levelDetails.fragments[levelDetails.fragments.length - 1].type;
302-
return this.fragmentTracker.isEndListAppended(playlistType);
300+
const lastFragment =
301+
levelDetails.fragments[levelDetails.fragments.length - 1];
302+
const playlistType = lastFragment.type;
303+
if (this.fragmentTracker.isEndListAppended(playlistType)) {
304+
return true;
305+
}
306+
// When a live playlist transitions to VOD (ENDLIST added), the last
307+
// fragment in the updated playlist has endList=true but the fragment
308+
// tracker entity was created before ENDLIST was known. Check if the
309+
// last fragment is actually buffered even though endListFragments
310+
// was never populated for it.
311+
if (lastFragment.endList) {
312+
const state = this.fragmentTracker.getState(lastFragment);
313+
return state === FragmentState.OK || state === FragmentState.PARTIAL;
314+
}
315+
return false;
303316
}
304317

305318
public getLevelDetails(): LevelDetails | undefined {

0 commit comments

Comments
 (0)