有线图像投影介绍
手机到电脑的屏幕投影可以分为无线和有线两种方式。通过WiFi无线投屏基本可以做到高清,但是受限于网速,延迟会高,不适合游戏。有线投屏可以通过usb数据线实现设备之间的稳定连接,可以高速传输数据,延迟低,画面清晰,适用于游戏、直播等场景。
iOS有线镜像投影原理
MAC系统自带的QuickTime播放器,插上灯光数据线就可以镜像并录制iOS屏幕,如图:
基于此,可以研究有线屏幕投影的协议。根据数据包捕获和分析,可以初步实现该协议,可以分为三个步骤:
1.启动投影屏幕。
使能隐藏设备配置语句端点等待接收PING包,用PING包响应,等待同步CWPA包接收设备音频时钟的时钟,创建本地时钟,以时钟ref作为回复同步CWPA,用步骤6中接收的设备音频时钟发送和发送ASYN_HPD1发送ASYN_HPA1和接收同步AFMT,并回复零误码,用设备视频时钟Ref接收同步CVRP,用本地视频时钟Ref回复, 使用设备视频时钟Ref开始发送ASYN,需要接收两个ASYN set属性,接收SYNChronous Clok,回复新创建的时钟,接收两个sync times,回复两个CMTimes。
2.接收数据
设备将发送视频和音频数据包。我们需要定期发送所需的视频数据包。
3.关闭投影屏幕
从cwpa同步包中发送带有设备时钟ref的asyn hpa0,告诉设备停止发送音频发送hpd0和空时钟Ref以停止视频接收同步停止包,当我们创建视频时钟时,cvrp将其发送给我们,这是在每个feed包回复停止接收本地视频时钟Ref的ASYN RELS后创建的本地时钟的ASYN RELS release usb端点,用8个零字节接收同步时钟。设备活动配置被设置为仅usbmux。
点击访问quicktime_video_hack了解具体镜像协议详情,包括go语言的一个协议实现,可以运行在Ubuntu和MacOS平台上。
安卓有线镜面屏幕投影原理
实现Android系统有线投屏有两种方式,使用ADB和USBAccessory。缺点是无论哪种方式,目前都无法投射系统声音。
使用ADB图像投影
这种方法有一个优秀的代表——scrcpy,它是genymobile的一个开源项目,利用ADB工具实现屏幕投影:
打开手机usb调试,屏幕可以投影,可以达到60fps的图像帧率。35-70ms的低延迟可以用来在电脑中反向控制手机。
使用USB存储图像的屏幕投影
这种方法的技术实现与亚行完全不同。它主要基于Android usbAccessory。两个设备之间建立USB传输通道,手机运行app录屏,传输数据到电脑。
前景
屏幕投影技术大大提高了设备的互联性。华为和苹果都在这方面发力,未来肯定会有一个长远的发展。我们的团队已经深耕屏幕投影领域,不仅实现了miracast和airplay无线屏幕投影,目前还完美实现了iOS和android有线屏幕投影。本文技术信息分享仅供感兴趣的人深入研究,实现低延迟、高可用、秒级设备发现屏幕投影技术,提升大家的数字生活体验。