简介:GPUImage 关于视频录制主要类就是GPUImageVideoCamera,本文就视频录制添加滤镜保存等都做一个简单说明.
大致思路:
- 初始化GPUImageVideoCamera并添加音频输入输入设置
- 添加展示ImageView 和 滤镜设置(如:GPUImageVignetteFilter)
- 初始化GPUImageMovieWriter数据写入方法
- 录制结束移除GPUImageMovieWriter并调用其finishRecording
- 保存视频
对应简易流程图如下
具体实现如下
1.和照片添加滤镜类似,videoCamera添加滤镜,滤镜添加展示视图imageView.
_videoCamera = [[GPUImageVideoCamera alloc] initWithSessionPreset:AVCaptureSessionPreset640x480 cameraPosition:AVCaptureDevicePositionBack];
_videoCamera.outputImageOrientation = [UIApplication sharedApplication].statusBarOrientation;
_filter = [[GPUImageSepiaFilter alloc] init];
_filterView = [[GPUImageView alloc] initWithFrame:self.view.bounds];
self.view = _filterView;
[_videoCamera addTarget:_filter];
[_filter addTarget:_filterView];
[_videoCamera startCameraCapture];
注:
addAudioInputsAndOutputs方法可消除第一帧黑屏问题.
2.开始录制
unlink([pathToMovie UTF8String]); //删除已存在文件
_movieWriter = [[GPUImageMovieWriter alloc] initWithMovieURL:movieURL size:CGSizeMake(480.0, 640.0)];
_movieWriter.encodingLiveVideo = YES;
[_filter addTarget:_movieWriter];
_videoCamera.audioEncodingTarget = _movieWriter;
[_movieWriter startRecording];
3.结束录制
[_filter removeTarget:_movieWriter];
_videoCamera.audioEncodingTarget = nil;
[_movieWriter finishRecording];
ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
if (UIVideoAtPathIsCompatibleWithSavedPhotosAlbum(pathToMovie))
{
[library writeVideoAtPathToSavedPhotosAlbum:movieURL completionBlock:^(NSURL *assetURL, NSError *error)
{
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"保存失败");
} else {
NSLog(@"保存成功");
}
});
}];
}
注:其中保存视频到相册中在IOS10以上 PHAssetChangeRequest相关方法.