Status: incomplete
The content of this document will slowly flow in as I get time and inspiration to reverse AirPlay 2.
Unofficial documentation
This is by no mean an official AirPlay 2 protocol specification. The content of this site can be inaccurate, incomplete, with or without mistakes.
AirPlay 2 - Internals and protocol
The information contained in this document are a work in progress parallel to the reverse engineering of AirPlay 2. AirPlay 2 is a family of protocols to stream media contents including audio, videos, photos or screens. However, my main focus is on the audio part.
Apple announced AirPlay 2 in 2017 and extented it to support multi-room audio with iOS 11.4 in May 2018. While tools like shairport or shairport-sync mimic an AirPort Express since 2011, providing a good open-source software alternative to closed hardware, both AirPlay 2 protocol and the multi-room streaming capability are still lacking an open tool.
What works
- Pairing without authentication and encryption
- Base AirPlay 2 and multi-room
- HomeKit pairing
Credits
- James Laird and many other contributors, who reversed AirTunes and AirPlay;
- shairport, which is running on my Raspberry Pi since 2013;
- Issue #535 on shairport-sync repo, which I'm monitoring since the AirPlay 2 release and pushed me to understand it;
- @iostat, @griff and many others also working on AirPlay 2, giving me the inspiration to collaborate and proceed further;
- @iostat for his parallel work on a Rust implementation of an AirPlay 2 receiver (rareport).
Resources
- Unofficial AirPlay Protocol Specification - https://openairplay.github.io/airplay-spec/