AirPlay 2 Internals

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