苹果在 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. 一些与算法有关的网站
  2. Linux模块机制浅析
  3. 不起作用 微信小程序 顶部json_微信小程序之 新建项目默认结构
  4. Crawler之Scrapy:Scrapy简介、安装、使用方法之详细攻略
  5. arm中的.a文件如何产生的_可变文件系统:如何在IPFS中处理文件?
  6. 读者来信(1)——项目经理,不要迷信制度!
  7. 【51单片机快速入门指南】5:软件SPI
  8. 科目三并不难 盘点科目三技巧
  9. Bootstrap 滚动监听插件Scrollspy 的方法
  10. linux乱码的文件怎么删除,如何删除Linux的乱码文件
  11. Win10专业版下如何禁用Windows Defender功能?
  12. 如何去定义一个jquery插件
  13. Scrapy分布式、去重增量爬虫的开发与设计
  14. HMM和Viterbi
  15. 星空之夜(哈希+DFS)
  16. 如何合并同一个磁盘里面的两个区(卷)
  17. 运维真的不是夕阳产业!(不谈技术)
  18. VP-Expert的下载安装以及如何运行
  19. 90%公链项目将死?那些号称超越以太坊的“颠覆者”咋样了?
  20. 大数据︱中国城市谁在腾飞?谁又在衰落?

热门文章

  1. 意识风骚的66条法则
  2. Nvidia Jetson TX2 使用手机热点刷机教程
  3. 达内 php测试微软,微软小冰颜值测试PHP最新代码
  4. 机器学习--监督学习以及无监督学习案例
  5. HTTP之重定向作用
  6. 【CSDN的2022与2023】普普通通的三年,从懵懂、焦虑到坚定、奋进,破除焦虑努力成为更好的自己
  7. App Crawler使用教程
  8. 中国传媒大学计算机联合学院,中国传媒大学成功举行CCF-CV走进高校学术报告会...
  9. 让你的文字会「说话」,抠脚大汉秒变撒娇萌妹
  10. JavaScript匿名函数、作用域、预解析