ReplayKit录屏功能的使用条件和各种坑

使用该框架的前提

一、IOS系统版本需要大于等于9.0

[[UIDevice currentDevice].systemVersion floatValue] < 9.0 // IOS系统版本小于9.0就不支持录屏功能

二、硬件要求

[RPScreenRecorder sharedRecorder].available 这句代码返回NO就是不支持录屏功能的老设备
注:支持ReplayKit的是大于等于以下列出的苹果设备:
1.iPhone 5 s
2.iPad mini 2
3.iPod Touch第六代
4.iPad Air。

三、我在IOS 10.3.3中遇到的坑

1.只要你系统语言切换到英文,然后停止录屏的时候就会失败,错误信息是:RPRecordingErrorFailed = -5804的错误。系统语言本来在中文模式下录屏功能好好的,结果切换到英文后就会引起-5804的错误,就算再把系统语言切换回中文也是会录屏失败。但是很神奇的是系统语言切换到日文就可以录屏成功。但是再尝试切换到中文、英文下还是录屏失败。

ReplayKit录屏功能的使用条件和各种坑_第1张图片
image.png

image.png

当该方法调用时用户会收到权限请求警告,这个警告每次会在开始录制时出现。然而,一旦用户选择了其中一种偏好设置,系统会在接下来的8分钟记住这个选择。和获取用户相册权限只要弹一次是完全不同的,而且这个录屏权限也不会像相册权限一样显示在系统设置里面供修改。
第一项是允许录屏和录声音
第二项是只允许录屏
第三项是拒绝
监听错误码-5801可以得知用户是选择第三项拒绝录屏的,这个时候你可以选择弹窗让用户确定是否真的不开启该权限,如果他选择开启,你可以再调用startRecordingWithMicrophoneEnabled这个方法让这个权限选择再次弹出。

这个权限选择界面的文字有没给我们做国际化的方法,无论在简体中文还是繁体下都是显示英文的,让我震惊的是我切换成日文的时候这些权限选择的文字居然变成日文了,这是框架的BUG。

ReplayKit录屏功能的使用条件和各种坑_第2张图片
image.png

四、如何自定义RPPreviewViewController界面?

RPPreviewViewController这个录屏结束后的预览界面也是不能自定义,因为你获取不到save、cancel按钮,你只能通过代理方法去监听他的事件,我就算是覆盖一层View在save和cancel按钮上然后把userInteractionEnabled = NO,事件也不会穿透到父类的save按钮上。但是我通过运行时获取头文件发现NSURL *movieURL = [previewViewController valueForKey:@"movieURL"]; movieURL就是录屏视频文件的本地路径,我可以直接拿到这个路径然后就可以自己控制什么情况下保存视频到相册或者分享,这就可以完全自定义预览界面了。

NSURL *movieURL =  [previewViewController valueForKey:@"movieURL"];
ALAssetsLibrary *library = [[ALAssetsLibrary alloc]init];
    [library writeVideoAtPathToSavedPhotosAlbum:movieURL completionBlock:^(NSURL *assetURL, NSError *error) {
         if (error) {
            
            NSLog(@"Save video to system Album failed:%@",error);
        }else{
            
            NSLog(@"Save video to system album success!");
            
        }
    }];

这两句代码就可以拿到视频并保存到系统相册


ReplayKit录屏功能的使用条件和各种坑_第3张图片
image.png

你可能感兴趣的:(ReplayKit录屏功能的使用条件和各种坑)