这篇文章粗略写下如何录制视频. 下面是一个小demo;

#import "ViewController.h"

#import <AVFoundation/AVFoundation.h>

 

@interface ViewController ()<AVCaptureFileOutputRecordingDelegate>

// 画面

@property (nonatomic, strong) AVCaptureDeviceInput *inputVideo;

// 声音

@property (nonatomic, strong) AVCaptureDeviceInput *inputAudio;

// 加工厂

@property (nonatomic, strong) AVCaptureSession *session;

// 导出

@property (nonatomic, strong) AVCaptureMovieFileOutput *output;

 

@end

 

@implementation ViewController

 

- (void)viewDidLoad {

    [super viewDidLoad];

    // 视频录制:  录入   声音 和 画面

    //           然后添加到加工厂(进行加工)

    //           导出               ---------> 视频

}

 

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event

{

    // 1.创建视频录制的对象,并且初始化

    // 1.1画面

    AVCaptureDevice *videoDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];

    self.inputVideo = [[AVCaptureDeviceInput alloc] initWithDevice:videoDevice error:nil];

    

    // 1.2声音

    AVCaptureDevice *AudioDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeAudio];

    self.inputAudio = [[AVCaptureDeviceInput alloc] initWithDevice:AudioDevice error:nil];

    

    // 1.3加工厂

    self.session = [[AVCaptureSession alloc] init];

    

    // 1.4导出

    self.output = [[AVCaptureMovieFileOutput alloc] init];

    

    // 2.添加到加工厂(会话)

    if ([self.session canAddInput:self.inputAudio]) {

        [self.session addInput:self.inputAudio];

    }

    if ([self.session canAddInput:self.inputVideo]) {

        [self.session addInput:self.inputVideo];

    }

    if ([self.session canAddOutput:self.output]) {

        [self.session addOutput:self.output];

    }

    

    // 添加预览layer层

    AVCaptureVideoPreviewLayer *preLayer = [AVCaptureVideoPreviewLayer layerWithSession:self.session];

    

    preLayer.frame = self.view.bounds;

//    [self.view.layer addSublayer:preLayer];

    [self.view.layer insertSublayer:preLayer atIndex:0];

    

    

    // 3.开启加工厂

    [self.session startRunning];

}

- (IBAction)btnClicked:(id)sender {

    

    if ([self.output isRecording]) {

        // 暂停录制

        [self.output stopRecording];

    } else {

        // 获取沙盒路径,用于储存

        NSString *path = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"录制的视频.MP4"];

        // 开启录制

        [self.output startRecordingToOutputFileURL:[NSURL fileURLWithPath:path] recordingDelegate:self];

    

    }

}

//视频开始录制会调用这个方法

- (void)captureOutput:(AVCaptureFileOutput *)captureOutput didStartRecordingToOutputFileAtURL:(NSURL *)fileURL fromConnections:(NSArray *)connections

{

    NSLog(@"start");

}

 //视频录制结束会调用下面的方法

- (void)captureOutput:(AVCaptureFileOutput *)captureOutput didFinishRecordingToOutputFileAtURL:(NSURL *)outputFileURL fromConnections:(NSArray *)connections error:(NSError *)error

{

    NSLog(@"finish");

}

//如果你想用真机导出你录制的视频

你可以选择 模拟器-->HardDevice-->Manager Devices-->installed App  选中你创建的App --点击下面的 设置图标  选择Download Container  下载完成之后 选择显示包内容--找到你存储的路径   查看你录制的视频.