使用GPUImage将两个视频与色度键混合

时间:2014-02-12 12:46:27

标签: ios objective-c gpuimage

我尝试使用GPUImage混合两个视频。其中一个(show.mov)包含绿色背景 这是show.movgalaxy.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 我错过了什么吗?

1 个答案:

答案 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;
    //});
}];