最近項目需要拍攝小視頻上傳的需求,第一時間想到GPUImage,上網(wǎng)四處看了下隆夯,發(fā)現(xiàn)大部分都寫的有種“你懂就能明白,你不懂怎么講都不明白 的感覺”别伏,因此自己寫了個小Demo蹄衷,記錄下來,給大家一起學習厘肮,我先講下GPUImageVideoCamera的大體流程愧口,
打開相機->顯示可以界面->相機加入濾鏡->界面上加入濾鏡->相機上添加錄制視頻的操作->這個操作上也加上濾鏡的效果->拍攝完成->相機移除錄制操作->濾鏡移除錄制操作->完成錄制->保存到相冊
- (void)viewDidLoad
{
[superviewDidLoad];
//初始化GPUImage的相機功能,同時設(shè)置高清畫設(shè)置类茂,以及使用前置攝像頭
self.camera= [[GPUImageVideoCameraalloc]initWithSessionPreset:AVCaptureSessionPresetHighcameraPosition:AVCaptureDevicePositionFront];
//設(shè)置鏡頭的方向耍属,這里設(shè)的正常豎立的
self.camera.outputImageOrientation=UIInterfaceOrientationPortrait;
//這兩句是使用系統(tǒng)相機的設(shè)置,如何是否鏡像之類
self.camera.horizontallyMirrorRearFacingCamera=NO;
self.camera.horizontallyMirrorFrontFacingCamera=YES;
//該句可防止允許聲音通過的情況下巩检,避免錄制第一幀黑屏閃屏(====)
[self.cameraaddAudioInputsAndOutputs];
//創(chuàng)建攝像頭預(yù)覽視圖厚骗,也可以在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];
//預(yù)覽視圖里加入美顏
[self.meiYanaddTarget:self.cameraScreen];
//相機開始預(yù)覽啦
[self.camerastartCameraCapture];
//如果已經(jīng)存在文件迟螺,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;
//錄制操作設(shè)為完成
[self.movieWriterfinishRecording];
//美顏效果里移除掉錄制操作
[self.meiYanremoveTarget:self.movieWriter];
//將這個地址傳出去
if(self.Complete)
{
self.Complete(MoviePath);
}
[selfdismissViewControllerAnimated:YEScompletion:nil];
}
這里是Demo,歡迎star浙垫,后面有空我加多功能上去
PS:別忘了刨仑,要加相機郑诺、麥克風、資料庫的權(quán)限