美文网首页
ReplayKit屏幕录制

ReplayKit屏幕录制

作者: lmfei | 来源:发表于2021-11-30 19:07 被阅读0次

简介

ReplayKit是iOS推出的功能,他为开发者同时提供了屏幕与用户声音的录制与分享;ReplayKit产生的录音具有高清晰度,并且创建时耗电量少和性能损失小;支持使用A7芯片以上,操作系统为iOS9以上的设备。

api介绍

ReplayKit框架中主要包含两个类:
RPScreenRecorder - 负责录制回放视频
RPPreviewViewController - 为用户提供预览、分享、保存等功能

使用

  1. 导入头文件
#import <ReplayKit/ReplayKit.h>
  1. 判断设备是否支持该功能
[RPScreenRecorder sharedRecorder].available
  1. 开始录制
- (void)startRecordingWithMicrophoneEnabled:(BOOL)microphoneEnabled handler:(nullable void(^)(NSError * __nullable error))handler

调用该方法,系统会弹框询问权限


权限询问
  1. 停止录制
- (void)stopRecordingWithHandler:(nullable void(^)(RPPreviewViewController * __nullable previewViewController, NSError * __nullable error))handler

该方法会返回一个RPPreviewViewController对象,该对象含有实例对象movieURL,该地址为录像保存的视频地址,直接通过该地址无法直接获取到视频信息,我们可以通过RPPreviewViewController对视频进行预览与分享


视频预览

但这可能无法满足需求,我们的需求如果需要直接获取这个视频信息然后将它上传至后台,该怎么处理呢

  1. 获取视频
    网上给的方案都是将该视频存入相册,再通过相册获取视频,这是一个可行方案,但是由于安全问题,客户可能并不希望我们将视频存入相册,即使我们可以通过某种手段将视频再从相册删除,这也给用户一种不安全的感觉,会认为这个app怎么可以随意操作我的相册呢~~~
    下面分享下我的最终方案:
    这里主要使用了AVMutableComposition与AVURLAsset对视频进行重新处理,使用AVURLAsset通过movieURL获取Asset对象,再通过AVMutableComposition分别对音频和视频进行提取,最终将音频与视频进行合并得到新的视频,这个新的视频对象我们就可以就可以将它保存在自己的沙盒中,或者直接上传至后台!
    接下来我们看下具体实现的coding
    ///录制视频地址
    NSURL *sourceURL = [previewViewController valueForKey:@"movieURL"];
   NSString *filePath = <设置新视频的沙盒路径>;
    ///CMPersistentTrackID
    AVMutableComposition *mixComposition = [AVMutableComposition composition];
    
    AVURLAsset *fileAsset = [[AVURLAsset alloc]initWithURL:sourceURL options:nil];
    if ([fileAsset tracksWithMediaType:AVMediaTypeAudio].count > 0 && [fileAsset tracksWithMediaType:AVMediaTypeVideo].count > 0) {
        
        for (AVAssetTrack *mAVAssetTrack in [fileAsset tracks]) {
            if ([@"vide" isEqualToString:mAVAssetTrack.mediaType ]){
                
                NSError *error;
                AVMutableCompositionTrack *videoTrack = [mixComposition addMutableTrackWithMediaType:AVMediaTypeVideo preferredTrackID:(kCMPersistentTrackID_Invalid)];
                [videoTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, fileAsset.duration) ofTrack:mAVAssetTrack atTime:kCMTimeZero error:&error];
                NSLog(@"%@",error);
            } else if ([@"soun" isEqualToString:mAVAssetTrack.mediaType]) {
                
                NSError *error;
                AVMutableCompositionTrack *audioTrack = [mixComposition addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:(kCMPersistentTrackID_Invalid)];
                [audioTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, fileAsset.duration) ofTrack:mAVAssetTrack atTime:kCMTimeZero error:&error];
                NSLog(@"%@",error);
            }
        }
    }
    
    AVAssetExportSession *assetExport = [[AVAssetExportSession alloc]initWithAsset:mixComposition presetName:AVAssetExportPreset1280x720];
    assetExport.outputFileType = AVFileTypeMPEG4;
    assetExport.outputURL = [NSURL fileURLWithPath:filePath];
    assetExport.shouldOptimizeForNetworkUse = false;
    
    [assetExport exportAsynchronouslyWithCompletionHandler:^{
        [self.view showWait:NO isFullScreen:YES];
        NSString *videoPath;
        if (assetExport.status == AVAssetExportSessionStatusCompleted) {
        NSLog(@"转存成功:%@",filePath);
        videoPath = exportFilePath;
        } else {
        NSLog(@"转存失败");
        }
    }];

这样我们就可以对视频数据随意处理了!!!
demo下载地址

生活如此美好,今天就点到为止。。。

相关文章

  • ReplayKit2 屏幕录制

    ReplayKit2 屏幕录制 如果你需要录制苹果手机屏幕,ReplayKit肯定需要了解。本文主要介绍Repla...

  • iOS端使用replaykit录制屏幕的技术细节

    前面两篇文章:iOS端屏幕录制(replaykit)调研iOS端屏幕录制Replaykit项目实践已经对iOS端实...

  • ReplayKit屏幕录制

    简介 ReplayKit是iOS推出的功能,他为开发者同时提供了屏幕与用户声音的录制与分享;ReplayKit产生...

  • iOS ReplayKit屏幕录制

    公司项目最近新加入一个实现屏幕录制分享到的功能.了解到iOS9之后推出个ReplayKit框架,简直是对游戏录制的...

  • 基于ReplayKit实现屏幕录制

    前言 近期项目中需要完成一个实现屏幕录制(包含画面、麦克风、app内声音)功能,并压缩上传服务器,因此对iOS系统...

  • iOS ReplayKit屏幕录制探讨+Demo

    最近用到了屏幕录制这个功能,找了一下第三方和苹果自带的ReplayKit框架,分析了几种屏幕录制的效果,最后还在选...

  • ios webRTC 和 replaykit2屏幕共享

    iOS 出了replaykit2 后实现了系统屏幕录制功能,终于不在只能应用内录制了,在外部宣讲ppt,变的容易了...

  • iOS端屏幕录制(replaykit)调研

    最近项目中需要完成一个屏幕录制并推流的需求,对iOS端这个功能进行了调研,分享一下结果: 一、 概述 屏幕共享是将...

  • iOS系统录屏-ReplayKit框架

    ReplayKit框架说明 ReplayKit框架是苹果提供的录制视频的框架. 优点:录制流畅不卡顿 缺点: 不能...

  • iOS端屏幕录制Replaykit项目实践

    上一篇阐述了调研结果,而我们常用的应用场景就是录制屏幕内容,然后将内容分享给他人(直播或录播)。流程如下:1.被录...

网友评论

      本文标题:ReplayKit屏幕录制

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