Skip to content

5.8.7

Choose a tag to compare

@superuser404notfound superuser404notfound released this 19 Jul 06:27

Bug-fix release: near-EOF resume hang on files with a keyframe cluster.

Fixed

  • Resuming near the end of a file with a keyframe cluster could load forever instead of playing. When a VOD's keyframe index carried a burst of IRAPs within a few frames (a hard cut / scene change near the resume point), the keyframe-aligned segment plan emitted sub-frame (~40 ms) segments: once the absolute (segIdx+1) * targetDuration cut threshold lagged the actual position, each clustered keyframe became its own boundary. The plan and the producer share one boundary list (segmentBoundaries = plan.map(startPts)), and the producer only cuts a segment index when a demuxed keyframe's PTS maps into its [start, end) window (segmentOffset), so a ~40 ms window could catch none of the actually-demuxed keyframes and that index was never produced while its neighbours were. The playlist still advertised the missing index, so AVPlayer requested it, the serve path waited out a 30 s cache miss, and it surfaced as CoreMedia -15628 loader poison; the stall watchdog then reloaded and every fresh item re-hit the identical skipped hole, spinning the item-reload loop forever ("stuck loading").

    The plan now folds any segment shorter than 1 s into a neighbour (collapseShortSegments), so every advertised segment has a window wide enough to contain a demuxed keyframe and the plan and producer agree. Kept boundaries are still real plan keyframes and total advertised duration is conserved. Live sessions are unaffected (they carry no plan). Reported and device-verified by Vincent.

Consumers on 5.8.6 should bump.