1:首先理解了安裝,作者推薦動(dòng)態(tài)庫安裝,好處就是特么的,你看到的source都是輸入源,filters都是濾鏡過程,output就是出口啦
2:GPUImageMovie能接受
1)asset、2)AVPlayItem、3)URL路徑,,,如果你有特殊要求,可以使用GPUImageMovieComposition這個(gè)類,允許你輸入AVFoundation的多音頻輸入、畫質(zhì)動(dòng)作、剪切之后的AVMutableComposition,我就用的這個(gè)
3:GPUImageMovie沒有音頻播放,美拍不知道怎么整的,估計(jì)我覺得就是使用另外一些人提供的思路,對源碼侵入加入播放器
可以參考這個(gè):1):http://blog.csdn.net/personsky/article/details/52992919
2):https://gist.github.com/anonymous/5112961
畢竟音頻播放就是個(gè)形式,,要不然你有沒有美拍的源碼,對了美拍還真就是用GPUImage,用的真是6啊,,偶像
3:如果你沒有用AVMutableComposition修改視頻orientation,其濾鏡里面也有能修改方向的方法setInputRotation
用法如:[sepiaFilter setInputRotation:kGPUImageRotateRight atIndex:0];
4:檢查濾鏡過程使用:filter setFrameProcessingCompletionBlock:^(GPUImageOutput *output,CMTime frameTime)
比如你可以在GPUImageElement里面修改這個(gè)
5:注意檢查輸入濾鏡的pipeline過程有沒有問題
http://blog.csdn.net/u1031/article/details/48712163
這個(gè)大哥的幾張圖挺好的,看了之后對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:附一個(gè)濾鏡表在我國--->China????境內(nèi)的名字翻譯地址
http://blog.csdn.net/qq_27074387/article/details/52221938
9:在多視頻輸入里面,將self.movieFile.playAtActualSpeed=YES;
playAtActualSpeed都寫上,如果視頻不同步,有一個(gè)先完成了,則會(huì)有可能10s視頻變成了4s,有時(shí)前一段視頻播放正常,后一段就視頻畫面不動(dòng)了。
10:forceProcessingAtSize:CGSize
給其定義大小
11:GPUImage ?pipeline
1)、創(chuàng)建圖片處理類GPUImagePicture把圖片傳進(jìn)去stillImage
GPUImagePicture *staticPicture = [[GPUImagePicture alloc] initWithImage:stillImage smoothlyScaleOutput:YES];
2)、把多個(gè)濾鏡對象放到數(shù)組中
NSMutableArray *arrayTemp=[NSMutableArray array];
[arrayTempaddObject:RGBFilter];
3)、創(chuàng)建GPUImageFilterPipeline對象 初始化使用
initWithOrderedFilters:(NSArray*) filters input:(GPUImageOutput*)input output:(id )output;
這個(gè)方法;這個(gè)方法需要三個(gè)參數(shù):
filters:多個(gè)濾鏡的數(shù)組
input:被渲染的圖片(步驟1 的staticPicture 對象)
output:渲染后的圖片的容器(類型是view)
GPUImageFilterPipeline * filterPipeline = [[GPUImageFilterPipeline alloc] initWithOrderedFilters:arrayTempinput:staticPictureoutput:output];
4)、渲染圖片 使用processImage(此方法是GPUImagePicture類下的)和useNextFrameForImageCapture(此方法是GPUImageOutput下也就是單個(gè)濾鏡);
[staticPicture processImage];
[filteruseNextFrameForImageCapture];//這個(gè)filter 可以是RGBFiltertoonFilter等
5)、獲取圖片 使用currentFilteredFrame(此方法是GPUImageFilterPipeline類下的);
UIImage *img = [pipeline currentFilteredFrame];
6)、對于使用GPUImageUIElement沒有給contentView設(shè)置rect則會(huì)出現(xiàn):
: 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
同時(shí)breakpoint跳到
