CastFabric v0.11.0-alpha.5
Pre-releaseCastFabric v0.11.0-alpha.5
This alpha hardens multi-device and multi-protocol ownership at the physical-output boundary.
- Serialize physical playback commands per output while keeping different speakers independent.
- Fence DLNA, AirPlay, MiPlay and MCP callbacks by the current session owner so stale stop, resume,
seek or volume callbacks cannot disrupt a newer session. - Delay MiPlay session creation until a valid
Open, preventing idle TCP probes from appearing as
active casting sessions or blocking a real sender; incomplete handshakes now expire after 15 seconds. - Give each MiPlay receiver a stable, target-specific discovery identity and advertise the observed
commonDatafield. - Isolate AirPlay stateful clients with connection tokens and reject a competing stateful client with
RTSP 453 instead of sharing decoder state. - Keep playlist-run preemption and media-session preemption atomic, and improve partial-start,
shutdown and Zeroconf cleanup.
Upgrade and verification notes
The audio data plane is unchanged: this release does not alter FFmpeg arguments, PCM format, WAV
headers, HTTP stream mode, queue sizing, physical renderer play type or the existing five-second DMR
pull-confirmation boundary. On one output, concurrent control commands are intentionally ordered; a
takeover can therefore wait for an in-flight renderer confirmation. Different outputs do not share a
playback lock.
Automated verification covers same-output serialization, cross-output concurrency, stale callback
fencing, idle MiPlay probes, AirPlay client ownership, DLNA ownership, playlist/session consistency,
the full Python suite, direct audio seek and the offline MiPlay WFD/RTP/MPEG-TS/PCM path. Xiaomi-phone
discovery and audible real-device behavior remain separate deployment gates and must not be inferred
from self-discovery or simulation.
Use the existing persistent /app/conf mount and retain the previous container or immutable image for
rollback. Restarting CastFabric interrupts active routes but does not automatically start playback.