mirror of
https://github.com/shaka-project/shaka-player.git
synced 2026-06-19 16:47:01 +03:00
04eab23047
## Summary - In MSF live streams, audio and video segments arrive at different wall-clock times over WebTransport (audio frames are ~8KB vs ~125KB video keyframes, so audio arrives first). - The first stream type to deliver a segment calls `lockStartTime()` and `setSegmentAvailabilityDuration(0.5)`, creating a tight availability window. When the other type's segments arrive even slightly later, `mergeAndEvict` immediately evicts them because they fall before `getSegmentAvailabilityStart()`. - This causes video to never render — StreamingEngine repeatedly logs `(video:N) cannot find segment` because every video segment is evicted on arrival. ### Fix 1. Added `firstSegmentStartTimes_` map to track the first segment start time per content type. 2. Before the timeline is locked, pass `0` as the eviction start to `mergeAndEvict` to prevent premature segment eviction. 3. Only call `lockStartTime()` once ALL expected stream types (audio AND video) have received at least one segment. 4. Set `segmentAvailabilityDuration` wide enough to cover the gap between the earliest and latest stream start times (`gap + duration`), so the stream whose segments arrived first isn't continuously evicted. Co-authored-by: Erik Herz <erik@vivoh.com>