我正在尝试通过在GPUImageMovie和GPUImageMovieWriter之间添加过滤器来处理视频。但是,在添加自定义过滤器之前,我遇到了麻烦。
这是我的测试代码。
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)'
,并且在Documents文件夹下创建了一个名为output.mov的文件,其大小为0。
我该怎么做才能解决这个简单的任务?
答案 0 :(得分:1)
您的问题似乎在这里:
[pixellateFilter addTarget:movieWriter];
[movieFile addTarget:movieWriter];
您要将过滤器和电影源都添加到电影编辑器中。我想你的意思是:
[movieFile addTarget:pixellateFilter];
[pixellateFilter addTarget:movieWriter];
答案 1 :(得分:1)
此错误表示未找到样本文件或其大小为零。
我相信您正在将捆绑文件与沙盒文件混合在一起。你的test.mov文件在哪里?如果它在捆绑中(即添加到项目文件中),那么您应该使用:
NSURL *sampleURL = [[NSBundle mainBundle] URLForResource:@"test" withExtension:@"mov"];
即使它位于名为Documents的文件夹下。 但如果它位于应用程序的沙箱文件中,那么您应该使用:
NSString *pathToSample = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/test.mov"];
NSURL *sampleURL = [NSURL fileURLWithPath:pathToSample];