在GPUImage中使用實時濾鏡最簡單的方法就是使用GPUImageVideoCamera這個類。通過添加濾鏡來實時顯示音視訊。

前面http://blog.csdn.net/Xoxo_x/article/details/57079331我們知道:
首先我們要了解,下面的内容:
GPUImageOutput(輸出)中含有如下方法
濾鏡GPUImageFilter繼承 GPUImageOutput(輸出),并遵守GPUImageInput(輸入)協定
這就意味着
– 重點:
所有的濾鏡既可以是GPUImageOutput對象,也是id對象。
更深入一點,這說明了濾鏡是可以疊加的!也就是傳說中的組合濾鏡。
GPUImageView有如下定義:
GPUImageVideoCamera有如下定義:
在濾鏡、camera、GPUImageView三者的關系中,可以有以下組合:
濾鏡 | GPUImageInput\GPUImageOutput |
---|---|
camera | GPUImageOutput |
GPUImageView | GPUImageInput |
組合方式 | 内容 |
---|---|
組合一 | [濾鏡 addTarget GPUImageView]; |
組合二 | [camera addTarget 濾鏡]; |
組合三 | [camera addTarget GPUImageView]; |
我們當我們想要使用濾鏡、相機、并顯示的時候,
【組合二 + 組合一 】
合并在一起才完美。
将相機的資料輸出到濾鏡、再将濾鏡的資料輸出到GPUImageView上。
這使得我們發現,其實濾鏡在處理過程中是屬于一個通道的地位
于是乎,代碼呼之欲出:
//相機
GPUImageVideoCamera* videoCamera = [[GPUImageVideoCamera alloc] initWithSessionPreset:AVCaptureSessionPreset640x480 cameraPosition:AVCaptureDevicePositionBack];
//濾鏡
GPUImageSepiaFilter *filter = [[GPUImageSepiaFilter alloc] init];
//顯示view
GPUImageView *filterView = (GPUImageView *)self.view;
//組合
[videoCamera addTarget:filter];
[filter addTarget:filterView];
//相機開始運作
[videoCamera startCameraCapture];
于是我們發現6行代碼就搞定了視訊采集并添加實時濾鏡
效果如下:
那麼組合濾鏡呢?
加代碼如下:
GPUImageLuminanceRangeFilter *filter1 = [[GPUImageLuminanceRangeFilter alloc]init];
//組合
[videoCamera addTarget:filter];
[filter addTarget:filter1];
[filter1 addTarget:filterView];
效果如下:
關于demo:一共8行代碼,需要自己撸一下吧!
//組合
[videoCamera addTarget:filter];
[filter addTarget:filter1];
[filter1 addTarget:filterView];
濾鏡組合調換順序會有驚喜!
最後附上所有代碼:
//相機
GPUImageVideoCamera* videoCamera = [[GPUImageVideoCamera alloc] initWithSessionPreset:AVCaptureSessionPreset640x480 cameraPosition:AVCaptureDevicePositionBack];
//濾鏡
GPUImageSepiaFilter *filter = [[GPUImageSepiaFilter alloc] init];
GPUImageLuminanceRangeFilter *filter1 = [[GPUImageLuminanceRangeFilter alloc]init];
//顯示view
GPUImageView *filterView = (GPUImageView *)self.view;
//組合
[videoCamera addTarget:filter];
[filter addTarget:filter1];
[filter1 addTarget:filterView];
//相機開始運作
[videoCamera startCameraCapture];
iOS GPUImage研究序一:内置濾鏡:
http://blog.csdn.net/Xoxo_x/article/details/57082804
iOS GPUImage研究二:捕獲圖像stillCamera寫入相冊
http://blog.csdn.net/Xoxo_x/article/details/57086446