2014-02-12 35 views
3

我嘗試使用GPUImage混合兩個視頻。其中一個(show.mov)包含綠色背景。
這是show.movgalaxy.mov
我下載的GPUImage最新版本,並改變SimpleVideoFileFilter例如:使用GPUImage與色度鍵混合兩個視頻

- (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]; 
} 

當我運行項目(器件或模擬器不管)我得到的只是空白視圖和後show.mov 14秒(長)我只看到混合視頻的最後一幀。使用示例中的writer創建磁盤上的文件,但無法打開此文件。
我使用7.0.3和XCode 5.0.2的iPhone 5
我錯過了什麼嗎?

+1

這是最有可能是由於兩個電影音源混合一個已知的bug:https://github.com/BradLarson/GPUImage/issues/1249 –

+0

謝謝布拉德。我需要關閉這個問題嗎? –

回答

1

感謝@BradLarson,他指向github issue,在那裏我找到了導致此問題的commit

GPUImageMovie.m我的評論在方法兩行:

[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; 
    //}); 
}]; 
+1

這很有趣。我其實正在找別的地方。當我有機會時,我會進一步研究。 –