screen appmirroring出现故障无法连接小米手机的投屏 昨天还在用的 有什么解决的办法吗

投屏技术已经被大量用在身边的產品, 比如电视投屏, 投影仪, 视频会议产品中. 在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进行发送为h.264 ES流格式。音频是通过RTP协议进行发送根据内容的不同音频编码为ALAC或者AAC-ELD。

音视频流都是通过AES进行了加密处理密钥需要通过上面一步的進过信息交互后的fairplay模组对setup过程中接收到的加密密钥进行解密,获得的AES解密需要的IV和KEY然后经过AES解扰,即可以获得最终的视音频清流

Airplay没过Session傳送过来的视频h264码流,只有开头一个关键帧. 因此这种情况并不适合直播这种需要固定GOP的场景. 还需要做进一步的转码的工作或者直接在压縮域进行处理,获得合理的GOP结构

想要了解更多请加qq:

我要回帖

更多关于 screen app 的文章

 

随机推荐