Skip to content

0.15.0

Choose a tag to compare

@timusus timusus released this 15 Oct 18:40
· 73 commits to main since this release

Render

  • Underruns and resumes are now judged against the renderer clock, not the heard playhead (#183). On a high-latency route such as AirPlay (about 2 s), audio written after an upstream stall used to land behind the running clock and be dropped silently, with status still .playing. Now the output pauses and reports .buffering. Likely cause of timusus/Shuttle2#1064.
  • Through an underrun the reported position holds at the last heard frame, instead of jumping ahead by the route latency.
  • After an underrun, or after the renderer itself runs dry, playback resumes only once the full feed depth (2 s at 1x) is written, as media3's bufferForPlaybackAfterRebufferMs does. This gives one longer pause instead of repeated short stalls. The first start, a seek, a route change and play after a pause still start at the 0.5 s resume depth.
  • A next item that resolves just after the end of a stream is no longer written behind the clock, whether playing or paused.
  • Pausing in the last seconds of a stream on a high-latency route and pressing play now finishes the item instead of staying in .buffering.

Tooling

  • The release caches the FFmpeg source per tag and retries its fetch, alternating git.ffmpeg.org and the GitHub mirror (#186). The source tarball now also contains scripts/lib/fetch-ffmpeg.sh, which build-ffmpeg.sh sources.

No public API change. Decoded PCM is unchanged; what moved is buffering timing (.buffering now appears on AirPlay stalls, and resumes after a stall are later).