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跳到