GPUImageVideoCamera拍摄小视频+美颜滤镜

作者: 会飞的kim | 来源:发表于2017-08-17 11:18 被阅读44次

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

    相关文章

      网友评论

      本文标题:GPUImageVideoCamera拍摄小视频+美颜滤镜

      本文链接:https://www.haomeiwen.com/subject/pgeghxtx.html