Skip to content

7.32.0 - Progressive segment delivery, storageExhausted for a full segment volume

Choose a tag to compare

@superuser404notfound superuser404notfound released this 08 Oct 09:22
· 1252 commits to main since this release

Added

  • LoadOptions.progressiveSegmentDelivery serves VOD loopback segments while they are written (#721). Off by default. The muxer flushes a fragment about every 0.5 s instead of holding up to 8 s, the segment cache tracks the segment being written, and the loopback server sends each fragment as it lands over a chunked response, so AVPlayer shows and starts on a segment's first fragments instead of waiting for its cut. A segment the producer abandons ends its connection without the final chunk, and each chunk sent counts as fetch activity for the #65 wedge watchdog. A reader that seeks backward to a low segment index, and a seal that races a reader's stat of the staging file, both deliver the finished segment. aetherctl play --progressive-segments drives it. Measured on a Mac over a 6 Mbit/s origin with 1080p HEVC at 2.7 Mbit/s: first frame 0.9 s instead of 2.2 s, playing 1.7 s instead of 2.3 s, one rebuffer instead of three to four in the first 30 s, and seeks outside the buffer landing in 0.56 s / 1.27 s instead of 1.20 s / 2.25 s. Contributed by yipengfei329.
  • PlaybackErrorKind.storageExhausted (#720). A new error kind for a full segment volume, see Fixed. underlyingCode is -28 (AVERROR(ENOSPC)). A host should free its own caches or ask the user to, not demote to another player.

Fixed

  • A full segment volume is reported as one, not as a source that cannot be muxed (#720). When the temporary directory's volume ran out of space, the session directory, the segments or the muxer's staging files could not be written, every muxer revive failed the same way, and the give-up arm surfaced vodSourceFailed ("Source audio cannot be muxed"), or audioBridgeProducedNoOutput on a bridged track. Both send a host's fallback ladder the wrong way for a file that plays once space is freed. The segment cache now latches an out-of-space write from any of the three, including a store whose session directory had to be restored first, and the give-up arm surfaces .storageExhausted ahead of the audio verdicts. The latch is per session, so a later session after space was freed is not affected. Measured on a device with 197 MB free: a 4K60 title failed to start with the muxer message. Contributed by yipengfei329.

Full changelog: 7.31.2...7.32.0