iOS开发收藏iosReplayKit

iOS端屏幕录制(replaykit)调研

2018-09-04  本文已影响244人  杭研融合通信iOS

最近项目中需要完成一个屏幕录制并推流的需求,对iOS端这个功能进行了调研,分享一下结果:

一、 概述

屏幕共享是将屏幕上的内容分享,从而实现信息共享的一种技术。对于手机端,用户可以将自己手机屏幕上的内容共享给他人观看,他人可以实时看到对方手机上的内容。 iOS手机上的屏幕共享需要手机系统支持屏幕内容的录制,并且将实时录制的音视频流广播出来,供推流的app来使用,通过直播的形式广播出去,才能实现屏幕的共享。
对于iOS端,需要两个关键技术:屏幕内容采集和媒体流广播。前者需要系统提供相关权限,可以让开发者采集到app或者整个系统层面的屏幕上的内容,后者需要系统提供采集到实时的视频流和音频流,这样才能通过推流到服务器,实现媒体流的广播。


屏幕共享

本文将描述iOS系统的屏幕共享的应用、实现、限制、实现细节等方面调研结果。

二、 应用

屏幕共享直播最早出现在游戏app中,当时iOS系统并没有支持屏幕共享的SDK,所以开发者是通过破解iOS系统的airplay协议来实现屏幕共享。随着直播的火爆,iOS系统的升级,针对用户的需求,推出了支持这种场景的ReplayKit SDK,开发者通过集成ReplayKit可以直接将屏幕内容采集出来,并且通过服务器广播出去,从而实现屏幕共享。目前多数直播app已经集成实现了屏幕共享,在线协助软件TeamViewer最新版本也已经将ReplayKit集成进去,实现了办公场景的屏幕共享;视频会议软件zoom也集成了ReplayKit,实现了多人会议场景中的屏幕共享。

总结一下可以应用的场景:

三、 各系统实现屏幕共享

iOS系统上实现屏幕共享的技术,主要在于系统各个版本的差异,下面将针对各个系统版本实现方式和限制性等方面进行比较。
首先,由于需要使用手机的相机和麦克等硬件,无法在模拟器上调试使用。首先我们了解下目前各个版本的覆盖率情况。

3.1 系统覆盖率

根据友盟的数据显示,截止到2018年5月,iOS系统各个系统版本占有率大致如下图所示,可见,目前iOS8及以下系统的用户覆盖率不足5%,而iOS9系统的覆盖率约为 7.4%,iOS10系统的覆盖率约为18.7 %,iOS11系统的覆盖率约为69.6%。


iOS各系统覆盖率

3.2 iOS 8 及以前系统

实现方式:
iOS8系统不提供相关SDK,开发者只能通过一些trick的方式(例如通过破解苹果用于无线传输的airplay协议,使用协议的私有api相关功能),实现屏幕共享的直播。

问题:
存在系统兼容性和发布可靠性两个方面问题。由于使用私有api,无法保证系统更新之后还能继续使用,通常系统更新后需要重新适配api,并且可能无法通过appstore的代码审核,只能通过企业版本发布应用。

3.3 iOS 9系统

实现方式:
iOS9系统考虑到开发者在屏幕录制共享方面需求,禁用了之前被开发者使用的实现屏幕共享的私有api,提供了ReplayKit SDK,并且通过这个SDK, 开发者可以将当前app中的操作屏幕画面录制下来,完成后可以进行查看、编辑、通过指定方式分享出去。通过上传到服务器,实现分享和直播的功能。


replaykit屏幕录制及上传过程

问题:
该方案只能将当前app(而不是整个手机上)的屏幕内容录制下来,并且无法将实时的音视频流提供出来,只能将最终录制完毕的整个mp4文件提供给开发者,所以实际上并非真正的屏幕的直播共享,无法保证实时性。

3.4 iOS 10系统

