实时屏幕共享功能,在视频会议、游戏直播、在线教育等场景中已广泛被应用。近日,主打屏幕分享的社交应用「Squad」被Twitter收购,让我们看到了实时屏幕共享融于更多行业,开启丰富玩法的趋势。

作为实时屏幕共享的第一步,录屏采集在不同终端和系统上的实现方式有所不同。

下面将分享本系列的第三篇,如何实现iOS端屏幕共享的录屏采集

在iOS端,录屏采集的范围主要分为两种:当前App屏幕内和整个手机屏幕。下面将对屏幕共享使用场景,iOS屏幕共享的实现,以及在实现过程中iOS系统版本的限制做详细描述。

iOS 9

功能

从iOS 9开始,苹果提供了ReplayKit.framework满足开发者实现屏幕录制的需求。因为录制功能涉及到用户隐私,所以启动录制前,会弹框提示用户是否允许录制,同意后才能开始录制。

录制时,开发者可以将当前App屏幕内的画面和声音录制下来,同时也可开启麦克风录制设备外部声音,比如手游直播时,边玩边讲解。

录制完成后可以进行预览,编辑,或者选择某种方式分享出去。

(iOS 9的RPScreenRecoder录制流程)

限制

  • 只能在App内启动,无法通过系统的控制中心开启录制;

  • 只能录制当前App内主屏幕的内容,如通知,键盘等都不会被录制;

  • 无法进行实时音视频直播,只是将主屏幕的内容录制成MP4文件;

  • 录制的MP4文件不能直接访问,只能通过RPPreviewViewController预览和分享。

(iOS 9的RPScreenRecoder录制限制)

iOS 10

功能

从iOS 10开始,苹果在iOS 9的基础上新增了Live Broadcast。

Live Broadcast具体是通过Broadcast Upload Extension和Broadcast Setup UI Extension两个扩展,来实现屏幕录制和实时音视频数据获取。获取的数据可直接通过手机传输到第三方流媒体服务,达到实时直播的效果,因此包含这两个Extension的App,即拥有Broadcast Services的能力。

其中,Broadcast Setup UI Extension是在用户在RPBroadcastActivityViewController加载成功并显示后,选择某个拥有Broadcast Services的App,进入Extension的UI界面,此Extension的主要作用是自定义录制配置界面。

Broadcast Upload Extension是在录制配置界面完成后,在录制期间触发事件回调和录制的音视频数据回调,开发者可在此回调中处理逻辑,比如把获取到音视频数据传输给第三方流媒体服务。

(iOS 10的Broadcast Service工作流程)

在录制过程中,可通过RPBroadcastController做开始,暂停,恢复,完成等操作。当录制被其他进程打断(比如打电话)进入后台,默认是暂停录制,当进入前台后,系统会弹窗提示用户是否恢复录制,如果选择恢复,则执行恢复录制操作,反之,则执行完成录制操作。

RPScreenRecorder新增了CameraEnable。在录制时,可开启或关闭前置摄像头,开启后,摄像头采集的画面将显示在主屏幕中,同时新增了CameraPreviewView,可自定义摄像头采集视频后预览视图的位置。此功能应用在如游戏直播等场景时,在直播画面可以显示主播的头像。

(iOS 10的RPScreenRecoder支持摄像头采集)

限制

只能录制当前App内主屏幕的内容,如通知,键盘等都不会被录制;

iOS 11

功能

从iOS 11开始,苹果提供了升级版本的ReplayKit 2,拥有Broadcast Services的App只要安装在手机上,就可以在通过iOS系统的控制中心进行系统录制,出现在可选应用的选择列表中。同时,录制的范围将是整个手机屏幕。

(iOS 11通过控制中心开始系统级录制)

(iOS 11通过控制中心长按后选择Broadcasr Service录制)

在摄像头方面,ReplayKit 2也新增了快速切换前置和后置的功能,通过RPScreenRecorder的cameraPosition设置。

在App内启动采集屏幕数据和音频数据时,RPScreenRecorder可以通过Capture的方式,在回调里直接实时获取采集完成的音视频数据,开发者可以对这些数据做自身的业务处理逻辑,比如合成一个视频文件。

因为优先级的原因,在App内通过ReplayKit录制或广播时会被系统的屏幕录制打断,并以RPScreenRecorderDelegate的方式通知App,此时App内的录制会被忽略,App应该更新UI提示用户。

