苹果在 iOS 9 中新添加了 ReplayKit 库,主要作用就是 RPScreenRecorder 的屏幕录制功能。在 iOS 10 中,苹果又为 ReplayKit 添加了RPBroadcast 相关的类,主要用于视频直播。这篇文章说的是屏幕录制,以后可以研究一下苹果官方推出的的直播,还是蛮期待的。

关于屏幕录制的功能很简单,只涉及了三个类 RPScreenRecorder 、RPPreviewViewController 和 RPError。

相关的方法都在 RPScreenRecorder 里:

开始录制 :开始录制有两个方法


- (void)startRecordingWithHandler:(nullable void(^)(NSError * _Nullable error))handler;- (void)startRecordingWithMicrophoneEnabled:(BOOL)microphoneEnabled handler:(nullable void(^)(NSError * _Nullable error))handler;

调用第一个的作用只能录制屏幕的画面,无法录制声音。点击后会有授权信息,如图:

调用第二个方法会传递 microphoneEnabled 的布尔值,
如果设置为 NO ,效果和作用和调用第一个方法无异。如果设置为 YES ,会弹出如下授权信息:

注:选择了第一个,会在录制屏幕画面的同时,会录制手机以及外部环境的声音。

结束录制

- (void)stopRecordingWithHandler:(nullable void(^)(RPPreviewViewController * _Nullable previewViewController, NSError * _Nullable error))handler;

结束录制后,会有一个回调,返回一个 previewViewController 。该 ViewController 包含了录制好的视频预览图,顶部的返回和保存,以及底部的分享。 一般,我们只需要 present 出这个 ViewController。然后,点击保存就会自动存入相册 。也可以点击分享,直接分享到一些第三方。

代理方法
RPScreenRecorderDelegate

1、如果在录制的过程中,因为一些意外终止了录制,会调用这个方法,可以再此获取错误信息。(第一个方法在 iOS11 中已经被废弃调,可以用第二个方法)

- (void)screenRecorder:(RPScreenRecorder *)screenRecorder didStopRecordingWithError:(NSError *)error previewViewController:(nullable RPPreviewViewController *)previewViewController;- (void)screenRecorder:(RPScreenRecorder *)screenRecorder didStopRecordingWithPreviewViewController:(nullable RPPreviewViewController *)previewViewController error:(nullable NSError *)error;

2、下面这个代理方法是用来监听 ReplayKit 是否可用的,如果状态发生变化(比如录制过程中,切入设置,关闭权限。)会回调该方法。

- (void)screenRecorderDidChangeAvailability:(RPScreenRecorder *)screenRecorder;

注意事项

1、我们是无法通过回调直接拿到视频文件的,只有等待存入相册后,我们再从相册读取。

2、点击开始录制的时候,到系统真正的开始录制会有大概 1-2s 的延迟,甚至会出现启动录制失败的现象。因此要做好提示处理。


另外,在 iOS11中 我们可以通过下面的方法获取屏幕录制的每一帧:

- (void)startCaptureWithHandler:(nullable void(^)(CMSampleBufferRef sampleBuffer, RPSampleBufferType bufferType, NSError * _Nullable error))captureHandler completionHandler:(nullable void(^)(NSError * _Nullable error))completionHandler API_AVAILABLE(ios(11.0), tvos(11.0));

该方法在准备完毕后调用 completionHandler,然后 在录制过程中,会不断回调 captureHandler ,我们可以通过返回的每一个 sampleBuffer ,获取到视频对应的每一帧图片。具体转换方法谷歌一下,很多。

当然,有开始就有停止:

- (void)stopCaptureWithHandler:(nullable void(^)(NSError * _Nullable error))handler API_AVAILABLE(ios(11.0), tvos(11.0));

我觉得 iOS11 这个获取每帧画面应该就是为了直播准备的。关于苹果官方的直播方案,下次再议。

