2012-09-04 2 views

답변

0

그 self.movieWriter 가정하면 startRecording 및 startProcessing 호출하기 전에 콜백을 설정해야 GPUImageMovieWriter입니다 :

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