如果你不想自己的App内容被录制并公开广播到其它流媒体服务上,ReplayKit 2提供了Broadcast Pairing,在加载BroadcastActivityViewContronller时指定PreferredExtension,即Extension的Bundle ID,可以在指定的Broadcast Service进行广播,其它Broadcast Service的App将不会显示。

(iOS 11的Broadcast Pairing工作流程示意图1)

(iOS 11的Broadcast Pairing工作流程示意图2)

限制

录制手机全部屏幕,只能通过控制中心的系统录制。

iOS 12

功能

从iOS 12开始,ReplayKit 2为了解决录制手机屏幕(系统级录制)时只能从系统控制中心启动的问题,新增了RFSystemBroadcastPickerView,这个视图和在控制中心长按录制时弹出的视图一样,可以选择性的使用Broadcast Service进行广播。

(iOS 12之前ReplayKit和ReplayKit2的录制对)

(iOS 12之后ReplayKit2在App内启动系统级录制)

虽然是在App内启动的录制,但是录制的是整个手机屏幕,并且PickerView启动的录制可以通过系统控制中心关闭,系统控制中心启动的录制可以通过PickerView关闭。

RFSystemBroadcastPickerView也和BroadcastActivityViewContronller一样,指定PreferredExtension,实现Broadcast Pairing的能力。

(通过RPSystemBroadcastPickerView启动系统级录制)

(通过RPSystemBroadcastPickerView启动后显示Broadcast Pairing选项)

如果只允许在登录成功的情况下才能成功使用你App的Broadcast Service,可以在BroadcastStartedWithSetupInfo做登录检查,如果没有登录成功则可调用FinishBroadcastWithError,会弹出一个提示框让用户选择是否前往登录。

(Broadcast Service的登录校验)

为了防止自己的App内容被录制或者广播出去,比如敏感的音频或视频,以及其他敏感信息,可以使用UIScreen.isCaptured或监听UIScreenCapturedDidChangeNotification来判断当前是否正在使用屏幕录制,如果是则停止播放音频或者隐藏播放的视频。

有种特殊情况是Airplay Screen Mirroring,同屏交互,此时在判断UIScreen.isCaptured的基础上,还需要判断UIScreen.screens.count是否等于1,如果是,则根据需要对App的内容采取保护措施。

总结

从iOS 9~12,系统能力的不同影响着录屏采集的实现方式。综合来看,要实现当前App屏幕内录屏和整个手机屏幕的录制,主要的方式有:

第一,如果是录制当前App屏幕的内容,有两种方式,一种是通过 RPScreenRecorder 获取采集的数据,另一种是,自己实现或使用其它拥有broadcast service能力的App,进行屏幕采集和录制。

第二,如果是录制整个手机屏幕的内容,也有两种方式,一种是通过RPSystemBroadcastPickerView在App内唤起系统录制,一种是通过手机控制中心的录制按钮唤起系统录制,在开始系统录制前,需要选择一个拥有broadcast service能力的App,该App会把采集到音视频数据推流到指定流媒体服务器。

如果是自己实现broadcast service,可根据自身需求,制定UI界面,实现信息获取和校验等个性化功能,充分利用该功能带来的便利性,让自己的App更加丰富和强大。

