前段时间发布了一个 python 获取 iOS 性能数据的文章,也算开了个小口子能在获取 iOS 测试数据上更加方便了些,如果对 iOS 性能相关兴趣可以移步:
屏幕共享和远控平台现在发展也比较火热,但是 iOS 设备在画面同步和视频录制上,一直都没有一个比较不错的方案,也简单调研了下之前可以获取到 iOS 屏幕数据的方法:
- iOS-minicap stf 团队实现的帧率非常不错,缺点无法多台设备
- Airplay mirror 苹果多媒体多屏互动技术,效果都很好,有一点点缺陷就是同一个 wifi 下每次需要手机主动触发屏幕镜像才可以同步画面
- XCTest 和 XCUITest 二次改造的 wda 可以支持多台设备,但是帧率延时还是偏低
- 基于 WebRtc iOS屏幕共享,这个需要 SDK 嵌入 APP 支持,而且需要端上主动触发,操作起来不是很方便。
该项目是 python 实现可以通过 USB 连接 iOS 设备进行屏幕共享,支持:
- 非侵入性(无需任何安装和代码嵌入)
- 支持 iOS 多设备并行
项目地址: 先点个小星星吧
usb 连接你的 iOS 手机,解锁并信任喲(手机锁屏不行)
# 直接转发 h264 到 udp 广播,因为 mac 限制 udp 大小,要切割包,所以延时会变高,暂时仅作为测试使用 # gstreamer 媒体流工具渲染显示画面,推荐方式每个 usb 连接设备时都会有一些配置信息,我们数据交互时,会使用某个配置与 usb 设备进行交互,这里用个 iOS 设备举例:
事实上在 iOS USB 级别上还有个隐藏配置信息,用来传输屏幕音视频相关数据,pyhton 开启方式 device.ctrl_transfer(0x40, 0x52, 0, 2, b'')
发送了这个指令之后,再次获取配置信息时,就会发现 bNumConfigurations 的数量变成了6个,多出来这个配置信息就是我们要使用的,使用这个 USB
配置,并连接相应端口后,就能传输音视频画面了
- 创建本地时间戳记录,将该时间戳放入SYNC CWPA并发送
- 接收同步AFMT并返回没有错误信号(表示准备就绪)
- 使用本地视频 时间戳 回复
- 使用步骤 10 的时间戳 发送 NEED 消息
- 接收 CLOK 消息,创建新的时间戳记录并回复消息
- 接收 TIME 消息,使用 14 步创建的时间回复消息
前面交互完成后就能正式接收音视频消息了
如果想具体了解相关传输报文协议可以查看下方链接,本项目是参考这个大佬文章,最终使用 python 来实现的
想了解更多前沿测试开发技术,结识行业大牛:欢迎关注「第十届MTSC大会·上海」
1个主会场+12大专场,大咖云集精英齐聚
知乎、物流、开源、游戏、酷家乐、音视频、客户端
服务端、数字经济、效能提升、质量保障、智能化测试