iOS 学习笔记之ReplayKit
前言
最近一段时间在准备上线一款自己的App,想用一个屏幕录制功能做个简易的用法说明,所以有了这么一篇的学习笔记。在iOS 9 之前录制屏幕可能需要借用一些第三方库或者越狱,当然现在iOS12了已经,越狱这么“严重的”事,谁去做呀,能用到系统库当然不会用第三方库了,正统多重要呀。直接进正文吧,ReplayKit
才是本篇学习笔记的重点。
正文
简介
录屏功能是iOS 10 新推出的特性,苹果在iOS 9的 ReplayKit
保存录屏的基础上,增加了视频流的实时直播功能,官方说明。iOS 11又再次增强成ReplayKit 2,进一步的提升了ReplayKit
的易用性和通用性,并且可以对整个手机实现屏幕录制。
应用场景
-
场景一
教育场景,告诉用户使用方法或者客服通过用户的共享的屏幕查看用户遇到的问题和场景还有操作,快速定位问题所在。
-
场景二
直播场景,比方说当下最火的视频直播。
介绍
RPPreviewViewController
描述
RPPreviewViewController
是屏幕录制之后用来展示预览和编辑的视图对象。有两个mode控制的,一个是preview
(预览),一个是share
(分享)。
常用代理说明
当用户完成对屏幕记录的更改时,应用程序负责关闭表示用户界面的视图控制器。
func previewControllerDidFinish(_ previewController: RPPreviewViewController)
当用户完成对屏幕记录的更改时,应用程序负责关闭表示用户界面的视图控制器。
func previewController(_ previewController: RPPreviewViewController, didFinishWithActivityTypes activityTypes: Set<String>)
RPScreenRecorder
描述
RPScreenRecorder
是主要录制屏幕的类,RPScreenRecorder
是一个单例对象,但是RPScreenRecorder
不能从AVPlayer
录制视频。
常用代理说明
当录制出现错误或记录可用性更改而发生的停止,会调用如下方法
func screenRecorder(RPScreenRecorder, didStopRecordingWith: RPPreviewViewController?, error: Error?)
屏幕录制可用性改变(由于不支持硬件、用户的设备通过Airplay或者TVOut会话显示信息,或正在录制其他的应用程序,屏幕记录可能无法使用)
func screenRecorderDidChangeAvailability(_ screenRecorder: RPScreenRecorder)
用法
描述
1.由于iOS 9才开始支持ReplayKit
框架,所以需要判断设备是否支持ReplayKit
;
以下方法可以判断屏幕录制是否可用
RPScreenRecorder.shared().isAvailable
2.开始录制
通过
RPScreenRecorder
的单例对象调用以下方法进行开始录制。microphoneEnabled
这个参数表示在录制过程中是否激活麦克风状态,默认是false。
func startRecording(withMicrophoneEnabled microphoneEnabled: Bool, handler: ((Error?) -> Void)? = nil)
3.停止录制
通过
RPScreenRecorder
的单例对象调用以下方法进行停止录制。当记录因错误或者录制可用性更改而停止,会调用这个回调方法,如果停止录制的时候有可用的内容时,会返回一个RPPreviewViewController
对象。
func screenRecorder(_ screenRecorder: RPScreenRecorder, didStopRecordingWith previewViewController: RPPreviewViewController?, error: Error?)
总结
-
ReplayKit
不支持模拟器; -
ReplayKit
不能录制AVPlayer
呈现的画面; -
ReplayKit
在录制的时候,需要请求用户权限; -
ReplayKit
在录制的时候,会把应用程序在UIWindow
中渲染的一切视图,任何细节都不放过; -
ReplayKit
不支持自定义预览视图; -
ReplayKit
无法修改录制视频保存路径; -
ReplayKit
在录制的时候会在来电话时或者用户输入时停止录制。