使用GPUImage 一些坑

作者: aKerdi | 来源:发表于2016-12-23 16:50 被阅读365次

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


    breakpoint

    相关文章

      网友评论

        本文标题:使用GPUImage 一些坑

        本文链接:https://www.haomeiwen.com/subject/nebkvttx.html