技术干货 | 录屏采集实现教程 —— iOS端相关推荐

  1. 技术干货 | 录屏采集实现教程 —— Windows桌面端

    在进入具体的方式讨论前,我们先看看 Windows 桌面图形界面的简化架构,如下图: 在 Windows Vista 之前,Windows 界面的复合画面经由 Graphics Device Inte ...

  2. 技术干货 | 录屏采集实现教程 —— macOS桌面端

    实时屏幕共享功能,在视频会议.游戏直播.在线教育等场景中已广泛被应用.近日,主打屏幕分享的社交应用「Squad」被Twitter收购,让我们看到了实时屏幕共享融于更多行业,开启丰富玩法的趋势. 作为实 ...

  3. Windows桌面端录屏采集实现

    实时屏幕共享功能,在视频会议.游戏直播.在线教育等场景中已广泛被应用.近日,主打屏幕分享的社交应用「Squad」被Twitter收购,让我们看到了实时屏幕共享融于更多行业,开启丰富玩法的趋势. 作为实 ...

  4. 苹果手机和电脑怎么录屏?详细教程来了!

    ​相信小伙伴身边有不少人使用的是苹果手机和电脑.安卓手机和windows电脑怎么录屏不少人都已经知道了,那么苹果手机和电脑怎么录屏 呢?现在,小编就来详细的教教大家如何录屏,快拿出小本本记下来哦! 一 ...

  5. Win7电脑系统录屏功能使用教程分享

    Win7电脑系统录屏功能使用教程分享.电脑上其实不用下载也可以使用录制屏幕这个功能,很多用户不懂如何去开启这个功能的方法,如果你还没有学会自带录屏工具的使用方法,那么可以通过本文来进行学习. 操作步骤 ...

  6. python录屏工具下载_Python移动端录屏库

    Python移动端录屏库 背景 日常移动端专项测试和自动化测试通常有一些场景如:Ui自动化的操作捕获.App启动耗时.视频启播耗时等,通常都有需要边操作边录屏,而对于启动耗时测试通常还需要质量较高且帧 ...

  7. VM虚拟机安装使用OBS直播录屏软件图文教程及注意事项

    因为有时候会需要在虚拟机中用到 OBS 软件,所以奇技视频写了一个教程方便大家,也备为不时之需.OBS 用作录屏时,虽然在码率高的时候文件较大,但优点也很明显的,因为录下来的视频不会受到桌面广告弹窗. ...

  8. 录屏专家怎么用?录屏软件使用教程(附下载)

    想要更好地录制电脑屏幕可以使用电脑录屏专家,但有很多人在安装录屏专家之后,不知道如何使用.录屏专家怎么用?怎样使用录屏专家录制电脑屏幕? 下面小编给您分享录屏软件使用的教程(附安装教程),需要的小伙伴 ...

  9. android 小米录制视频,小米手机如何录屏 小米手机录屏方法【教程】

    相信很多人喜欢用小米,一个很大的原因便是功能丰富多样的MIUI.而本周,MIUI又更新了一个很多人非常期待的功能:录屏.目前支持的机型有小米3/4/5以及小米note,后续会继续完善. 对于这样一个贴 ...

最新文章

  1. python元素平方和,模长
  2. ML之LiRDNNEL:基于skflow的LiR、DNN、sklearn的RF对Boston(波士顿房价)数据集进行回归预测(房价)
  3. ThreadLocal怎么实现线程隔离的?可见性问题?为什么要重新定义一个threadLocalHashCode?为什么有内存泄露?弱引用又是什么?
  4. 2020-09-27 What is Sector-Bounded Nonlinearities?
  5. 玩家为何沉迷于游戏?《密教模拟器》中的“上瘾体验”设计
  6. 【Linux】一步一步学Linux——ssh命令(176)
  7. GDB下查看内存命令(x命令)
  8. 【Java中级篇】使用itextpdf生成PDF
  9. 管理员信息模块php,管理员模块功能代码
  10. 社区出入登记1.0.53完整安装包+小程序前端
  11. Mr.J-- HTTP学习笔记(五)-- Web服务器
  12. css在线工具_已迁移
  13. mes系统和plc通讯案例_「MES系统 | 应用案例」奥松电子云MES系统项目启动大会顺利召开...
  14. Spring Boot 2.4.0正式发布,全新的配置文件加载机制(不向下兼容)
  15. STM32——串口通信原理
  16. spider.php使用方法,phpspider爬虫框架怎么用
  17. 每日算法刷题Day3-起始时间转换、二次方根、while连续输入、斐波那契思路
  18. 如何把PPT文件压缩到最小
  19. U-Net模型搭建python实现
  20. hdu5385 wyh2000 and pupil 二分图

热门文章

  1. GBA模拟器 My Boy!的远程连接-wifi连接联机教程
  2. 聚焦虚拟化安全之“无代理防毒”(视频)
  3. linux系统华为笔记本装软件,华为电脑Linux版换windows10,华为笔记本一键安装装win10教程...
  4. 【Riak学习笔记】Riak安装
  5. html控制页面用ie打开,大神操作win10系统Ie浏览器无法打开HTML设置Ie的解决教程...
  6. 卧槽,电容引起了CAN通信不正常
  7. Nginx 0.8.x + PHP 5.2.13(FastCGI)搭建胜过Apache十倍的Web服务器(第6版)[转]
  8. Google浏览器修改个人信息路径
  9. OA系统集成发票云,提高报销效率
  10. android 通讯录界面设计带字母,android仿微信联系人索引列表功能