2012-09-04 71 views

回答

0

假設self.movi​​eWriter是GPUImageMovieWriter, 你需要調用的startRecording和startProcessing之前設置的回調:

[self.movieWriter setCompletionBlock:^{ 
    [self finishFilter]; 
}]; 

然後你可以停止圖像處理:

[self.movieWriter endProcessing]; 

而且回調是:

- (void)finishFilter { 
    //remove all targets from your filter chain calling "removeAllTargets" 
    //then: 
    [self.movieWriter finishRecording]; 
    self.movieWriter.completionBlock = nil; 
    self.movieWriter = nil; 
} 
+0

如果我不想爲「完成」嗎?當我說「取消」時,我的意思是取消;我不想保存部分電影。 –

0

爲什麼。有一個取消錄音選項。

[self.movieWriter cancelRecording]; 

如果視頻以任何方式中斷,則不會保存視頻。

1

最近,一種新的方法添加到GPUImageMovie允許取消視頻文件的處理:

- (void)cancelProcessing; 

這將讓你有效地消除視頻的處理,並沒有更多的幀會處理。

考慮到你的GPUImageMovieWriter的completionBlock將被調用,所以你應該有一些標誌來檢查該塊是否被要求成功完成或取消。

下面是一些示例代碼:

- (void)processVideo 
{ 
    _wasCancelled = NO; 

    self.imageMovie = [self createImageMovie]; 
    self.filter = [self createFilter]; 
    [imageMovie addTarget:filter] 
    self.movieWriter = [self createMovieWriter]; 

    [self.movieWriter startRecording]; 
    [self.imageMovie startProcessing]; 

    [self.movieWriter setCompletionBlock:^{ 
     [self.filter removeTarget:movieWriter]; 
     [self.movieWriter finishRecording]; 

     if (!_wasCancelled) { 
      // Do stuff with the video 
     } 
    }]; 
} 

- (void)cancelVideoProcessing 
{ 
    _wasCancelled = YES; 
    [self.imageMovie cancelProcessing]; 
}