extension是iOS8新开放的一种对几个固定系统区域的扩展机制,它可以在一定程度上弥补iOS的沙盒机制对应用间通信的限制。extension的出现,为用户提供了在其它应用中使用我们应用提供的服务的便捷方式,比如用户可以在Today的widgets中查看应用展示的简略信息,而不用再进到我们的应用中,这将是一种全新的用户体验;但是,extension的出现可能会减少用户启动应用的次数,同时还会增大开发者的工作量。
iOS 10系统推出了用户屏幕共享内容广播的extension,分别是broadcast upload extension和broadcast setup UI extension两个extensions。添加之后开发者可将内容广播的功能作为系统的扩展添加到列表中,供其他app使用,其他app在请求内容广播时,系统会弹出支持这些extensions的列表,选择某个extension后将由这个extension来处理后续对音视频流的处理和分发,具体细节将在后面详解。

实现方式:
iOS 10 系统在 iOS 9 系统的 ReplayKit 保存录屏视频的基础上,增加了视频流实时直播功能(streaming live),第三方广播服务可以将广播出来的直播流进行分发和直播。第三方广播服务需要实现对应用程序扩展。广播UI扩展提供了一个用户界面,允许用户登录到服务。登录成功后可以使用第三方的服务实现直播流的分发和直播。

问题:
虽然iOS 10 系统解决了之前系统的一系列弊病,但是仍然没能解决只能录制当前app的屏幕内容的问题,这样会限制一些应用的使用场景。

3.5 iOS 11系统

实现方式:
针对之前提供的ReplayKit存在的一些问题,iOS提供了ReplayKit2这个升级的SDK,最重大的升级就是解决了iOS10系统中无法录制整个手机屏幕内容(只录制当前app)的弊病,并且进一步提高集成sdk和实现屏幕录制直播的可用性。


iOS11与iOS10实现流程比较

上图中,表示了iOS10之前和iOS11之间的不同,其中第一行表示iOS10,第二行表示iOS11.

问题:
虽然ReplayKit2已经可以满足开发者的多数需求,但是对于用户来说,这个版本在实现屏幕直播时,需要用户提前在手机设置中配置出屏幕录制的访问控制权限,使屏幕录制按钮显示在系统的上拉管理菜单中,并且在录制时,上拉底部菜单调出快捷管理菜单,并且长按屏幕录制圆形按钮才能开始录制和直播。这一系列复杂的操作,对于一些对手机系统操作不熟悉的用户来说,门槛很高,很可能无法顺利体验或使用到这个功能。


iOS11屏幕录制的操作

3.6 iOS12系统

实现方式:
苹果WWDC 2018全球开发者大会宣布iOS12系统将要正式发布,大会在“ live screen broadcast with replaykit ”主题演讲中对iOS12系统将升级的ReplayKit2 SDK做了重点描述,其中提到将对iOS11系统中的ReplayKit2问题进行优化,使开发者可以通过接口直接启动屏幕录制,并完成直播,从而解决了iOS11系统还需要用户进行一系列复杂操作的问题。


iOS12与iOS11 iOS10实现流程比较

如上图展示的很清楚,三个阶段:第一行的原本的流程图就是iOS10 之前系统支持的形式,而第二行是iOS11支持的形式,二者结合起来的高亮的流程部分则是iOS12将会支持的形式(不明白早干啥去了,安卓早就这样了,iOS还要这样演进一下)。

问题:
暂未发布新版本ReplayKit,无问题。

3.7 总结

结合上面iOS各个系统版本对屏幕录制的限制的分析,从版本稳定性和发布可靠性角度来说,我们应该从iOS10系统开始提供屏幕录制功能,而之前的系统版本不做兼容。如果应用的需求是需要录制整个手机的界面内容,那么只能从iOS11系统开始支持屏幕录制,而而之前的系统版本无法兼容。

四. 风险及安全性

  1. 由于涉及到视频原始图像的获取、采集、存储、上传,可能影响app本身的内存占用、cpu占用、硬件占用以及耗电,需要考虑对app性能的影响;
  2. 由于涉及到用户手机端内容的采集,需要考虑用户的隐私,以及数据分发时的安全性;
  3. 当前方案可能涉及用户交互比较复杂,是否有提升可用性空间?
  4. 由于iOS手机屏幕分辨率较高,考虑到内存占用和传输效率,需要对采集图像和处理过程进行优化;
  5. 官方可参考文档信息较少,没有sample code,可能导致技术实现周期稍长。

--end--

下一篇将对技术细节进行描述。

上一篇下一篇

猜你喜欢

热点阅读