iOS端屏幕录制(replaykit)调研

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

一、 概述

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


屏幕共享

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

二、 应用

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

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

  • 场景一:视频通话时 ,可以辅助和指导对方对手机进行一些操作。例如年轻人可以通过屏幕共享,帮助家里老人了解手机中某些app的设置或者操作,这样可以更加快速解决单纯通过语言表述的低效的问题。
  • 场景二:游戏app中,某些知名选手可以将手机上的画面直播给别人实时观看,这样游戏迷可以清晰地了解高手是如何操作,更加直观地学习更多游戏技巧。
  • 场景三:对于视频通话的客服,可以通过用户的共享的屏幕查看出现问题的场景和操作,这样可以更快定位用户的问题操作,并能给用户很好的用户体验。
  • 场景四:商务会议,即使将某一方手机中信息展示给其他参会方,如手机中的邮件内容、图片等,方便参会方快速共享信息,提高沟通效率。

三、 各系统实现屏幕共享

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--

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,222评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,455评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,720评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,568评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,696评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,879评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,028评论 3 409
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,773评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,220评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,550评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,697评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,360评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,002评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,782评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,010评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,433评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,587评论 2 350

推荐阅读更多精彩内容

  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明先生_X自主阅读 15,969评论 3 119
  • 我是一枚钻戒,一枚上了年纪的钻戒,按人间的时间计算,我已有一百来岁,虽然在阳光的照耀下,我的 58条切割边和2克拉...
    Cur浅念阅读 574评论 0 1
  • (上期双胆34独胆4中.4码中.跨2中) 胆码046.双胆04.独胆4. 定位:百位0145.十位0236.个位4...
    萱萱_eed9阅读 227评论 0 0
  • 记忆痕阅读 200评论 1 1
  • 亲子共读第29天~2018/3/2 1.亲子共读:《古诗词》 2.亲子游戏:跳绳 3.宝宝日记: ...
    唐嘉阅读 708评论 0 0