iOS Airplay Screen Mirroring 同屏技术详解

投屏技术已经被大量用在身边的产品,比如电视投屏,投影仪,视频会议产品中。 在ios平台外的其他平台中都已经有非常成熟的标准和实现。但在封闭的苹果ios和mac系统中,苹果使用私有的airplay协议进行多屏互动,只开放给自己生态中的产品。对此相关技术限制比较严格,甚至在ios9中加上了更严格的加密算法,直接导致很多投屏的产品不可用。
ios中的投屏方案
1.replaykit
ios9中引入了replaykit, 让开发者有了一定的获取屏幕数据的能力. 并在ios10和ios11中继续扩展了replaykit的能力. 但还是有很大的限制, 比如在使用replaykit的api时只能录制当前应用的应用, 无法在应用进入后台之后继续录屏. 如果使用系统级别的屏幕录制,又无法获得每一帧的数据,只能获得最后录取的单个视频. 这样对第三方的开发有了非常大的限制.
2.airplay
airplay是苹果提供的一种多屏互动技术, 可以将音频照片,视频, 屏幕从ios设备或者mac电脑上投射到支持airplay接受的设备上,如apple tv。这样可以将小屏映射到大屏,可以无线音乐,可以图片分享等等. 但是airplay属于苹果私有协议方案,设备间的协商与传输过程都进行了加密处理,并不能用于其他平台中。我们已经完整的逆向了airplay的全部协议栈,并破解了其加密方案,可以提供跨平台airplay接收方案。这样可以方便实现跨平台的多屏共享。
同时,通过研究,我们也可以通过airplay mirroring技术,做到在iphone上把自己的屏幕的内容投送给当前iphone,在某些情况下这种airplay的破解却非常有用处,比如手游直播。这中投屏方案使用了ios原生的投屏能力,并且是完全的软件方案,非常方便进行集成和使用。
airplay mirroring实现原理
下面将介绍airplay mirroring接收端的实现原理,并揭示相关协议交互过程。
airplay mirroring客户端的同屏交互过程,分为三个主要步骤:
设备广播与发现
信息交互与能力协商
音视频数据接收与解扰
设备广播与发现
airplay设备间的广播与发现通过bonjour协议进行。bonjour也被称为zeroconf, mdns等,可以用来在局域网内进行数据记录广播与发现。该协议比较成熟,网上可以找到诸多介绍。对于实现的airplay(包括mirroring)接收端而言,首先需要注册两类服务,即airtunes和airplay。 airtunes服务主要用来处理广播视音频接收能力协商,是最为重要的服务内容,对应bonjour记录名称为'_raop._tcp',注册服务端口不限,一般为了避免冲突,建议采用较高的端口数;airplay服务主要用来兼容传统的streaming等服务,对应记录名称为'_airplay._tcp',注册端口一般为7000。
具体的服务广播内容,可以进行局域网抓包,找到对应记录内容。
当接收端通过bonjour广播器服务能力后,发送端(如iphone等各类ios设备)就可以发现该接收端。
信息交互与能力协商
当发送端发现接收端后,可以开始信息交互与能力协商过程。该部分协议协议格式类似rtsp协议格式。主要分为两个阶段,设备匹配与和能力协商。
当发送端链接服务端后,设备匹配过程即开始。通信双方会进行fairplay加密协议进行信息交换,当完成信息交换后,客户端后续必须使用这部分信息来处理加密过的密钥,才能获得进一步视音频解密密钥。在ios9之后,在fairplay过程之前,增加一个设备匹配过程,即pair-setup、pair-verify过程,其主要算法是较为标准的非对称公钥交换算法。
当两端成功匹配后,开始进行能力协商与信息交换,这些信息包括,设备名称、代号,音视频接收相关端口配置,视频接收能力以及加密密钥等,相关信息使用binary plist格式进行封装。
可以参考https://github.com/espes/slave-in-the-magic-mirror找到相关协议交互的一些细节。
音视频数据接收与解密
双方协商成功后,发送端开始向接收端发送视音频数据,mirroring数据是通过tcp进行发送,为h.264 es流格式。音频是通过rtp协议进行发送,根据内容的不同音频编码为alac或者aac-eld。
音视频流都是通过aes进行了加密处理,密钥需要通过上面一步的进过信息交互后的fairplay模组对setup过程中接收到的加密密钥进行解密,获得的aes解密需要的iv和key,然后经过aes解扰,即可以获得最终的视音频清流。
其他需要注意的地方
airplay没过session传送过来的视频h264码流,只有开头一个关键帧. 因此这种情况并不适合直播这种需要固定gop的场景. 还需要做进一步的转码的工作,或者直接在压缩域进行处理,获得合理的gop结构。
我们对airplay相关协议的逆向工程已经封装成了跨平台的类库和框架, 支持windows/mac/android/ios/linux, 在自己内部产品中使用已经非常稳定, 如果有需要可以联系我们. 也欢迎各类技术与应用场景讨论。我的邮箱leeoxiang#http://gmail.com

移动设备崛起时代,看汽车制造厂如何锁定商机
数字音频有哪三类 数字音频的主要技术指标
USB发展简史,USB传输标准与接口之间的关系
戴尔推4K超高清激光投影仪:轻松达到100英寸超大投影面积
ST的成像部门抓住发展新机遇 能否“死灰复燃”?
iOS Airplay Screen Mirroring 同屏技术详解
三星Galaxy S10系列的Galaxy S10与Galaxy S10+引发了消费者哄抢
小米Max2什么时候上市?小米Max2再爆光:松果S2,1499元起!
为什么红外甲烷气体传感器 - S509系列比一般传感器寿命长?
Intel 12代酷睿处理器详细参数
小米6什么时候上市?小米6最新消息:小米6价格,小米6配置大爆,小米6:双摄+虹膜识别,还是熟悉的味道还
荣耀9什么时候上市?荣耀9对比小米6或许并无优势!单是颜值却非常值得期待!
【Milk-V Duo开发板免费体验】评测一、Linux环境验证
小米6劲敌?华为荣耀9上手体验评测
柔宇在IFA展会公开折叠屏手机Flexible
华为云发展的数字化路径三个阶段分析
AI在医疗领域智能帮我们诊断吗
指静脉识别技术在金融支付中的应用
测试电容器的四种方法
EMC测试的历史与未来