ReplayKit 的屏幕录制功能相关推荐

  1. IOS ReplayKit RPScreenRecorder 的屏幕录制功能

    IOS ReplayKit RPScreenRecorder 的屏幕录制功能 开始录制有两个方法: (void)startRecordingWithMicrophoneEnabled:(BOOL)mi ...

  2. python 屏幕录制_Python实现屏幕录制功能的代码

    前段时间做视频时需要演示电脑端的操作,因此要用到屏幕录制,下载了个迅捷屏幕录制,但是没有vip录制的视频有水印且只能录制二分钟,于是鄙人想了下能不能通过万能的python来实现呢?经过一晚上的尝试发现 ...

  3. ios html录制视频,iPhone怎么录屏?玩转iOS14自带屏幕录制功能全攻略

    原标题:iPhone怎么录屏?玩转iOS14自带屏幕录制功能全攻略 录屏是很多小伙伴,平时用的比较多的一项功能.苹果手机内置了录屏功能,无需下载安装第三方APP即可体验.不过,有一些小伙伴对iPhon ...

  4. android 实现屏幕录制功能,Android实现屏幕录制功能

    本文实例为大家分享了Android实现屏幕录制功能的具体代码,供大家参考,具体内容如下 1.效果图: 2.添加依赖 dependencies { implementation fileTree(dir ...

  5. python屏幕录制与回放_Python实现屏幕录制功能的代码

    前段时间做视频时需要演示电脑端的操作,因此要用到屏幕录制,下载了个迅捷屏幕录制,但是没有vip录制的视频有水印且只能录制二分钟,于是鄙人想了下能不能通过万能的python来实现呢?经过一晚上的尝试发现 ...

  6. android 实现屏幕录制功能,极速简单实现Android 屏幕录制编码为H264并且使用RTMP推流...

    最近有使用到屏幕录制功能并需要将屏幕数据推送到服务器端.采用RTMP推送,MediaCodec编码,MediaProjection 获取屏幕数据. 1.录制屏幕 在Android5.0 后可以采用原生 ...

  7. python实现屏幕录制_Python实现屏幕录制功能的代码

    前段时间做视频时需要演示电脑端的操作,因此要用到屏幕录制,下载了个迅捷屏幕录制,但是没有vip录制的视频有水印且只能录制二分钟,于是鄙人想了下能不能通过万能的python来实现呢?经过一晚上的尝试发现 ...

  8. android屏幕录制功能,Android利用ADB进行屏幕录制

    前言 在写博客时,为了方便大家理解,我们经常需要把一些操作或动画录制成Gif,一般需要下载一个屏幕录制App将手机屏幕录制成视频(可能需要Root权限),然后导出到电脑,再转为Gif.今天就来教大家一 ...

  9. python实现屏幕视频录制_Python实现屏幕录制功能的代码

    前段时间做视频时需要演示电脑端的操作,因此要用到屏幕录制,下载了个迅捷屏幕录制,但是没有vip录制的视频有水印且只能录制二分钟,于是鄙人想了下能不能通过万能的python来实现呢?经过一晚上的尝试发现 ...

最新文章

  1. python推荐系统-不到40行代码用Python实现一个简单的推荐系统
  2. jbuilder2006注册机
  3. Pytorch转ONNX采坑记:Converting a tensor to a Python boolean might cause the trace to be incorrect. We...
  4. 随便写写的正则表达式
  5. QT的QGroupBox类的使用
  6. Lua 调试(Debug)
  7. Qt笔记-解决QSocketNotifier: Multiple socket notifiers for same socket xxx and type Read问题
  8. 计算机专业汇报与接口,计算机接口设计实验总结.doc
  9. 服务器挂存储系统启不,应用服务器重新启动后无法加载多路径软件
  10. od找数据 遇到dll_OriginPro:最近比较烦,被360盯上了【数据绘图】
  11. 我哥以前是做小本生意的,一年花销除外能存个十二万的样子
  12. Windows修改hosts
  13. html获取视频时长,js获取本地视频时间长度
  14. python 线性插值处理_python线性插值解析
  15. 牛顿吼 苹果把老子头砸了 于是 爱翁发现 谭
  16. mysql 三表关联查询
  17. npm插件开发-Vue插件
  18. 河南工程学院第五届ACM大学生程序设计竞赛(部分题解)
  19. SV中program module
  20. node服务器接口不稳定,node服务部署到服务器后,数据接口404

热门文章

  1. os.listdir的随机性
  2. JS字符串替换(使用replace()方法)
  3. [word办公软件] WPS如何修改Word文档作者?
  4. PADS中元件引脚类型的解释
  5. 数据库存储微信昵称emoji表情
  6. php 无限分类递归树形(稳定版)
  7. Ribbon重试的坑
  8. php 数组相加和合并,php数组合并、追加与连接的方法(array_merge()、array_combine()函数)...
  9. 前端通过MathJax显示数学公式(vue+MathJax)
  10. 【CMS】什么是CMS?Camera Monitor System