iOS中的屏幕共享(ReplayKit2)- 介绍

屏幕录制及共享就是将屏幕上的内容分享给网络上其他用户的技术。在iOS中实现屏幕录制及共享主要用到的是ReplayKit这个框架。

logo

ReplayKit最早是在iOS9(WWDC15)中发布的用于屏幕录制的技术框架。最早是用于苹果的游戏(Game Center)中的直播。后来随着网络环境越来越好,直播也在扩大领域。ReplayKit的功能也越来越强大,直到iOS11(WWDC17)时推出了ReplayKit2,真正的实现了屏幕共享的大部分需求。后边会详细说一下每个iOS版本中ReplayKit的更新。

当前环境下,屏幕共享主要有以下几个使用场景:

  • 手游直播
  • 在线客服或在线协助工具,如TeamViewer
  • 在线视频会议,如TeamLink,Zoom,钉钉

各个iOS版本中屏幕分享的特点

懒得看的同学可以直接放大看这个表格。

logo

还有官方统计的iOS版本分布(截止2020年1月27日之前)

logo

iOS 8及之前

iOS8时,还没有ReplayKit,Apple也没有提供相关的API,有些开发者通过破解AirPlay的方法,使用私有API实现屏幕共享。

但是使用私有API的弊端还是多多的,比如不知道新版本中会不会修改API,也有可能在AppStore审核的时候就被卡住等等。

iOS 9

iOS9中,苹果在Going Social with ReplayKit and Game Center中正式介绍了ReplayKit,不过从标题也能看的出这个时候的ReplayKit主要是用作游戏中的屏幕共享。

并且这时候也不算是实时的屏幕共享,而是通过将App中操作屏幕的过程录制下来,录制之后可以查看、编辑和分享。

还有一点就是这个时候的ReplayKit也不支持录制手机中其他App的屏幕。

所以总结下来,就是这个时候的ReplayKit只算的上是有屏幕录制,而没有屏幕共享。

logo

iOS 10

iOS10中,新增了用户屏幕共享的Extension

  • Broadcast Setup UI Extension
  • Broadcast Upload Extension
logo

通过Upload Extension,可以实时的获取屏幕内容,并且开发者可以选择上传到服务器或其他操作。实现了真正意义上的实时屏幕共享,也就是直播。

通过Setup UI Extension,也提供了一个在开始屏幕共享之前的准备页面,在这里可以让用户选择登陆账户,通过特定的账户分发屏幕共享内容。

虽然实现了真正意义上的实时屏幕共享,但是iOS10中的ReplayKit依然没有摆脱只能在当前App中使用的限制。所以使用上还是有一些局限性。

logo

iOS 11

在iOS11中,ReplayKit升级到了ReplayKit2,最大的升级点就是支持了分享当前App之外的屏幕,也就是说当你在屏幕分享时,打开了其他应用,屏幕共享依旧存在。

logo

在ReplayKit2中,屏幕共享可以在系统层面上实现,参考iOS12(WWDC18)时放出来的iOS11中的ShareKit的实现。

logo

但是这个时候想要调用系统层级的Broadcast,必须要通过通知中心中的录制按钮。

logo
logo
logo

这样的操作虽然保证了用户的隐私,即不会被开发者通过代码调用屏幕共享从而窥探到你的屏幕,但是也一定程度上的增大了用户的使用成本,如果在用户的通知中心中,并没有放置这个按钮,那么还需要用户在设置中手动将这个按钮添加到通知中心来。简直不要太麻烦。

iOS12

在iOS12中,Apple基于iOS11时发布的ReplayKit2又进行了进一步的提升,解决了前版本中发起录制时过于繁琐的步骤。可以由开发者在应用中通过一个ReplayKit中的按钮发起屏幕分享。

logo

对比上一个版本就能很明显的看出来,在iOS12中的系统层级的直播就会方便很多了。

总结

总体看下来,结合上边看到的目前iOS系统版本分布,从iOS12开始支持屏幕实时分享应该没有什么大的问题,如果对iOS11有强烈的执念,也可以降低到支持iOS11,再早的版本其实也没有什么必要支持了。