Features
Configurable bitmask
Features are declared in the features field of the mDNS records as a 64 bits
long bitfield and encoded as two 32 bits hex values separated by a comma. For
example, the features set 0x1111111122222222 will be declared as "0x22222222,0x11111111".
The following table is a listing of the features extracted so far. The column condition, if available, contains the necessary condition(s) to satisfy a specific feature.
| Bit | Property | Condition | Description |
|---|---|---|---|
| 0 | SupportsAirPlayVideoV1 | ||
| 1 | SupportsAirPlayPhoto | ||
| 5 | SupportsAirPlaySlideshow | ||
| 7 | SupportsAirPlayScreen | ||
| 9 | SupportsAirPlayAudio | ||
| 11 | AudioRedunant | ||
| 14 | Authentication_4 | FairPlay authentication | |
| 15 | MetadataFeatures_0 | Send artwork image to receiver | |
| 16 | MetadataFeatures_1 | Send track progress status to receiver | |
| 17 | MetadataFeatures_2 | Send NowPlaying info via DAAP | |
| 18 | AudioFormats_0 | ||
| 19 | AudioFormats_1 | ||
| 20 | AudioFormats_2 | ||
| 21 | AudioFormats_3 | ||
| 23 | Authentication_1 | RSA authentication (NA) | |
| 26 | Authentication_8 | 26 || 51 |
MFi authentication |
| 27 | SupportsLegacyPairing | ||
| 30 | HasUnifiedAdvertiserInfo | ||
| 32 | IsCarPlay | ||
| 32 | SupportsVolume | !32 |
|
| 33 | SupportsAirPlayVideoPlayQueue | ||
| 34 | SupportsAirPlayFromCloud | 34 && flags_6_SupportsAirPlayFromCloud |
|
| 35 | SupportsTLS_PSK | ||
| 38 | SupportsUnifiedMediaControl | ||
| 40 | SupportsBufferedAudio | srcvers >= 354.54.6 && 40 |
|
| 41 | SupportsPTP | srcvers >= 366 && 41 |
|
| 42 | SupportsScreenMultiCodec | ||
| 43 | SupportsSystemPairing | ||
| 44 | IsAPValeriaScreenSender | ||
| 46 | SupportsHKPairingAndAccessControl | ||
| 48 | SupportsCoreUtilsPairingAndEncryption | 38 || 46 || 43 || 48 |
|
| 49 | SupportsAirPlayVideoV2 | ||
| 50 | MetadataFeatures_3 | Send NowPlaying info via bplist | |
| 51 | SupportsUnifiedPairSetupAndMFi | ||
| 52 | SupportsSetPeersExtendedMessage | ||
| 54 | SupportsAPSync | ||
| 55 | SupportsWoL | 55 || 56 |
|
| 56 | SupportsWoL | 55 || 56 |
|
| 58 | SupportsHangdogRemoteControl | ((isAppleTV || isAppleAudioAccessory) && 58) || (isThirdPartyTV && flags_10) |
|
| 59 | SupportsAudioStreamConnectionSetup | 59 && !disableStreamConnectionSetup |
|
| 60 | SupportsAudioMediaDataControl | 59 && 60 && !disableMediaDataControl |
|
| 61 | SupportsRFC2198Redundancy |
Bits not present in the table are still unknown.
Example: features declared by Sonos one
0x445F8A00,0x1C340 => 0x1C340445F8A00
Bits: 9, 11, 15, 16, 17, 18, 19, 20, 22, 26, 30, 38, 40, 41, 46, 47, 48
Other features
Some features are not associated to any bit, but they are rather tested over other feature bits and/or flags.
| Property | Condition | Description |
|---|---|---|
| AudioFormats | supportedFormats || (18 | 19 | 20 | 21) |
|
| SupportsAirPlayVideo | 0 || 49 |
|
| SupportsExtendedWHA | srcvers >= 366 && (41 || forceAirPlay2NTP) && 40 |
|
| ThirdPartySpeaker | 26 || 51 |
|
| ThirdPartyTV | (26 || 51) && (0 || 49) |
|
| SupportsTransientPairing | 48 || 43 |
|
| SupportsKeepAlive | srcvers >= 0.74.25 |
|
| SupportsCBCSEncryption | srcvers >= 301.44.30 && len("OSversion") > 0 |
#wut |
| SupportsUnifiedPairVerifyAndMFi | 51 && srcvers >= 377 |
|
| SupportsInitialVolume | !32 && srcvers >= 120.2 |
|
| SupportsAirPlayVideoPausedStart | srcvers >= 220.68 |
|
| SupportsMuteCommand | srcvers >= 370.35 |
|
| SupportsScreenIdle | srcvers >= 150.35 |
Minimal set of features
Multi-room support
The minimal set of features an AirPlay 2 receiver must declare for multi-room support are:
SupportsAirPlayAudio(bit 9)AudioRedundant(bit 11)HasUnifiedAdvertiserInfo(bit 30)SupportsBufferedAudio(bit 40)SupportsPTP(bit 41)SupportsUnifiedPairSetupAndMFi(bit 51)
The respective features bitmask is 0x8030040000a00 and will be declared as
features=0x40000a00,0x80300.
Metadata support
The receiver can support metadata information by controlling bits 15, 16, 17 and 50:
- bit 15 - receive the artwork of the track currently played;
- bit 16 - receive the progress status;
- bit 17 - receive a set of #nowplaying info via DAAP1
- bit 50 - receive #nowplaying info encoded in a binary plist - overrides bit 17.
Internal configurable fields (WIP)
- disableStreamConnectionSetup
- forceAirPlay2NTP
- supportedFormats
- canRecordScreenStream
- keepAliveSendStatsAsBody
- extendedFeatures
- playbackCapabilities
- voiceModelSupportedLanguages
-
Digital Audio Access Protocol - https://en.wikipedia.org/wiki/Digital_Audio_Access_Protocol ↩︎