2

and実行後にGPUImageMovieWriterandをキャンセル/停止する方法はありますか?GPUImageMoviestartRecordingstartProcessing

4

3 に答える 3

1

最近、GPUImageMovieビデオ ファイルの処理をキャンセルできる新しいメソッドが に追加されました。

- (void)cancelProcessing;

これにより、ビデオの処理を効果的にキャンセルでき、それ以上のフレームは処理されなくなります。

の completionBlock がとにかく呼び出されることを考慮してください。GPUImageMovieWriterそのため、ブロックが成功した終了またはキャンセルによって呼び出されたかどうかを確認するために、何らかのフラグが必要です。

コード例を次に示します。

- (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];
}
于 2013-05-30T15:58:38.587 に答える
0

なぜ。録音のキャンセルオプションがあります。

[self.movieWriter cancelRecording];

何らかの方法で中断された場合、ビデオは保存されません。

于 2013-02-12T10:16:40.587 に答える
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;
}
于 2012-09-27T13:45:44.853 に答える