# pyatv：逆向工程实现的 Apple TV 与 AirPlay 协议客户端

> 基于 asyncio 的 Python 库和命令行工具，通过重新实现 DMAP/DACP、Media Remote Protocol、Companion Link、AirPlay 和 RAOP 协议，充当 Apple TV 与 AirPlay 设备的独立客户端；其协议文档称这些协议均经逆向工程得出。该文档记录了恢复出的二进制格式、Zeroconf 属性、OPACK 编码、pair-setup 与 pair-verify 交互以及 Companion 命令，其中部分请求头取自 iPhone Remote 应用的 Wireshark 抓包；附带的 atvproxy 可中继 MRP、Companion 和 AirPlay 会话并打印解密后的消息，供进一步分析。在此基础上，pyatv 提供遥控、带推送更新的元数据、应用与账户切换、音频输出管理，以及向 Apple TV、HomePod 和第三方接收器的 AirPlay 推流。

- 类型：案例
- 目标：协议
- 类别：独立重建案例
- 关联：独立重建项目
- 来源复核于：2026-10-19
- 收录于：2026-11-01
- 原始资源：<https://github.com/postlund/pyatv>
- 一手来源：<https://github.com/postlund/pyatv/blob/b277a4c8222ecdcbaab8a24e3e713ca44765adb4/docs/documentation/protocols.md>
- 目录页面：<https://awesomerea.org/zh/resources/pyatv-apple-tv-airplay-protocols-case/>
- 记录 JSON：<https://awesomerea.org/resources/pyatv-apple-tv-airplay-protocols-case/record.json>
- 英文版：[English](https://awesomerea.org/resources/pyatv-apple-tv-airplay-protocols-case/index.md)

## 使用条件与局限

- 审阅时的版本为 0.18.0，于 2026-06-19 同时发布到 GitHub 和 PyPI，主要为兼容新版 tvOS；所审阅的 master 分支提交即发布提交，而 v0.18.0 标签指向另一个并行提交，两者仅在 CHANGES.md 和 pyatv/const.py 上有差异。协议文档只涵盖已逆向得出的内容：Companion Link 一节自称大多是推测和猜想，OPACK 的描述并不完整且未经验证，MRP 的实现一节仍标为待定。致谢页称 MRP 支持建立在 Jean Regisser 的 mediaremotetv-protocol 研究成果之上。
- 仓库未附带任何 Apple 软件、固件或密钥。pyatv 连接使用者自己在局域网中的 Apple TV、HomePod、AirPort Express 或其他 AirPlay 接收器；多数协议需要用设备上显示的 PIN 配对，凭据和设置保存在 pyatv 的存储中。tvOS 15 及更高版本因 MRP 已移入 AirPlay 2 数据流，必须先设置好 AirPlay；RAOP 仅支持旧式配对。
- 需要 Python 3.9+，可从 PyPI 或项目的容器镜像安装；安装指南列出在 Debian 类系统上构建依赖所需的 build-essential、libssl-dev、libffi-dev 和 Python 头文件，RAOP 音频推流依赖 miniaudio。CI 在 Ubuntu、macOS 和 Windows 上以 Python 3.9 至 3.14 运行。
- 测试以单元测试为主，另有针对 DMAP、MRP、Companion、RAOP、mDNS 和扫描的功能测试；据测试指南，这些测试连接的模拟设备只实现有限功能，且仅求与 pyatv 兼容。atvproxy 也被描述为处于孵化阶段、依赖内部 API 的脚本。
- 采用 MIT 许可（LICENSE.md）。Apple 的协议、设备和软件保留其各自权利；pyatv 是独立实现。

## 一手来源

1. <https://github.com/postlund/pyatv/blob/b277a4c8222ecdcbaab8a24e3e713ca44765adb4/docs/documentation/protocols.md>
2. <https://github.com/postlund/pyatv/blob/b277a4c8222ecdcbaab8a24e3e713ca44765adb4/README.md>
3. <https://github.com/postlund/pyatv/blob/b277a4c8222ecdcbaab8a24e3e713ca44765adb4/docs/documentation/protocols.md#L13-L18>
4. <https://github.com/postlund/pyatv/blob/b277a4c8222ecdcbaab8a24e3e713ca44765adb4/docs/documentation/protocols.md#L363-L375>
5. <https://github.com/postlund/pyatv/blob/b277a4c8222ecdcbaab8a24e3e713ca44765adb4/docs/documentation/atvproxy.md>
6. <https://github.com/postlund/pyatv/blob/b277a4c8222ecdcbaab8a24e3e713ca44765adb4/docs/documentation/supported_features.md>
7. <https://github.com/postlund/pyatv/blob/b277a4c8222ecdcbaab8a24e3e713ca44765adb4/docs/documentation/documentation.md>
8. <https://github.com/postlund/pyatv/blob/b277a4c8222ecdcbaab8a24e3e713ca44765adb4/docs/internals/testing.md>
9. <https://github.com/postlund/pyatv/blob/b277a4c8222ecdcbaab8a24e3e713ca44765adb4/docs/support/acknowledgements.md>
10. <https://github.com/postlund/pyatv/blob/b277a4c8222ecdcbaab8a24e3e713ca44765adb4/.github/workflows/tests.yml>
11. <https://github.com/postlund/pyatv/blob/b277a4c8222ecdcbaab8a24e3e713ca44765adb4/pyproject.toml>
12. <https://github.com/postlund/pyatv/blob/b277a4c8222ecdcbaab8a24e3e713ca44765adb4/CHANGES.md>
13. <https://github.com/postlund/pyatv/blob/b277a4c8222ecdcbaab8a24e3e713ca44765adb4/LICENSE.md>
14. <https://github.com/postlund/pyatv/releases/tag/v0.18.0>
15. <https://pypi.org/project/pyatv/0.18.0/>

## 同分区更多条目：协议

- [BudsPro-Headtracking：通过 Samsung 串口协议获取 Galaxy Buds Pro 头部追踪数据](https://awesomerea.org/zh/resources/budspro-headtracking-case/index.md) · 案例
- [Even G2 协议：逆向分析 Even Realities G2 智能眼镜的 BLE 通信](https://awesomerea.org/zh/resources/even-g2-ble-protocol-case/index.md) · 案例
- [fuji-cam-wifi-tool：重建 Fujifilm X 系列相机 Wi-Fi 遥控协议](https://awesomerea.org/zh/resources/fuji-cam-wifi-tool-protocol-case/index.md) · 案例
- [Gymnasticon：将专有健身单车数据转为标准骑行传感器信号](https://awesomerea.org/zh/resources/gymnasticon-exercise-bike-bridge-case/index.md) · 案例
- [garmin-ble：Garmin 手表 GFDI 协议的 Python 客户端](https://awesomerea.org/zh/resources/garmin-ble-gfdi-protocol-case/index.md) · 案例
- [bosectl：重建 Bose BMAP 耳机协议](https://awesomerea.org/zh/resources/bosectl-bose-bmap-protocol-case/index.md) · 案例

## 关于此条目

说明已依据一手来源复核。
原创说明采用 MIT 许可；外部项目、论文与素材保留各自的权利和许可。
