投屏技术已经被大量用在身边的产品,比如电视投屏,投影仪,视频会议产品中。
在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客户端的同屏交互过程,分为三个主要步骤:

  1. 设备广播与发现
  2. 信息交互与能力协商
  3. 音视频数据接收与解扰

设备广播与发现

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

相关链接

AirCast:http://link.zhihu.com/?target=https%3A//github.com/AirCastLab

Airplay Protocol:http://link.zhihu.com/?target=https%3A//nto.github.io/AirPlay.html

AirCast website:https://aircast.cc/

【AirPlay】iOS Airplay Screen Mirroring 同屏技术详解相关推荐

  1. iOS Airplay Screen Mirroring 同屏技术详解

    投屏技术已经被大量用在身边的产品,比如电视投屏,投影仪,视频会议产品中. 在iOS平台外的其他平台中都已经有非常成熟的标准和实现.但在封闭的苹果iOS和Mac系统中,苹果使用私有的Airplay协议进 ...

  2. iOS Airplay Screen Mirroring 投屏技术详解

    投屏技术已经被大量用在身边的产品, 比如电视投屏, 投影仪, 视频会议产品中. 在iOS平台外的其他平台中都已经有非常成熟的标准和实现. 但在封闭的苹果iOS和Mac系统中, 苹果使用私有的Airpl ...

  3. iOS 7 iPhone iPad应用开发技术详解

    2019独角兽企业重金招聘Python工程师标准>>> iOS 7 iPhone iPad应用开发技术详解 本书内容全面,从 Objective-C语法知识.iOS功能特 性,到高级 ...

  4. iOS 7: iPhone/iPad应用开发技术详解

    iOS 7: iPhone/iPad应用开发技术详解 作者:刘一道 出版社:机械工业出版社 出版年:2013-11 页数:507 定价:79.00元 ISBN:9787111440512 样章下载:h ...

  5. 手游录屏直播技术详解 | 直播 SDK 性能优化实践

    直播无疑是 2016 年的大热话题,七牛云在 6 月底发布了实时流网络 LiveNet 和直播云解决方案后,我们用<直播技术详解>系列文章系统地介绍了直播各个环节的关键技术,帮助视频直播创 ...

  6. 《视频直播技术详解》系列:(4)采集

    原文来自七牛云,感谢原作者. <视频直播技术详解>系列:(0)汇总 采集是整个视频推流过程中的第一个环节,它从系统的采集设备中获取原始视频数据,将其输出到下一个环节.视频的采集涉及两方面数 ...

  7. 《视频直播技术详解》系列:(6)编码和封装

    原文来自七牛云,感谢原作者. <视频直播技术详解>系列:(0)汇总 视频编码是本系列一个重要的部分,如果把整个流媒体比喻成一个物流系统,那么编解码就是其中配货和装货的过程,这个过程非常重要 ...

  8. 《视频直播技术详解》之二:编码和封装、推流和传输

    视频编码是本系列一个重要的部分,如果把整个流媒体比喻成一个物流系统,那么编解码就是其中配货和装货的过程,这个过程非常重要,它的速度和压缩比对物流系统的意义非常大,影响物流系统的整体速度和成本.同样,对 ...

  9. 区块链服务网络(BSN)技术详解

    主讲人:何亦凡 各位领导.各位来宾,下午好! 首先,我想感谢国家信息中心让我们有幸参与了一个这么有意义的国家项目.在过去的一年多里,我们六家发起单位的技术团队一起奋斗,经过艰辛的研究和开发,终于让区块 ...

最新文章

  1. Xcode 上使用Reveal调试界面
  2. spring 可以有多个ioc容器吗
  3. vectorobserver obs是做什么_带着色碳纤维主体的OBS雪佛兰皮卡
  4. Windows下配置Tomcat使用https协议
  5. JUC多线程:创建线程的四种方式
  6. 高等数学上-赵立军-北京大学出版社-题解-练习5.1
  7. Python 使用pdfplumber 提取PDF页面表格的内容
  8. 【滚动数组】【状压dp】Gym - 100956F - Colored Path
  9. soultion of mySQL disk exceeded problem
  10. lightshot截图工具的安装及使用
  11. 图像工作回顾之三:极线匹配
  12. 【POJ No. 3294】星际迷航 Life Forms
  13. 马斯克的“圣战”:阻止人工智能毁灭人类
  14. 网络历史之金融投资三剑客01
  15. aardio 模拟键盘按键,实现msgbox对话框自动关闭
  16. 在Unity中创建基于Node节点的编辑器 (二) 窗口序列化
  17. IE低版本提示下载新的浏览器js--IEOutTips.zip
  18. 访客模式 无痕模式 区别_访客设计模式示例
  19. a后缀名是什么格式文件,怎么打开.a文件
  20. 电商平台搭建流程是怎样的_不懂编程怎么搭建_OctShop

热门文章

  1. IMS(intellegent maintenance system)
  2. PBD加密专家(pb混淆加密大师)(pb obfuscator) 最新说明书
  3. 凌华服务器维护手册,凌华科技cPCIS-3300BLS/HMP服务器在智能网络的解决方案
  4. 中国合成生物初创公司盘点
  5. 【全栈之巅】Node.js + Vue.js 全栈开发王者荣耀手机端官网和管理后台学习笔记(4.1-4.10)
  6. 9大领域187项全球工程前沿发布!有你的研究方向吗?
  7. could not load an entity问题
  8. pandas .set_index(“TIMESTAMP“, inplace=True) 用法
  9. 计算机培训专业中心架,武汉模具数控技术专修
  10. UML--06例题(神舟飞船的组成)