这篇文章粗略写下如何录制视频. 下面是一个小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 下载完成之后 选择显示包内容--找到你存储的路径 查看你录制的视频.