GPUImage - MovieWriter,“setCompletionBlock”之后暂时没有任何反应

时间:2014-02-04 15:26:48

标签: ios gpuimage

现在已经挣扎了好几天了。我正在使用过滤器处理视频,它可以保存视频。但是,在保存之后,更新UI需要很长时间。在UI更新之前的很长一段时间里,我可以在iTunes中看到视频(带有iTunes文件共享)。

我创建这样的视图,并将其添加到我的视图控制器。这只是用户可以预览视频并选择过滤器。

-(GPUImageView*)playClipWithClip:(MYClip*)clip
{
    _clip = clip;
    _filterView = [[GPUImageView alloc] initWithFrame:CGRectMake(0, 0, 568, 320)];

    _movieFile = [[GPUImageMovie alloc] initWithURL:[self urlForCurrentClip]];
    _movieFile.runBenchmark = NO;
    _movieFile.playAtActualSpeed = YES;
    _movieFile.shouldRepeat = YES;

    [self changeFilter];
    return _filterView;
}

当用户想保存视频时,我有这个方法:

-(void)saveClipWithFilter
{
    [_movieFile cancelProcessing];

    _movieFile.runBenchmark = YES;
    _movieFile.playAtActualSpeed = NO;
    _movieFile.shouldRepeat = NO;

    NSString *movieName = [self fileNameForGeneratedClip];
    NSString *generatedMovieNameWithPath = [NSString stringWithFormat:@"Documents/%@",movieName];

    NSString *pathToMovie = [NSHomeDirectory() stringByAppendingPathComponent:generatedMovieNameWithPath];
    unlink([pathToMovie UTF8String]);
    NSURL *movieURL = [NSURL fileURLWithPath:pathToMovie];

    _movieWriter = [[GPUImageMovieWriter alloc] initWithMovieURL:movieURL size:CGSizeMake(568, 320.0)];
    [_filter addTarget:_movieWriter];

    _movieWriter.shouldPassthroughAudio = NO;
    [_movieFile enableSynchronizedEncodingUsingMovieWriter:_movieWriter];

    [_movieWriter startRecording];
    [_movieFile startProcessing];

    __weak typeof(self) weakSelf = self;
    [_movieWriter setCompletionBlock:^{
        NSLog(@"**************************** DONE ****************************");
        [weakSelf.filter removeTarget:weakSelf.movieWriter];
        [weakSelf.movieWriter finishRecording];

        [weakSelf exitVideoEditingModeAndSave];
    }];
}

调用我的方法[weakSelf exitVideoEditingModeAndSave];。然后该方法又调用委托(我的视图控制器)。

问题是,在调用我的委托并且我的NSLog显示后,视图更新大约需要10秒钟。我知道该文件已准备好并已保存。

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

这是一个线程问题,在您的完成块中,在更新任何UI元素之前调度到主线程

相关问题