我尝试使用GPUImage混合两个视频。其中一个(show.mov)包含绿色背景
这是show.mov和galaxy.mov
我下载了最新版本的GPUImage
并更改了SimpleVideoFileFilter
示例:
- (void)viewDidLoad
{
[super viewDidLoad];
_movie = [[GPUImageMovie alloc] initWithURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"galaxy" ofType:@"mov"]]];
_greenMovie = [[GPUImageMovie alloc] initWithURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"snow" ofType:@"mov"]]];
_movie.playAtActualSpeed = YES;
_greenMovie.playAtActualSpeed = YES;
_filter = [[GPUImageChromaKeyBlendFilter alloc] init];
[_greenMovie addTarget:_filter];
[_movie addTarget:_filter];
GPUImageView *filterView = (GPUImageView *)self.view;
[_filter addTarget:filterView];
[_greenMovie startProcessing];
[_movie startProcessing];
}
当我运行项目时(无论是在设备还是模拟器上)我只得到空白的白色视图,14秒后(show.mov的长度)我只看到混合视频的最后一帧。使用示例中的writer在磁盘上创建文件,但无法打开此文件 我正在使用带有7.0.3和XCode 5.0.2的iPhone 5 我错过了什么吗?
答案 0 :(得分:1)
感谢@BradLarson,他指出github issue,我发现commit导致了这个问题。
在GPUImageMovie.m
中,我在startProcessing
方法中注释了两行:
[inputAsset loadValuesAsynchronouslyForKeys:[NSArray arrayWithObject:@"tracks"] completionHandler: ^{
//runSynchronouslyOnVideoProcessingQueue(^{
NSError *error = nil;
AVKeyValueStatus tracksStatus = [inputAsset statusOfValueForKey:@"tracks" error:&error];
if (!tracksStatus == AVKeyValueStatusLoaded)
{
return;
}
blockSelf.asset = inputAsset;
[blockSelf processAsset];
blockSelf = nil;
//});
}];