天天看點

iOS GPUImage研究三:視訊采集并添加實時濾鏡

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

iOS GPUImage研究三:視訊采集并添加實時濾鏡

前面http://blog.csdn.net/Xoxo_x/article/details/57079331我們知道:

首先我們要了解,下面的内容:

GPUImageOutput(輸出)中含有如下方法

iOS GPUImage研究三:視訊采集并添加實時濾鏡

濾鏡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行代碼就搞定了視訊采集并添加實時濾鏡

效果如下:

iOS GPUImage研究三:視訊采集并添加實時濾鏡

那麼組合濾鏡呢?

加代碼如下:

GPUImageLuminanceRangeFilter *filter1 = [[GPUImageLuminanceRangeFilter alloc]init];

//組合
    [videoCamera addTarget:filter];
    [filter addTarget:filter1];
    [filter1 addTarget:filterView];
           

效果如下:

iOS GPUImage研究三:視訊采集并添加實時濾鏡

關于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