使用GPUImage 一些坑

1:首先理解了安装,作者推荐动态库安装,好处就是特么的,你看到的source都是输入源,filters都是滤镜过程,output就是出口啦

2:GPUImageMovie能接受

1)asset、2)AVPlayItem、3)URL路径,,,如果你有特殊要求,可以使用GPUImageMovieComposition这个类,允许你输入AVFoundation的多音频输入、画质动作、剪切之后的AVMutableComposition,我就用的这个

3:GPUImageMovie没有音频播放,美拍不知道怎么整的,估计我觉得就是使用另外一些人提供的思路,对源码侵入加入播放器

可以参考这个:1):http://blog.csdn.net/personsky/article/details/52992919

2):https://gist.github.com/anonymous/5112961

毕竟音频播放就是个形式,,要不然你有没有美拍的源码,对了美拍还真就是用GPUImage,用的真是6啊,,偶像

3:如果你没有用AVMutableComposition修改视频orientation,其滤镜里面也有能修改方向的方法setInputRotation

用法如:[sepiaFilter setInputRotation:kGPUImageRotateRight atIndex:0];

4:检查滤镜过程使用:filter setFrameProcessingCompletionBlock:^(GPUImageOutput *output,CMTime frameTime)

比如你可以在GPUImageElement里面修改这个

5:注意检查输入滤镜的pipeline过程有没有问题

http://blog.csdn.net/u1031/article/details/48712163

这个大哥的几张图挺好的,看了之后对addTarget有更多的理解

6:多视频输入我这还好,没有什么问题,多语音的话,你就考虑使用GPUImageMovieComposition的audiomix,但是没法控制播放了似乎,

7:NSString*pathToMovie = [self movieSavedPath];

unlink([pathToMovieUTF8String]);// If a file already exists, AVAssetWriter won't let you record new frames, so delete the old movie

可以使用快捷unlink视频,我特么不知道,仍然在使用filemanager,low逼格

8:附一个滤镜表在我国--->China境内的名字翻译地址

http://blog.csdn.net/qq_27074387/article/details/52221938

9:在多视频输入里面,将self.movieFile.playAtActualSpeed=YES;

playAtActualSpeed都写上,如果视频不同步,有一个先完成了,则会有可能10s视频变成了4s,有时前一段视频播放正常,后一段就视频画面不动了。

10:forceProcessingAtSize:CGSize

给其定义大小

11:GPUImage  pipeline

1)、创建图片处理类GPUImagePicture把图片传进去stillImage

GPUImagePicture *staticPicture = [[GPUImagePicture alloc] initWithImage:stillImage smoothlyScaleOutput:YES];

2)、把多个滤镜对象放到数组中

NSMutableArray *arrayTemp=[NSMutableArray array];

[arrayTempaddObject:RGBFilter];

3)、创建GPUImageFilterPipeline对象 初始化使用

initWithOrderedFilters:(NSArray*) filters input:(GPUImageOutput*)input output:(id )output;

这个方法;这个方法需要三个参数:

filters:多个滤镜的数组

input:被渲染的图片(步骤1 的staticPicture 对象)

output:渲染后的图片的容器(类型是view)

GPUImageFilterPipeline * filterPipeline = [[GPUImageFilterPipeline alloc] initWithOrderedFilters:arrayTempinput:staticPictureoutput:output];

4)、渲染图片 使用processImage(此方法是GPUImagePicture类下的)和useNextFrameForImageCapture(此方法是GPUImageOutput下也就是单个滤镜);

[staticPicture processImage];

[filteruseNextFrameForImageCapture];//这个filter 可以是RGBFiltertoonFilter等

5)、获取图片 使用currentFilteredFrame(此方法是GPUImageFilterPipeline类下的);

UIImage *img = [pipeline currentFilteredFrame];

6)、对于使用GPUImageUIElement没有给contentView设置rect则会出现:

: CGContextTranslateCTM: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable.

*** Assertion failure in -[GPUImageFramebuffer generateFramebuffer], address/Submodules/framework/Source/GPUImageFramebuffer.m:156

同时breakpoint跳到


使用GPUImage 一些坑_第1张图片
breakpoint

你可能感兴趣的:(使用GPUImage 一些坑)