iOS Airplay Screen Mirroring 同屏技术详解

news/2024/7/20 5:39:21 标签: ios, iphone

投屏技术已经被大量用在身边的产品,比如电视投屏,投影仪,视频会议产品中。
在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/


http://www.niftyadmin.cn/n/110123.html

相关文章

mysql 的主从复制

介绍 mysql 的主从复制是一个异步的过程, 底层是基于mysql 数据库的自带的二进制日志的功能, 就是一台可多台 mysql 数据库(slave 即从库)从另一台mysql 数据库(master 即主库)进行日志的复制,…

干货| Vue小程序开发技术原理

目前应用最广的三大前端框架分别是Vue、 React 和 Angular 。其中,不管是 BAT 大厂,还是创业公司,Vue 都有广泛的应用。如今,再随着移动开发小程序的蓬勃发展,Vue也广泛应用到了小程序开发当中。今天,就来详…

CCNP350-401学习笔记(易错题合集)

CCNP350-401学习笔记(1-50题)_殊彦_sy的博客-CSDN博客CCNP350-401学习笔记(2023.2.17)https://blog.csdn.net/shuyan1115/article/details/129088574?spm1001.2014.3001.5502CCNP350-401学习笔记(51-100题&#xff09…

PCB板漏孔、漏槽怎么办?看工程师避坑“SOP”

本文为大家介绍PCB画板时常见的钻孔问题,避免后续踩同样的坑。钻孔分为三类,通孔、盲孔、埋孔。不管是哪种孔,孔缺失的问题带来的后果是直接导致整批产品不能使用。因此钻孔设计的正确性尤为重要。 案例讲解 问题1:Altium设计的文…

taobao.opensecurity.isv.uid.get( 获取open security uid for isv )

¥免费不需用户授权 根据 open_uid 获取 open_uid_isv 用于同一个 isv的多个app间数据关联 公共参数 请求地址: HTTP地址 http://gw.api.taobao.com/router/rest 公共请求参数: 点击获取key和secret 请求示例 TaobaoClient client new DefaultTaobaoClient(url, a…

无损音乐格式:FLAC和ALAC

前言:我最近在弄苹果的airplay项目,发现airplay2对比airplay多了音质方面的增强。AAC和MP3接触过,但对FLAC和ALAC完全不了解,整理学习资料汇总成如下信息: AirPlay2 在2017年推出,在前一代AirPlay的基础上…

分享5款Windows同类软件中的翘楚

今天要给大家推荐的是5款软件,每个都是同类软件中的个中翘楚,请大家给我高调地使用起来,不用替我藏着掖着。1.沙盒工具——Sandboxie Sandboxie是一个电脑必备的沙盘工具,对于从网上下载的软件安装包、文件、视频、图片等等一切不…

FPGA案例开发手册——基于全志T3+Logos FPGA核心板

前 言 本文档主要提供评估板FPGA端案例测试方法,适用的开发环境为Windows 7 64bit和Windows 10 64bit。 本文案例基于创龙科技的全志T3+Logos FPGA核心板,它是一款基于全志科技T3四核ARM Cortex-A7处理器 + 紫光同创Logos PGL25G/PGL50G FPGA设计的异构多核全国产工业核心板…