天天看点

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