C++17 · 协议实现

把车机变成
CarPlay 接收端。

AllPlay 端到端实现手机侧的协议栈——AirPlay RTSP、iAP2、MFi-SAP、USB lockdown/TLS 和 Android Auto AAP——本地解码 H.264 与 AAC-LC,并把触摸作为 HID 报告回传。 不含任何 Apple 二进制或 Apple 代码。

macOS 上的 AllPlay 启动器,等待手机连接
桌面主机,等待无线 CarPlay 手机接入。
4协议后端
5平台目标
13.7k与平台无关核心的代码行数
0Apple 二进制或代码

今天已跑通的

如实标注:硬件验证、协议完整、仅有接口,三者严格区分。

硬件验证

无线 CarPlay

蓝牙 iAP2 触发 → mDNS 发现 → RTSP 协商 → 加密 H.264/AAC 流 → 触摸与媒体按键。

硬件验证

有线 CarPlay

USB 配置切换 → usbmux v2 → lockdown → 原地 TLS → com.apple.carkit.service → iAP2 → 内核 NCM 媒体面。

协议完整

有线 Android Auto

AOAP 51/52/53 → AAP VERSION → TLS 1.2 → 服务发现 → 控制、视频、音频、输入通道。尚待真机验证。

有意分层

core/ 不含任何平台头文件,只有一个第三方依赖(OpenSSL)。每个平台都是它的适配层。

传输USB · RFCOMM · TCP · mDNS
会话iAP2 · MFi-SAP · lockdown · TLS
流媒体RTSP · RTP · AES-CTR · ChaCha20
媒体H.264 · AAC-LC · Opus · LPCM
主机SDL2 · Android · HarmonyOS

构建与测试

Linux 需要平台头文件;仅核心构建只需要 OpenSSL 和 C++17 编译器。

sudo apt-get install -y cmake g++ pkg-config libssl-dev \
  libavahi-client-dev libbluetooth-dev libdbus-1-dev \
  libusb-1.0-0-dev libsdl2-dev libsdl2-ttf-dev \
  libavcodec-dev libavutil-dev libswscale-dev
scripts/build.sh
./build/iap2_test && ./build/m3_test && ./build/aa_wire_test

凭据前提

两条 CarPlay 路径的最后一道门都是 Apple 签发的 MFi 身份。

identity/(EC P-256 私钥 + Apple 证书)不在本仓库中,也不受 GPL 覆盖。 请自备;自签名身份可以在开发阶段走通链路,但不是产品路径。AllPlay 不是 Apple 产品, 也未获得 MFi 授权。

设计文档

长期文档与代码放在一起,并与代码保持同步。