2014-02-17 22 views
0

我想通過在GPUImageMovie和GPUImageMovieWriter之間添加一個過濾器來處理視頻。但是,在添加自定義過濾器之前,我遇到了麻煩。如何使用GPUImage框架保存電影?

這是我的測試代碼。

NSURL *sampleURL = [[NSBundle mainBundle] URLForResource:@"Documents/test" withExtension:@"mov"]; 
    movieFile = [[GPUImageMovie alloc] initWithURL:sampleURL]; 

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

    movieWriter = [[GPUImageMovieWriter alloc] initWithMovieURL:movieURL size:CGSizeMake(1280.0, 720.0)]; 

    [movieFile addTarget:movieWriter]; 

    [movieWriter startRecording]; 
    [movieFile startProcessing]; 

    [movieWriter setCompletionBlock:^{ 
     [movieFile removeTarget:movieWriter]; 
     [movieWriter finishRecording]; 
    }]; 

我喜歡這個

uncaught exception 'NSInvalidArgumentException', reason: '*** -[AVAssetReader initWithAsset:error:] invalid parameter not satisfying: asset != ((void*)0)' 

一個錯誤信息,並有一個名爲output.mov下文件創建一個文件夾大小0

我能做些什麼來解決這個問題簡單的任務?

回答

1

你的問題似乎是在這裏:

[pixellateFilter addTarget:movieWriter]; 

[movieFile addTarget:movieWriter]; 

要添加兩個過濾器和片源的電影作家。我認爲你的意思是這樣的:

[movieFile addTarget:pixellateFilter]; 
[pixellateFilter addTarget:movieWriter]; 
+0

哦!對不起。 ['movieFile addTarget:movieWriter];'行已被註釋掉,但我沒有刪除它。錯誤消息'NSInvalidArgumentException'是當前更新代碼的錯誤結果。 pixellateFilter是我的下一個目標。但是,我無法啓動當前的簡單示例。 –

1

這個錯誤意味着找不到樣本文件或者它的大小爲零。

我相信你正在將包文件與沙盒文件混合在一起。你的test.mov文件在哪裏?如果它在包中(即添加到項目文件中),那麼您應該使用:

NSURL *sampleURL = [[NSBundle mainBundle] URLForResource:@"test" withExtension:@"mov"]; 

即使它位於名爲Documents的文件夾下。 但是,如果它是在應用程序的沙盒文件,那麼你應該使用:

NSString *pathToSample = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/test.mov"]; 
NSURL *sampleURL = [NSURL fileURLWithPath:pathToSample];