美文网首页
APP 录制功能ReplayKit框架入门

APP 录制功能ReplayKit框架入门

作者: 那位小姐 | 来源:发表于2018-03-22 17:32 被阅读117次

ReplayKit简介

  • 在使用应用或者游戏的过程中录制回放,一直是iOS开发者绞尽脑汁想要实现的功能。但由于移动设备性能的限制,这一功能往往较难实现或者效果难以满足用户的需要。终于,随着iOS9的发布,苹果提供了ReplayKit框架来帮助开发者实现录制回放的功能。

  • 在iOS 9中,ReplayKit 是一款全新的框架,它可以让玩家更便捷地记录游戏或者应用的画面,录制自己的声音。ReplayKit为用户或者玩家提供了一个全功能的交互界面,用户可用它来编辑或制作自己的视频剪辑。

  • ReplayKit不需要太大电量损耗和性能损耗就可以产出高清的视频记录。ReplayKit支持使用A7芯片以上,操作系统为iOS 9或更高版本的设备。

ReplayKit的使用

  • 1、导入头文件#import。ReplayKit框架中包含两个主要类:RPScreenRecorder负责录制回放视频,RPPreviewViewController为用户提供预览、分享、保存等功能。
  • 2、检测设备是否支持ReplayKit框架。ReplayKit只有在iOS9上才可以使用,所以使用前需要判断设备是否支持该项功能,然后通过
  • 3 .[RPScreenRecorder sharedRecorder].available"属性我们可以判断RPScreenRecorder是否可以工作。

开始录制,调用RPScreenRecorder的

- (void)startRecordingWithMicrophoneEnabled:(BOOL)microphoneEnabled handler:(nullable void(^)(NSError * __nullable error))handler

方法开始录制回放视频。当该方法调用时用户会收到权限请求警告,这个警告每次会在开始录制时出现。然而,一旦用户选择了其中一种偏好设置,系统会在接下来的8分钟记住这个选择。

停止录制。

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

方法可以停止录制回放视频。在该方法中我们可以获取到一个RPPreviewViewController对象。

预览和保存。将得到的RPPreviewViewController对象呈现给用户,就可以让用户预览已经录制的视频,并且自行选择是否保存录像。

实现示例

ReplayKit不支持模拟器,所以要看到效果必须在真机上测试。下面的代码我们实现使用ReplayKit进行录制并预览回放的功能。这里使用UIImageView设置的动画展示,使用ReplayKit框架进行录制。

#import "ViewController.h"
#import @interface ViewController () @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

效果图如下

在点击录制按钮后会弹出用户允许提示,分别为录制屏幕与音频、只录制屏幕与不允许。


image.png
image.png

注意事项

排除界面元素

  • 你可能已经注意到了顶部的按钮在应用录制的记录中都是可见的,它们包含在了最终的视频记录中。当RepalyKit录制你的应用时,它毫不遗漏地记录了应用程序在UIWindow中渲染的一切视图,任何细节都不放过。还好,RepalyKit可以在来电话是或用户输入时的界面停止录制。
  • 要排除用户界面元素,你需要把它们放置在单独的UIWindow实例中,或者在录制时隐藏那些不需要显示的视图。

2、兼容性

  • RepalyKit与AVPlayer不相互兼容,所以RepalyKit可能无法录制AVPlayer呈现的画面。

参考链接:iOS 9: An Introduction to ReplayKit

相关文章

网友评论

      本文标题:APP 录制功能ReplayKit框架入门

      本文链接:https://www.haomeiwen.com/subject/xltnqftx.html