ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

quicktime_video_hack如何建立屏幕流会话:15步USB握手协议逐步图解

quicktime_video_hack如何建立屏幕流会话:15步USB握手协议逐步图解 quicktime_video_hack如何建立屏幕流会话15步USB握手协议逐步图解【免费下载链接】quicktime_video_hackRecord iOS device audio and video项目地址: https://gitcode.com/gh_mirrors/qu/quicktime_video_hack想在没有 Mac 电脑的情况下直接录制 iPhone 或 iPad 的屏幕吗quicktime_video_hack是一个用 Go 编写的跨平台工具它通过 USB 与 iOS 设备完成一套15 步握手协议建立 QuickTime 屏幕流会话把 H.264 视频和 WAV 音频流原样拉到 Linux 或 macOS 上。本文逐图解开这套 USB 握手的每一步让你真正看懂屏幕镜像会话是如何建立的。准备工作配对设备与发现 USB 设备建立会话的前提是设备已被信任配对。运行qvh devices可以列出主机上所有带 usbmux 端点的 iOS 设备。工具会在 USB 描述符中寻找 SubClass 为0xFE的 usbmux 配置见 discovery.go并记录设备序列号——不同 iPhone 的 VID/PID 可能完全相同只能靠序列号区分。qvh devices -v 如果提示device not found请先在手机上点击信任此电脑。第 1~2 步解锁隐藏的 QuickTime USB 配置这是整个协议最hack的一步。iOS 设备默认只有 usbmux 配置当 Mac 上的 QuickTime 开始录屏时设备会断开并重新连接多出一套隐藏的 QuickTime 配置SubClass0x2A里面带有 4 个 Bulk 端点专门用来收发音视频数据。quicktime_video_hack 通过发送一条特定的 USB 控制请求0x40, 0x52, 0x00, 0x02主动触发这个行为然后轮询等待设备带着新配置重新上线见 activator.go步骤动作说明1启用隐藏配置发送控制请求设备断线重连多出 QT 配置2占用端点激活 QT 配置声明收/发 Bulk 端点清空 Feature 状态见 usbadapter.go第 3~4 步PING 心跳握手端点就绪后设备会主动发来第一个包PING。它的结构非常简洁4 字节长度 (16)4 字节 Magic (PING)4 字节 0x04 字节 0x110000000676E69700000000001000000工具收到 PING 后立即回发一个 PING握手才算真正开始见 messageprocessor.go。步骤方向包3设备 → 主机等待 PING4主机 → 设备回复 PING第 5~9 步音频时钟协商CWPA 与 AFMT屏幕流会话的核心是时钟同步。第 5 步设备发来 SYNCCWPA包附上设备侧的音频时钟引用ClockRef主机在第 6 步创建本地时钟并把自己的 ClockRef 写进 RPLY 回复。紧接着两个 ASYN 包把音频通道点亮步骤方向包作用7主机 → 设备ASYNHPD1上报主机设备信息准备视频流8主机 → 设备ASYNHPA1携带第 6 步收到的设备音频 ClockRef开启音频流9设备 → 主机SYNCAFMT告知音频格式48kHz LPCM 未压缩主机回复{Error: 0}表示一切正常注意AFMT包里引用的正是你在CWPA回复中交给它的那个时钟——设备用它标注后续每一个音频缓冲。第 10~12 步视频通道建立CVRP 与 NEED第 10 步设备发来 SYNCCVRP包这是信息量最大的一包约 649 字节内含 H.264 的SPS/PPS 参数集已编码为 NALU可直接用于流媒体和时序信息以及设备的视频 ClockRef。步骤方向包作用11主机 → 设备RPLY回复本地视频 ClockRef之后所有 FEED 帧都引用它12主机 → 设备ASYNNEED携带设备视频 ClockRef告诉设备请持续发视频NEED包整个会话内容恒定只需初始化一次后反复发送即可见 asyn.go。每收到一个 FEED 帧就回发一个 NEED相当于流控反馈。第 13~15 步属性设置与时钟对齐收尾步骤方向包作用13设备 → 主机2 × ASYNSPRP设置视频流属性ObeyEmptyMediaMarkerstrue、RenderEmptyMediafalse14设备 → 主机SYNCCLOK要求主机新建一个时钟并回复其 ClockRef15设备 → 主机2 × SYNCTIME主机两次回复当前CMTime纳秒精度Scale10^9完成双向时间对齐15 步走完握手阶段结束 设备开始推送FEED视频帧和EAT!音频帧两类 CMSampleBuffer 数据包。会话结束后优雅关闭流停止时CtrlC工具会按相反方向走一遍先发HPA0停音频、HPD0停视频收到SYNC STOP后回 8 字节零再接收两条 ASYNRELS时钟释放通知最后释放 USB 端点、把设备切回纯 usbmux 配置见 messageprocessor.go。一分钟速查15 步完整清单#包/动作方向关键词1启用隐藏 QT 配置USB 控制0x40/0x522占用 Bulk 端点主机StartReading3PING设备等待4PING主机回应5SYNC CWPA设备音频 ClockRef6CWPA RPLY主机本地时钟7ASYN HPD1主机视频准备8ASYN HPA1主机开启音频9SYNC AFMT设备48kHz LPCM10SYNC CVRP设备SPS/PPS 视频时钟11CVRP RPLY主机本地视频时钟12ASYN NEED主机催发视频132× SPRP设备流属性14SYNC CLOK设备新建时钟152× TIME设备CMTime 对齐想深入源码从这里开始协议全文含每种包的十六进制格式表doc/technical_documentation.md隐藏配置激活逻辑screencapture/activator.goUSB 端点读写与分帧screencapture/usbadapter.go全部 SYNC/ASYN 包处理screencapture/messageprocessor.go二进制报文样例写单测必备screencapture/packet/fixtures/会话入口startWithConsumermain.go掌握这 15 步握手后你甚至可以照着 packet/fixtures/ 里的报文转储用任意语言重新实现一套自己的 iOS 屏幕流会话协议栈。【免费下载链接】quicktime_video_hackRecord iOS device audio and video项目地址: https://gitcode.com/gh_mirrors/qu/quicktime_video_hack创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表