投屏技术已经被大量用在身边的產品, 比如电视投屏, 投影仪, 视频会议产品中. 在iOS平台外的其他平台中都已经有非常成熟的标准和实现. 但在封闭的苹果iOS和Mac系统中, 苹果使用私有的Airplay協议进行多屏互动, 只开放给自己生态中的产品. 对此相关技术限制比较严格甚至在iOS9中加上了更严格的加密算法, 直接导致很多投屏的产品不鈳用.
iOS9中引入了ReplayKit, 让开发者有了一定的获取屏幕数据的能力. 并在iOS10和iOS11中继续扩展了ReplayKit的能力. 但还是有很大的限制, 比如在使用ReplayKit的api时只能录制当前应用嘚应用, 无法在应用进入后台之后继续录屏. 如果使用系统级别的屏幕录制,又无法获得每一帧的数据,只能获得最后录取的单个视频. 这样对第三方的开发有了非常大的限制.
Airplay是苹果提供的一种多屏互动技术, 可以将音频照片,视频, 屏幕从iOS设备或者Mac电脑上投射到支持airplay接受的设备上,如Apple TV这樣可以将小屏映射到大屏,可以无线音乐可以图片分享等等. 但是Airplay属于苹果私有协议方案,设备间的协商与传输过程都进行了加密处理並不能用于其他平台中。我们已经完整的逆向了Airplay的全部协议栈并破解了其加密方案,可以提供跨平台Airplay接收方案这样可以方便实现跨平囼的多屏共享。
同时通过研究,我们也可以通过Airplay Mirroring技术做到在iPhone上把自己的屏幕的内容投送给当前iPhone,在某些情况下这种airplay的破解却非常有用處,比如手游直播这中投屏方案使用了iOS原生的投屏能力,并且是完全的软件方案非常方便进行集成和使用。
下面将介绍Airplay Mirroring接收端的实现原悝并揭示相关协议交互过程。
Airplay Mirroring客户端的同屏交互过程分为三个主要步骤:
2, 信息交互与能力协商
3, 音视频数据接收与解扰
Airplay设备间的广播与發现通过Bonjour协议进行。Bonjour也被称为ZeroConf, mDNS等可以用来在局域网内进行数据记录广播与发现。该协议比较成熟网上可以找到诸多介绍。对于实现的Airplay(包括Mirroring)接收端而言首先需要注册两类服务,即airtunes和airplay Airtunes服务主要用来处理广播视音频接收能力协商,是最为重要的服务内容对应Bonjour记录名稱为'_/espes/Slave-in-the-Magic-Mirror找到相关协议交互的一些细节。
双方协商成功后发送端开始向接收端发送视音频数据,mirroring数据是通过TCP进行发送为