最近项目需要拍摄小视频上传的需求,第一时间想到GPUImage,上网四处看了下,发现大部分都写的有种“你懂就能明白,你不懂怎么讲都不明白 的感觉”,因此自己写了个小Demo,记录下来,给大家一起学习,我先讲下GPUImageVideoCamera的大体流程,
打开相机->显示可以界面->相机加入滤镜->界面上加入滤镜->相机上添加录制视频的操作->这个操作上也加上滤镜的效果->拍摄完成->相机移除录制操作->滤镜移除录制操作->完成录制->保存到相册
- (void)viewDidLoad
{
[superviewDidLoad];
//初始化GPUImage的相机功能,同时设置高清画设置,以及使用前置摄像头
self.camera= [[GPUImageVideoCameraalloc]initWithSessionPreset:AVCaptureSessionPresetHighcameraPosition:AVCaptureDevicePositionFront];
//设置镜头的方向,这里设的正常竖立的
self.camera.outputImageOrientation=UIInterfaceOrientationPortrait;
//这两句是使用系统相机的设置,如何是否镜像之类
self.camera.horizontallyMirrorRearFacingCamera=NO;
self.camera.horizontallyMirrorFrontFacingCamera=YES;
//该句可防止允许声音通过的情况下,避免录制第一帧黑屏闪屏(====)
[self.cameraaddAudioInputsAndOutputs];
//创建摄像头预览视图,也可以在XiB拖个UIView,继承GPUImageView,也可以
self.cameraScreen= [[GPUImageViewalloc]initWithFrame:self.view.frame];
//添加到父视图上去
[self.viewaddSubview:self.cameraScreen];
//显示模式充满整个边框,也就是留黑边
self.cameraScreen.fillMode=kGPUImageFillModePreserveAspectRatioAndFill;
//栽掉多余的画画,具体效果自己比对下
self.cameraScreen.clipsToBounds=YES;
[self.cameraScreen.layersetMasksToBounds:YES];
//往相机里添加美颜的效果
[self.cameraaddTarget:self.meiYan];
//预览视图里加入美颜
[self.meiYanaddTarget:self.cameraScreen];
//相机开始预览啦
[self.camerastartCameraCapture];
//如果已经存在文件,AVAssetWriter会有异常,删除旧文件,*重点
unlink([MoviePathUTF8String]);
//初始化这个地址,不能UrlWithString的方法
NSURL*willSaveURL = [NSURLfileURLWithPath:MoviePath];
//初始化视频制作操作,传入视频保存的url,以及显示范围的大小
self.movieWriter= [[GPUImageMovieWriteralloc]initWithMovieURL:willSaveURLsize:self.view.bounds.size];
//自动控制声音与图像一致
self.movieWriter.encodingLiveVideo=YES;
self.movieWriter.shouldPassthroughAudio=YES;
self.movieWriter.hasAudioTrack=YES;
//把美颜效果也写入到这个操作
[self.meiYanaddTarget:self.movieWriter];
//把这个视频的操作放进相机里面
self.camera.audioEncodingTarget=self.movieWriter;
//放个开始录制和停止录制的按钮
[selfbeginAndStop_Btn];
}
/**开始录制*/
- (void)Start
{
[self.movieWriterstartRecording];
}
/**停止录制*/
- (void)Close
{
//移除相机里的录制
self.camera.audioEncodingTarget=nil;
//录制操作设为完成
[self.movieWriterfinishRecording];
//美颜效果里移除掉录制操作
[self.meiYanremoveTarget:self.movieWriter];
//将这个地址传出去
if(self.Complete)
{
self.Complete(MoviePath);
}
[selfdismissViewControllerAnimated:YEScompletion:nil];
}
这里是Demo,欢迎star,后面有空我加多功能上去
PS:别忘了,要加相机、麦克风、资料库的权限
网友评论