Modules
A pure-Elixir AirPlay (RAOP) audio sender — discover receivers on the LAN and
stream lossless audio to them, with no native dependencies (just :crypto,
:gen_udp and :gen_tcp).
Pack PCM into uncompressed ALAC frames for AirPlay/RAOP.
Play a PCM buffer to an AirPlay/RAOP receiver, end to end — a small session
GenServer exposing play/3, stop/1, set_volume/2.
Stream-decode an audio file to AirPlay frames with bounded memory.
Discover AirPlay/RAOP receivers on the LAN via mDNS (multicast DNS,
224.0.0.251:5353) — the Bonjour service browse Apple devices use. Queries the
_raop._tcp.local service and resolves each instance's SRV (host/port) + A
(address) from the responses.
NTP 64-bit timestamps for the AirPlay/RAOP timing channel.
Streams ALAC-over-RTP audio to an AirPlay/RAOP receiver after the RTSP handshake. Owns three UDP sockets
RAOP packet builders: audio (PT 0x60), control sync (0xd4), and timing
response (0xd3). All multi-byte fields are big-endian.
Minimal RTSP/1.0 client for the AirPlay/RAOP control plane.
Drives the AirPlay/RAOP control handshake against a receiver.
Decode a library track to the PCM format AirPlay/RAOP wants: 44.1 kHz, 16-bit,
stereo, little-endian, via ffmpeg. Returns the raw interleaved s16le bytes,
which AirPlay.Alac chops into 352-sample frames.
AirPlay 2 cryptographic helpers.
Minimal AirPlay 2 multi-room group player.
AirPlay 2 transient pairing.
Minimal AirPlay 2 file player.
Minimal binary plist writer for AirPlay 2 SETUP bodies.
AirPlay 2 gPTP packet and clock helpers.
AirPlay 2 gPTP BMCA-yield worker.
RTSP client for AirPlay 2.
AirPlay 2 encrypted RTSP control/event channel framing.
AirPlay 2 SETUP request helpers.
AirPlay 2 SRP-6a client proof generation.
AirPlay 2 TLV8 encoder/decoder.