当前位置: 首页 > news >正文

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 字节 0x1
10000000676E69700000000001000000

工具收到 PING 后立即回发一个 PING,握手才算真正开始(见 messageprocessor.go)。

步骤方向
3设备 → 主机等待 PING
4主机 → 设备回复 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设置视频流属性:ObeyEmptyMediaMarkers=trueRenderEmptyMedia=false
14设备 → 主机SYNCCLOK要求主机新建一个时钟并回复其 ClockRef
15设备 → 主机2 × SYNCTIME主机两次回复当前CMTime(纳秒精度,Scale=10^9),完成双向时间对齐

15 步走完,握手阶段结束 🎉 设备开始推送FEED(视频帧)和EAT!(音频帧)两类 CMSampleBuffer 数据包。

会话结束后:优雅关闭流

停止时(Ctrl+C),工具会按相反方向走一遍:先发HPA0停音频、HPD0停视频,收到SYNC STOP后回 8 字节零,再接收两条 ASYNRELS(时钟释放通知),最后释放 USB 端点、把设备切回纯 usbmux 配置(见 messageprocessor.go)。

一分钟速查:15 步完整清单

#包/动作方向关键词
1启用隐藏 QT 配置USB 控制0x40/0x52
2占用 Bulk 端点主机StartReading
3PING设备等待
4PING主机回应
5SYNC CWPA设备音频 ClockRef
6CWPA RPLY主机本地时钟
7ASYN HPD1主机视频准备
8ASYN HPA1主机开启音频
9SYNC AFMT设备48kHz LPCM
10SYNC CVRP设备SPS/PPS + 视频时钟
11CVRP RPLY主机本地视频时钟
12ASYN NEED主机催发视频
132× SPRP设备流属性
14SYNC CLOK设备新建时钟
152× TIME设备CMTime 对齐

想深入源码?从这里开始

  • 协议全文(含每种包的十六进制格式表):doc/technical_documentation.md
  • 隐藏配置激活逻辑:screencapture/activator.go
  • USB 端点读写与分帧:screencapture/usbadapter.go
  • 全部 SYNC/ASYN 包处理:screencapture/messageprocessor.go
  • 二进制报文样例(写单测必备):screencapture/packet/fixtures/
  • 会话入口startWithConsumer:main.go

掌握这 15 步握手后,你甚至可以照着 packet/fixtures/ 里的报文转储,用任意语言重新实现一套自己的 iOS 屏幕流会话协议栈。

【免费下载链接】quicktime_video_hackRecord iOS device audio and video项目地址: https://gitcode.com/gh_mirrors/qu/quicktime_video_hack

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

http://www.cnnetsun.cn/news/4248152.html

相关文章:

  • 基于相似性推理的博弈论方法:多智能体协作中的理性合作策略
  • 【AI大模型实战】手把手教你基于Dify搭建RAG知识库,全程干货,零基础小白也能轻松学会!!
  • 【AI大模型教程】一文讲清支持 MCP 的七大 AI 框架有哪些!零基础小白收藏这一篇就够了!!
  • 从内存数据库走向云原生数据底座,深入理解 SAP HANA Cloud
  • SAR成像全链路解析:从点目标仿真到实测数据处理
  • bravado响应处理完全手册:HttpFuture、超时降级fallback_result与错误捕获最佳实践
  • MPDroid进阶功能:输出设备管理、网络电台与Sticker评分完整攻略
  • extended_text_field 渲染层揭秘:ExtendedRenderEditable 光标定位与桌面端拼音输入修复
  • LRU缓存淘汰机制全揭秘:SDURLCache如何守护你的磁盘容量上限
  • 悟空Agent实战:LLaMA-Factory高危0day漏洞挖掘与修复
  • 大模型推理为什么又长又啰嗦?更多thinking≠更好结果,精准thinking可砍掉一半长度
  • 收藏!小白也能学会!LangChain.js智能体开发指南:10大编排模式详解与实战应用
  • Jeff Dean押注AI4S:从分布式系统到科学发现的基础设施革命
  • IntelliJ IDEA快捷键
  • 【AI大模型】腾讯屠榜MTEB,嵌入模型告别BERT,拥抱LLM
  • 智能体Agent:怎样用自然语言重构数据开发?看完这一篇你就懂了!!
  • 水下鱼类实例分割实战:从COCO数据集到YOLOv8训练全流程
  • 【大模型必备】位置编码终极指南:收藏学习RoPE如何改变Transformer架构
  • 7B扩散LLM,居然能跟671B的DeepSeek V3掰手腕,扩散vs自回归,谁才是未来?
  • C指针进阶:Beej‘s Guide to C指针运算与数组本质完整指南
  • WinDiskWriter:macOS上3步做出Windows启动盘
  • UUIDv1秒变v6的位运算魔法:uuid-creator TimeOrderedCodec源码剖析
  • 极简语言编年史:milliForth、sectorForth 与 sectorLISP 深度对比
  • 大模型应用开发全流程:从初始构思到实验、效果评估和产品化!
  • C语言内存管理
  • 多传感器模块设计指南:从选型到固件的可穿戴实践
  • 什么是Transformer?什么是视觉Transformer?与CNN的比较谁更胜一筹?
  • 【AI大模型】一文讲透 AI Agent 与 AI Workflow 的区别和深度解析:从自动化到智能化的演进
  • 2026北京GEO优化服务商推荐:企业出海如何同步布局AI搜索品牌资产
  • AI Agent工具调用安全加固:Pyshackle预执行门控实战