IOS 一个很好的录制屏幕实现IOS功能
转自 https://github.com/wf1992/WFRecScreenDemo 和 http://www.jianshu.com/p/9a23b5365f0f
很不错 去看看
前文提要:
最近空闲的时候在玩手游《王者荣耀》,在沉迷如此的同时,身为一只程序猿一直在想一个问题,《王者荣耀》是怎么做到在不影响游戏流畅性的条件下录制游戏中视频,该文由此而来。
ReplayKit简介
在使用应用或者游戏的过程中录制回放,一直是iOS开发者绞尽脑汁想要实现的功能。但由于移动设备性能的限制,这一功能往往较难实现或者效果难以满足用户的需要。终于,随着iOS9的发布,苹果提供了ReplayKit框架来帮助开发者实现录制回放的功能。
在iOS 9中,ReplayKit 是一款全新的框架,它可以让玩家更便捷地记录游戏或者应用的画面,录制自己的声音。ReplayKit为用户或者玩家提供了一个全功能的交互界面,用户可用它来编辑或制作自己的视频剪辑。
ReplayKit不需要太大电量损耗和性能损耗就可以产出高清的视频记录。ReplayKit支持使用A7芯片以上,操作系统为iOS 9或更高版本的设备。
ReplayKit的使用
1、导入头文件#import <ReplayKit/ReplayKit.h>。ReplayKit框架中包含两个主要类:RPScreenRecorder负责录制回放视频,RPPreviewViewController为用户提供预览、分享、保存等功能。
2、检测设备是否支持ReplayKit框架。ReplayKit只有在iOS9上才可以使用,所以使用前需要判断设备是否支持该项功能,然后通过
"[RPScreenRecorder sharedRecorder].available"
属性我们可以判断RPScreenRecorder是否可以工作。
3、开始录制。
调用RPScreenRecorder的
- (void)startRecordingWithMicrophoneEnabled:(BOOL)microphoneEnabled handler:(nullable void(^)(NSError * __nullable error))handler
方法开始录制回放视频。当该方法调用时用户会收到权限请求警告,这个警告每次会在开始录制时出现。然而,一旦用户选择了其中一种偏好设置,系统会在接下来的8分钟记住这个选择。
4、停止录制。
通过调用RPScreenRecorder 的
- (void)stopRecordingWithHandler:(nullable void(^)(RPPreviewViewController * __nullable previewViewController, NSError * __nullable error))handler;
方法可以停止录制回放视频。在该方法中我们可以获取到一个RPPreviewViewController对象。
预览和保存。将得到的RPPreviewViewController对象呈现给用户,就可以让用户预览已经录制的视频,并且自行选择是否保存录像。
实现示例
ReplayKit不支持模拟器,所以要看到效果必须在真机上测试。下面的代码我们实现使用ReplayKit进行录制并预览回放的功能。这里使用UIImageView设置的动画展示,使用ReplayKit框架进行录制。
#import "ViewController.h"
#import <ReplayKit/ReplayKit.h>
@interface ViewController () <RPPreviewViewControllerDelegate>
@property (weak, nonatomic) IBOutlet UIImageView *imageView;
@end
@implementation ViewController- (void)viewDidLoad {[super viewDidLoad];[self createImageView];
}
- (void) createImageView {self.imageView.animationImages = @[[UIImage imageNamed:@"img_01"], [UIImage imageNamed:@"img_02"], [UIImage imageNamed:@"img_03"], [UIImage imageNamed:@"img_04"]];self.imageView.animationDuration = 1;[self.imageView startAnimating];
}
//启动或者停止录制回放
- (IBAction)replayKitAction:(UIButton *)sender {//判断是否已经开始录制回放if (sender.isSelected) {//停止录制回放,并显示回放的预览,在预览中用户可以选择保存视频到相册中、放弃、或者分享出去[[RPScreenRecorder sharedRecorder] stopRecordingWithHandler:^(RPPreviewViewController * _Nullable previewViewController, NSError * _Nullable error) {if (error) {NSLog(@"%@", error);//处理发生的错误,如磁盘空间不足而停止等}if (previewViewController) {//设置预览页面到代理previewViewController.previewControllerDelegate = self;[self presentViewController:previewViewController animated:YES completion:nil];}}];sender.selected = NO;return;}//如果还没有开始录制,判断系统是否支持if ([RPScreenRecorder sharedRecorder].available) {NSLog(@"OK");sender.selected = YES;//如果支持,就使用下面的方法可以启动录制回放[[RPScreenRecorder sharedRecorder] startRecordingWithMicrophoneEnabled:YES handler:^(NSError * _Nullable error) {NSLog(@"%@", error);//处理发生的错误,如设用户权限原因无法开始录制等}];} else {NSLog(@"录制回放功能不可用");}
}//回放预览界面的代理方法
- (void)previewControllerDidFinish:(RPPreviewViewController *)previewController {//用户操作完成后,返回之前的界面[previewController dismissViewControllerAnimated:YES completion:nil];
}
@end
效果图如下
在点击录制按钮后会弹出用户允许提示,分别为录制屏幕与音频、只录制屏幕与不允许。
在录制结束后,这里直接弹出了编辑界面,可预览或保存至相册等操作。
️注意事项
1、排除界面元素
你可能已经注意到了顶部的按钮在应用录制的记录中都是可见的,它们包含在了最终的视频记录中。当RepalyKit录制你的应用时,它毫不遗漏地记录了应用程序在UIWindow中渲染的一切视图,任何细节都不放过。还好,RepalyKit可以在来电话是或用户输入时的界面停止录制。
要排除用户界面元素,你需要把它们放置在单独的UIWindow实例中,或者在录制时隐藏那些不需要显示的视图。
2、兼容性
RepalyKit与AVPlayer不相互兼容,所以RepalyKit可能无法录制AVPlayer呈现的画面。
参考链接:iOS 9: An Introduction to ReplayKit
demo下载链接
为App添加行为录制功能ReplayKit框架入门指南demo
IOS 一个很好的录制屏幕实现IOS功能相关推荐
- ios录制屏幕_如何使您的ios应用免受屏幕截图和录制的影响
ios录制屏幕 防止在iOS App中捕获和录制屏幕(Preventing Screen Capturing and Recording in iOS App) Thanks to the mobil ...
- linux下vlc视频录制,使用VLC录制屏幕
如何使用VLC作为屏幕录制工具? VLC媒体播放器是一款完全免费的媒体播放器.它非常易于使用,几乎可用于所有操作系统,例如Windows,Mac,台式机的Linux和移动设备的Android,iOS. ...
- iOS端使用replaykit录制屏幕的技术细节
前面两篇文章: iOS端屏幕录制(replaykit)调研 iOS端屏幕录制Replaykit项目实践 已经对iOS端实现屏幕录制的调研结果和简单实践进行了概述,本篇开始将分别对iOS9.iOS10. ...
- android屏幕适配:一个很棒的屏幕适配文章
转载请注明出处:http://blog.csdn.net/zhaokaiqiang1992 Android的屏幕适配一直以来都在折磨着我们这些开发者,本篇文章以Google的官方文档为基础,全面而深入 ...
- iOS ReplayKit实时录制屏幕实现方案的细节记录
项目有个需求,需要把ios设备上的操作画面实时传输出去,也就是类似推流手机直播画面的方案. 一番调研后发现在ios中,我们可以通过ios自带ReplayKit框架实现. 关于ReplayKit的讲解, ...
- iOS录制屏幕之ReplayKit-iOS 9
ReplayKit是苹果在iOS 9/tvOS 10推出的一个录制iOS设备屏幕的框架.由于和AirPlay用到了相同的技术,以及ReplayKit在系统中是一个录制进程,所以AirPlay和Repl ...
- Mac iOS 模拟器录制屏幕生成Gif
有的时候我们需要将iOS app 的运行效果录制下来并保存成gif动画,那么我们可以这样做: 录制mov格式视频: 打开mac自带 QuickTime Player QuickTime Player ...
- 一个简单的录制屏幕的工具 GiFCam
1.GiFCam 介绍 GiFCam 是一个操作非常简单的屏幕录制软件,录制的效果非常清晰,非常适合制作GIF图片. GifCam 完全免费且是绿色软件,体积仅几百KB,完美支持 Windows 8. ...
- python录制视频和声音_使用python编写一个录制屏幕及右下角录视频的工具
1.首先需要的python模块有:pyaudio.openCV.moviepy.pillow.wave主要第三方库. pyaudio录制音频 openCV录制屏幕及对个人录像 moviepy对录制的音 ...
最新文章
- 使用ATS中的regex_remap插件实现正则匹配的url重定向
- mysql提取数据字符_如何从MySQL查询的字符串中提取数值?
- 图解Telnet命令和命令行看邮件
- log4j(六)——log4j.properties简单配置样例说明
- 全志A33-linux内核early_printk分析及使用
- CPU怎么认识代码的?
- vba html 教程 pdf,Word VBA教程:CanvasShapes集合
- 便宜又大碗!AI将画廊轻松搬到自家墙壁;用隐写术在图像中存储文件;免费书·算法高维鲁棒统计;关节式手部模型数据集;前沿论文 | ShowMeAI资讯日报
- 使用adb工具修改android分辨率
- linux装完系统需要输入密码,在安装Linux系统的过程中,一定要设置root用户的密码 (5.0分)...
- Matlab 并行代码
- linux与pe到移动硬盘,PE下找不到移动硬盘?不用怕
- 《谁说大象不能跳舞》值得一读
- 计算机右侧不显示桌面,显示器右边显示不出来怎么办
- 我如何建立热线电话喀拉拉邦并为抗洪救灾做出了贡献
- Kettle【部署 02】Linux环境 Kettle pdi-ce-9.0.0.0-423 安装部署 carte 服务运行及 Java 集群调用实例(安装包1.85G+测试ktr\kjb\源码)
- mac os监听扬声器、麦克风的音量、静音
- django基于python的平南盛世名城小区疫情防控系统--python-计算机毕业设计
- PinYin4j使用教程
- 仿知音漫画网站源码 PC+手机端 帝国cms7.5内核
热门文章
- 阿里云轻量服务器收费标准价格表(一览查阅)
- 继“ABC”之后,“ABCD”又是个什么“鬼”?
- 大数据常用shell脚本之fl脚本
- 如何使用数据工厂分析业务数据
- lisp如何将度分秒转换为弧度_测量学习题
- 前端图片裁剪 cropperjs的简单使用
- [软件推荐及下载]电脑录频软件推荐——capture
- 漫画 | 小黄人学 Kubernetes 对象
- thinkphp 框架自动加载原理_thinkPHP5.0框架自动加载机制分析
- 解决HttpClient::setHeader() must be of the type string, null given