2013-05-02 25 views
3

我試圖使用GPUImage框架的視頻濾鏡。我跟着Filtering and re-encoding a movie教程。它給我錯誤Unknown type name GPUImageRotationFilter。於是,我就一個簡單的過濾器適用於我的視頻文件GPUImage:將Filer應用於現有的視頻文件

這裏是我的代碼
viewController.h

@interface ViewController : UIViewController<GPUImageMovieWriterDelegate,GPUImageInput> 
{ 
GPUImageMovie *_movieFile; 
GPUImageOutput<GPUImageInput> *_sketchFilter; 
GPUImageMovieWriter *_movieWriter; 

} 
@property (nonatomic,retain) GPUImageMovie *movieFile; 
@property (nonatomic,retain) GPUImageOutput<GPUImageInput> *sketchFilter; 
@property (nonatomic,retain) GPUImageMovieWriter *movieWriter; 
@end 

viewController.m

NSURL *sampleURL = [[NSBundle mainBundle] URLForResource:@"sample_iPod" withExtension:@"m4v"]; 

self.movieFile = [[GPUImageMovie alloc] initWithURL:sampleURL]; 
self.sketchFilter = [[GPUImageSketchFilter alloc] init]; 
[self.movieFile addTarget:self.sketchFilter]; 


NSString *pathToMovie = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/Movie.m4v"]; 
unlink([pathToMovie UTF8String]); 
NSURL *movieURL = [NSURL fileURLWithPath:pathToMovie]; 

self.movieWriter = [[GPUImageMovieWriter alloc] initWithMovieURL:movieURL size:CGSizeMake(480.0, 640.0)]; 
[self.sketchFilter addTarget:self.movieWriter]; 

[self.movieWriter startRecording]; 
[self.movieFile startProcessing]; 

[self.movieWriter setCompletionBlock:^{ 

    [self.sketchFilter removeTarget:self.movieWriter]; 
    [self.movieWriter finishRecording]; 

}]; 

這其中還贈送我BAD_ACCESS

堆棧跟蹤

enter image description here

  1. 什麼蔭做錯了什麼?
  2. 任何可以解釋我如何將GPUImage過濾器應用到現有的視頻文件?
+0

你的代碼看起來不錯。你在哪裏得到EXC_BAD_ACCESS?你是如何定義movieFile,sketchFilter和movieWriter的? GPUImageRotationFilter是舊的過濾器,不再可用,您應該使用GPUImageTransformFilter來代替。 – 2013-05-02 10:07:19

+0

@TomasCamin我不知道我在哪裏得到糟糕的訪問。查看我更新的問題 – 2013-05-02 10:28:27

+0

您的項目是否使用ARC?您定位的是哪個iOS版本? – 2013-05-02 10:37:01

回答

0

首先將您的GPUImageFramework更新爲最新版本。你可以從here獲得新的。

仔細檢查moviewWriter的大小。它應該是CGSizeMake(640.0, 480.0)而不是CGSizeMake(480.0, 640.0)

或者您可以創建視頻資產,然後在大小參數中提供視頻資產的大小。

AVURLAsset *asset = [AVURLAsset URLAssetWithURLNSURL fileURLWithPath:pathToMovie] options:nil]; 
AVAssetTrack *videoAssetTrack = [[asset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0]; 
movieWriter = [[GPUImageMovieWriter alloc] initWithMovieURL:movieURL size:CGSizeMake(videoAssetTrack.naturalSize.width, videoAssetTrack.naturalSize.height)]; 

它爲我工作。

相關問題