• v0.5.1 58fbf6a483

    serrebi released this 2026-09-05 11:21:50 -07:00 | 66 commits to master since this release

    v0.5.1 — Bug fix release

    Fixed

    • AirPlay pause now works correctly. Previously, pausing a video/IPTV stream on AirPlay killed the RAOP session entirely (heard as "Paused." then "Finished."), and pausing a direct-audio stream kept playing silently. The runner now waits on wake when paused, and pause cancels the stream task for non-ffmpeg sources.
    • Sleep timer and auto-reconnect now fire for URL and file casts. They previously only worked for screen/window captures because _cast_started was only set in _cast_capture.
    • Multi-room relay teardown no longer kills every relay when one device fails. Error paths now pass their specific relay to _stop_relay(only=) instead of calling the blanket teardown.
    • Multi-device Stop now disconnects all Chromecasts and AirPlay sessions, not just the most recent one. Added per-device tracking via _casts and _atvs dicts.
    • Endless WAV stream RIFF size no longer overflows signed 32-bit. ENDLESS_WAV_BYTES is now 44 bytes short of the signed ceiling so the RIFF field and Content-Length header both stay non-negative for receivers that parse sizes as signed int32 (Sonos).
    • Codec probing now happens once per relay instead of on every ffmpeg spawn. _make_relay probes once; supervisor restarts reuse the cached answer.
    • Unknown content types are no longer classified as audio. probe_media leaves is_audio=None when nothing identifies the type.
    • live.m3u8 query strings no longer bypass the trailing-edge playlist view.
    • Missing do_HEAD on HlsFileHandler caused playlist Content-Length mismatch with GET body.
    • Supervisor race after stop() guarded: _spawn_ffmpeg bails if self.root is None.
    • Dead branch head.startswith(b"ftyp") removed (ftyp is always at offset 4).
    • Two Cast devices sharing a name no longer collapse into one entry (appends IP to disambiguate).
    Downloads