You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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 branchhead.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).