在在iOS中给视频添加滤镜的方法示例中给视频添加滤镜的方法示例
「众所周知,视频可以 P」,今天我们来学习怎么给视频添加滤镜。
在 iOS 中,对视频进行图像处理一般有两种方式: GPUImage 和 AVFoundation 。
一、一、GPUImage
在之前的文章中,我们对 GPUImage 已经有了一定的了解。之前一般使用它对摄像头采集的图像数据进行处理,然而,它对
本地视频的处理也一样方便。
直接看代码:
// movie
NSString *path = [[NSBundle mainBundle] pathForResource:@"sample" ofType:@"mp4"];
NSURL *url = [NSURL fileURLWithPath:path];
GPUImageMovie *movie = [[GPUImageMovie alloc] initWithURL:url];
// filter
GPUImageSmoothToonFilter *filter = [[GPUImageSmoothToonFilter alloc] init];
// view
GPUImageView *imageView = [[GPUImageView alloc] initWithFrame:CGRectMake(0, 80, self.view.frame.size.width,
self.view.frame.size.width)];
[self.view addSubview:imageView];
// chain
[movie addTarget:filter];
[filter addTarget:imageView];
// processing
[movie startProcessing];
核心代码一共就几行。 GPUImageMovie 负责视频文件的读取, GPUImageSmoothToonFilter 负责滤镜效果处理,
GPUImageView 负责最终图像的展示。
通过滤镜链将三者串起来,然后调用 GPUImageMovie 的 startProcessing 方法开始处理。
虽然 GPUImage 在使用上简单,但是存在着 没有声音 、 在非主线程调用 UI 、 导出文件麻烦 、 无法进行播放控制 等诸多缺
点。
小结:GPUImage 虽然使用很方便,但是存在诸多缺点,不满足生产环境需要。
二、二、AVFoundation
1、、 AVPlayer 的使用的使用
首先来复习一下 AVPlayer 最简单的使用方式:
NSURL *url = [[NSBundle mainBundle] URLForResource:@"sample" withExtension:@"mp4"];
AVURLAsset *asset = [AVURLAsset assetWithURL:url];
AVPlayerItem *playerItem = [[AVPlayerItem alloc] initWithAsset:asset];
AVPlayer *player = [[AVPlayer alloc] initWithPlayerItem:playerItem];
AVPlayerLayer *playerLayer = [AVPlayerLayer playerLayerWithPlayer:player];
第一步先构建 AVPlayerItem ,然后通过 AVPlayerItem 创建 AVPlayer ,最后通过 AVPlayer 创建 AVPlayerLayer 。
AVPlayerLayer 是 CALayer 的子类,可以把它添加到任意的 Layer 上。当 AVPlayer 调用 play 方法时, AVPlayerLayer 上就
能将图像渲染出来。
AVPlayer 的使用方式十分简单。但是,按照上面的方式,最终只能在 AVPlayerLayer 上渲染出最原始的图像。如果我们希望
在播放的同时,对原始图像进行处理,则需要修改 AVPlayer 的渲染过程。
2、修改、修改 AVPlayer 的渲染过程的渲染过程
修改 AVPlayer 的渲染过程,要从 AVPlayerItem 下手,主要分为 四步 :
第一步:自定义第一步:自定义 AVVideoCompositing 类类
AVVideoCompositing 是一个协议,我们的自定义类要实现这个协议。在这个自定义类中,可以获取到每一帧的原始图像,进
评论0
最新资源