ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

用 airplay2-win 在 Windows 上实现 AirPlay 2 接收器:从零跑通到二次开发

用 airplay2-win 在 Windows 上实现 AirPlay 2 接收器:从零跑通到二次开发 用 airplay2-win 在 Windows 上实现 AirPlay 2 接收器从零跑通到二次开发【免费下载链接】airplay2-winAirplay2 for windows项目地址: https://gitcode.com/gh_mirrors/ai/airplay2-winairplay2-win 是一个完整的 AirPlay 2 接收器实现让 Windows 电脑像 Apple TV 一样接收 iPhone、iPad 的屏幕镜像和音频流。适合有 C/C 基础、想让自己的应用接入无线投屏能力的开发者读完本文你能在 10 分钟内编译出可投屏的 demo并知道接下来该往哪些文件里改代码。它帮你省掉了什么自己写协议层不用了。RTSP 握手、RSA/AES 密钥交换、RTP 音频流重组这些活现在只有一行 fgServerStart 调用。自己写设备发现不用了。mDNS让局域网设备互相发现的协议注册广播由 dnssd 组件自动完成iOS 侧直接能看到你的电脑。自己搭渲染验证链路不用了。airplay-dll-demo 已经把 SDL 渲染写好运行后按 s 就能收到画面。自己把接收器塞进产品不用了。链接 airplay2dll.lib实现回调接口你的应用就是一个 AirPlay 接收端。10分钟跑通 airplay2-win 全流程前置条件Windows 10/11Win7 以上理论可用x64Visual Studio 2019 或更高版本桌面 C 工作负载一台 iOS 设备与 Windows 电脑连在同一个 Wi-Fi 网段无需额外安装依赖FFmpeg、SDL 等第三方库已放在仓库 external 目录里安装与启动克隆仓库git clone https://gitcode.com/gh_mirrors/ai/airplay2-win用 Visual Studio 2019 打开 airplay2-win.sln右键 airplay-dll-demo 设为启动项目按 CtrlShiftB 编译。运行生成目录下的 airplay-dll-demo.exe控制台提示 [s] to start server 后按 s 启动接收服务。在 iPhone 上打开控制中心点屏幕镜像列表里出现的设备就是你的电脑。验证是否成功看到 Windows 窗口里出现 iPhone 实时画面、并且声音从 Windows 音箱出来就说明跑通了投屏中按 和 - 还能缩放画面。如果卡在搜不到或连不上直接跳到下文[踩坑排查与调优]板块。架构速览核心思路是三段式协议库负责收流解密DLL 层负责多会话管理回调把音视频帧推给你的渲染代码。airplay2/libAirPlay 协议核心负责 RTSP 会话、加密握手、AAC 音频解码和 H.264 帧分发是从 shairplay/AirplayServer 移植来的主体。dnssdmDNS 服务发现负责广播 _raop 和 _airplay 服务让 iOS 设备能发现这台电脑。airplay2dllC 封装层把协议库的多设备会话收敛成 fgServerStart 等几个导出接口是二开的对外边界。airplay-dll-demoSDL 渲染示例负责把回调拿到的视频帧解码上屏、音频帧送出去。airplay2-win直接链接核心库的独立主程序可以看作不用 DLL 版本的参考实现。跨平台这块核心库保留了 Linux 时代的面貌平台差异通过 compat.h/compat.c 这类兼容层隔离Windows 移植主要动了线程和套接字部分。真实使用场景会议室里镜像 iPhone 演示产品经理在会议室打开 PowerPoint 的 iPhone 版屏幕镜像列表里选中连了投影仪的 Windows 主机手机画面直接上大屏省掉了找转接器和折腾 HDMI 的环节。把手游画面接到直播软件主播用手机打游戏通过投屏把画面送到跑着 OBS 的 Windows 机器在 OBS 里用窗口采集捕获渲染窗口就能把手游录进直播流。教室里当互动白板老师把 iPad 当输入设备书写内容通过 airplay2-win 实时投到教室的电脑大屏学生端再转发自己的作业画面整个互动链路不用一根线。学习 AirPlay 协议的活教材协议逆向出身的人很难找到带完整加密握手过程的接收端源码。把 iOS 设备的连接过程对着 airplay.c 逐步断点调试是理解 AirPlay 协议最快的路径之一。验证自研硬件的投屏兼容性做智能音箱或车机显示器的团队可以用它当对照端设备能被发现、能出图说明 RAOP 侧实现基本到位再逐条对加密和重传行为。踩坑排查与调优iOS 能搜到设备但点不进去连接最常见原因是两台设备不在同一网段或虚拟机用了共享网络。确认连的是同一个 Wi-Fi 且子网一致虚拟机环境把网卡改成桥接模式再试。连接成功但没有画面或声音多半是 FFmpeg 的 dll 没拷到可执行文件旁边导致解码失败。检查运行目录里 avcodec-58.dll、avutil-56.dll 等文件是否齐全看控制台日志里的错误输出定位。画面卡顿或延迟明显先怀疑网络而不是代码切到 5GHz Wi-Fi、拉根网线对比。网络没问题的话用 fgServerScale 调小渲染尺寸或在 iOS 侧降低镜像分辨率帧负载会明显下降。Visual Studio 编译报错一般是 SDK 版本和项目预设不一致或第三方库路径没生效。先清理解决方案再完整重编还报错的话对照 airplay2dll.vcxproj 检查附加包含目录里是否指向 external 下的头文件位置。5001/7001 端口被占用demo 默认用 5001 和 7001 两个端口同一台机器跑多实例或端口被占时启动会失败。改 fgServerStart 调用里的 raopPort 和 airplayPort 参数即可两个端口随便换一对未占用的。二次开发入口扩展点集中在 airplay2dll 的导出 API 和 IAirServerCallback 回调接口上你的应用只需实现出帧和连接事件两类逻辑。最小集成示例参考 demo 的封装MyCallback cb; // 继承 IAirServerCallback实现 outputVideo/outputAudio void* server fgServerStart(MyAirPlay, 5001, 7001, cb); // 你的主循环/消息循环运行期间回调会持续收到音视频帧 fgServerStop(server);常见的定制方向换渲染管线硬件解码、多显示器改 demo 的播放器回调拿到的 H.264 帧直接送你的解码器即可。处理多设备并发和会话隔离看 FgAirplayChannel每个远端设备对应一条 channel。加自定义认证或改加密行为改 配对模块配合 lib 下的 crypto 目录。社区与后续有问题就在仓库提 Issue附上系统环境、复现步骤和控制台日志提交 PR 时说明改动影响的协议环节方便维护者快速审。入门读代码建议先翻 主程序入口读完能理解 dnssd、airplay、raop 三个组件的初始化和注册顺序再进 协议核心 对着 iOS 连接过程看握手协议层就通了。目前比较明显的短板是没有图形界面视频缩放也只能整体调比例多房间音频这类 AirPlay 2 特性还没支持。如果你下一步是把它集成进自己的产品建议先看 fgServerStart 的回调签名把 outputVideo 的出帧链路摸熟其他都是在这个基础上加东西。【免费下载链接】airplay2-winAirplay2 for windows项目地址: https://gitcode.com/gh_mirrors/ai/airplay2-win创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进