iOS技术收藏iOS 开发每天分享优质文章移动开发

GPUImageVideoCamera拍摄小视频+美颜滤镜

2017-08-17  本文已影响44人  会飞的kim

最近项目需要拍摄小视频上传的需求,第一时间想到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:别忘了,要加相机、麦克风、资料库的权限

上一篇下一篇

猜你喜欢

热点阅读