2014-02-17 3 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

이 오류는 샘플 파일을 찾을 수 없거나 크기가 0임을 나타냅니다.

번들 파일을 샌드 박스 파일과 혼합하는 것 같습니다. test.mov 파일은 어디에 있습니까? 이 (즉, 프로젝트 파일에 추가) 번들에있는 경우에 당신은 사용해야합니다 : 그것은라는 폴더 문서에서 경우에도

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

합니다. 하지만 앱의 샌드 박스 파일에있는 경우 다음을 사용해야합니다.

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