mirror of
https://github.com/zoriya/v10.git
synced 2026-08-16 02:45:09 +00:00
endOfStream's deriveState treated "the last currently-known segment is appended" as "the stream ended", with no completeness check. For VoD that's correct, but for live the last segment is only the rolling edge — so once it was appended the behavior called mediaSource.endOfStream() and set duration to the buffered (live-edge) end, the next reload's appends flipped the MediaSource back to 'open', and it re-fired on a loop. The visible symptom was mediaSource.duration flipping from Infinity to a finite, growing value (and a stream that could stall once the window slid past it). Add a completeness guard: a track only reaches 'eos-ready' when its playlist is complete (#EXT-X-ENDLIST) and its last segment is appended. Ongoing live (no endList) stays inert, so duration remains Infinity; a live stream that genuinely ends appends #EXT-X-ENDLIST, which opens the guard and ends it gracefully. Keys off completeness, consistent with resolveSelectedTrackDuration and seekToLiveEdge. Verified live playback through createSimpleHlsEngine: duration now holds at Infinity. Full spf suite green (1073 passed); two new tests cover the live-no-fire and graceful-endList-fire cases. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>