IOS 一个很好的录制屏幕实现IOS功能
2017-10-01 21:59
477 查看
转自 https://github.com/wf1992/WFRecScreenDemo 和 http://www.jianshu.com/p/9a23b5365f0f
很不错 去看看
图片发自简书App
在iOS 9中,ReplayKit 是一款全新的框架,它可以让玩家更便捷地记录游戏或者应用的画面,录制自己的声音。ReplayKit为用户或者玩家提供了一个全功能的交互界面,用户可用它来编辑或制作自己的视频剪辑。
ReplayKit不需要太大电量损耗和性能损耗就可以产出高清的视频记录。ReplayKit支持使用A7芯片以上,操作系统为iOS 9或更高版本的设备。
2、检测设备是否支持ReplayKit框架。ReplayKit只有在iOS9上才可以使用,所以使用前需要判断设备是否支持该项功能,然后通过
3、开始录制。
调用RPScreenRecorder的
方法开始录制回放视频。当该方法调用时用户会收到权限请求警告,这个警告每次会在开始录制时出现。然而,一旦用户选择了其中一种偏好设置,系统会在接下来的8分钟记住这个选择。
4、停止录制。
通过调用RPScreenRecorder 的
方法可以停止录制回放视频。在该方法中我们可以获取到一个RPPreviewViewController对象。
预览和保存。将得到的RPPreviewViewController对象呈现给用户,就可以让用户预览已经录制的视频,并且自行选择是否保存录像。
效果图如下
在点击录制按钮后会弹出用户允许提示,分别为录制屏幕与音频、只录制屏幕与不允许。
IMG_2162.PNG
在录制结束后,这里直接弹出了编辑界面,可预览或保存至相册等操作。
IMG_2163.PNG
你可能已经注意到了顶部的按钮在应用录制的记录中都是可见的,它们包含在了最终的视频记录中。当RepalyKit录制你的应用时,它毫不遗漏地记录了应用程序在UIWindow中渲染的一切视图,任何细节都不放过。还好,RepalyKit可以在来电话是或用户输入时的界面停止录制。
要排除用户界面元素,你需要把它们放置在单独的UIWindow实例中,或者在录制时隐藏那些不需要显示的视图。
2、兼容性
RepalyKit与AVPlayer不相互兼容,所以RepalyKit可能无法录制AVPlayer呈现的画面。
参考链接:iOS 9: An Introduction to ReplayKit
demo下载链接
为App添加行为录制功能ReplayKit框架入门指南demo
前文提要:
最近空闲的时候在玩手游《王者荣耀》,在沉迷如此的同时,身为一只程序猿一直在想一个问题,《王者荣耀》是怎么做到在不影响游戏流畅性的条件下录制游戏中视频,该文由此而来。图片发自简书App
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
效果图如下
在点击录制按钮后会弹出用户允许提示,分别为录制屏幕与音频、只录制屏幕与不允许。
IMG_2162.PNG
在录制结束后,这里直接弹出了编辑界面,可预览或保存至相册等操作。
IMG_2163.PNG
️注意事项
1、排除界面元素你可能已经注意到了顶部的按钮在应用录制的记录中都是可见的,它们包含在了最终的视频记录中。当RepalyKit录制你的应用时,它毫不遗漏地记录了应用程序在UIWindow中渲染的一切视图,任何细节都不放过。还好,RepalyKit可以在来电话是或用户输入时的界面停止录制。
要排除用户界面元素,你需要把它们放置在单独的UIWindow实例中,或者在录制时隐藏那些不需要显示的视图。
2、兼容性
RepalyKit与AVPlayer不相互兼容,所以RepalyKit可能无法录制AVPlayer呈现的画面。
参考链接:iOS 9: An Introduction to ReplayKit
demo下载链接
为App添加行为录制功能ReplayKit框架入门指南demo
相关文章推荐
- ios-day20-01(使用UIWebView实现一个简单功能的浏览器)
- 一个ios手势密码功能实现
- 一个很好用的侧滑框架ICSDrawerController实现的 QQ 侧滑及换肤功能
- iOS开发:一个瀑布流的设计与实现(已实现缓存池功能,该功能使得瀑布流cell可以循环利用)
- 做一个IOS聊天APP如何实现发送/预览文件的功能
- 一个iOS图片选择器的DEMO(实现图片添加,宫格排列,图片长按删除,以及图片替换等功能)
- iOS 实现一个截图分享的功能
- 【IOS】扩展UIImageViewEx实现:手势移动,旋转,缩放(附带一个收缩的文字标签功能)
- 【IOS】扩展UIImageViewEx实现:手势移动,旋转,缩放(附带一个收缩的文字标签功能)
- 一个iOS图片选择器的DEMO(实现图片添加,宫格排列,图片长按删除,以及图片替换等功能)
- iOS开发之旅(2):实现一个APP界面框架之搜索功能
- 【IOS】扩展UIImageViewEx实现:手势移动,旋转,缩放(附带一个收缩的文字标签功能)
- 一个功能,两个平台,三种语言 -(iOS,Swift,Android)App代码实现对比篇
- 【IOS】扩展UIImageViewEx实现:手势移动,旋转,缩放(附带一个收缩的文字标签功能)
- iOS开发:一个高仿美团的团购ipad客户端的设计和实现(功能:根据拼音进行检索并展示数据,离线缓存团购数据,浏览记录与收藏记录的批量删除等)
- iOS,侧滑(最简单效果却很好的侧滑功能实现
- 实现一个录音播放功能的app(ios)
- 分享一个iOS下实现基本绘画板功能的简单方法
- iOS开发之使用UICollectionView实现美团App的分类功能【偶现大众点评App的一个小bug】
- 【IOS】扩展UIImageViewEx实现:手势移动,旋转,缩放(附带一个收缩的文字标签功能)