案例

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 推流。

使用条件与局限

  • 审阅时的版本为 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 兼容。它们不能证明与 Apple 实现的一致性;atvproxy 也被描述为处于孵化阶段、依赖内部 API 的脚本。本次审阅未运行测试,也未连接设备。
  • 采用 MIT 许可(LICENSE.md)。Apple 的协议、设备和软件保留其各自权利;pyatv 是独立实现,并非恢复出的 Apple 源码。所审阅的来源未表明使用了 REA 或 AI。

关于此条目

类型
案例
类别
独立重建案例
关联
独立重建项目
目标
协议

来源复核于

说明已依据一手来源复核;这不代表已运行验证、经过安全审计或确认兼容。

报告条目过时 建议修正翻译

一手来源

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

同分区更多条目:协议

协议分区全部 31 项资源协议案例(11)