我們接著上一篇廢話篙悯,這回保證有干貨靶剑!
打開(kāi)上次的工程浅浮。找到ViewController.h
引用GPUImage頭文件
#import "GPUImage.h"
-
添加三個(gè)成員
@interface ViewController : UIViewController { GPUImageVideoCamera *_videoCamera; GPUImageOutput<GPUImageInput> *_filter; GPUImageMovieWriter *_movieWriter; }
顧名思義旭寿,
GPUImageVideoCamera
用來(lái)創(chuàng)建攝像頭實(shí)例;
GPUImageOutput<GPUImageInput>
用來(lái)處理濾鏡溅话,這里沒(méi)有用Filter來(lái)命名類名因?yàn)镚PUImage的接口做的非常通用晓锻,濾鏡只是圖像輸出的一種情況;
GPUImageMovieWriter
當(dāng)然就是寫文件的類了飞几,把攝像頭捕獲的幀數(shù)據(jù)寫入文件砚哆。
-
在ViewController.m->viewDidLoad末尾添加以下代碼
// 1. Initialize camera _videoCamera = [[GPUImageVideoCamera alloc] initWithSessionPreset:AVCaptureSessionPresetiFrame960x540 cameraPosition:AVCaptureDevicePositionBack]; _videoCamera.outputImageOrientation = UIInterfaceOrientationPortrait; _videoCamera.horizontallyMirrorFrontFacingCamera = NO; _videoCamera.horizontallyMirrorRearFacingCamera = NO; // 2. Add camera view to current view GPUImageView *filterView = (GPUImageView *)self.view; [_videoCamera addTarget:filterView]; [_videoCamera startCameraCapture];
960x540和官方demo里的640x480不一樣,960的是寬屏屑墨,經(jīng)我多次嘗試以后定下的尺寸躁锁,兼顧寬屏,性能和畫面質(zhì)量卵史。
- 是不是很簡(jiǎn)單战转?運(yùn)行一下?我猜以躯,app崩潰了槐秧。是不是報(bào)這個(gè)錯(cuò)?
-[UIView nextAvailableTextureIndex]: unrecognized selector sent to instance
-
好了忧设,不開(kāi)玩笑刁标。那是因?yàn)槲覀冞€沒(méi)有設(shè)置ViewController的view是什么類,默認(rèn)為UIView當(dāng)然找不到GPUImageView類提供的方法址晕。
到storyboard中選中controller里的view
-
好了膀懈,再運(yùn)行,完美谨垃!
至此……
誒不行不行启搂,這個(gè)效果我用AVFoundation也可以做啊刘陶!
那么加個(gè)濾鏡吧狐血,不然真的浪費(fèi)了這么強(qiáng)大的庫(kù)。
-
在之前的第二段代碼(看注釋)上方加入以下代碼
// 3. Set filter _filter = [[GPUImageSepiaFilter alloc] init]; [_videoCamera addTarget:_filter];
第二段代碼中有一句要改掉
[_videoCamera addTarget:filterView];
改成
[_filter addTarget:filterView];
沒(méi)錯(cuò)易核,相機(jī)加到濾鏡實(shí)例上再加到view上面。-
看看效果
這篇先寫到這里浪默,接下來(lái)還有很多事情等著我們?nèi)ヒ徊揭徊酵晟颇抵保?qǐng)耐心等待缀匕。下一篇中我們要實(shí)現(xiàn)按鍵錄像并進(jìn)行保存。