Ios 在摄像机上使用声音输入和过滤器时,GPUImageMovieWriter生成具有空帧的视频

Ios 在摄像机上使用声音输入和过滤器时,GPUImageMovieWriter生成具有空帧的视频,ios,video-capture,gpuimage,Ios,Video Capture,Gpuimage,我正在使用令人印象深刻的iOS GPUImage框架来过滤相机的传入流,然后保存它。完成后,我要关闭包含的视图,并打开另一个具有播放选项的视图,以查看刚刚拍摄的电影。问题是,当我什么都不做时,我可以完成录制,将文件保存到临时文件,然后同步地将其复制到相机胶片上。但是当我使用输入声音和过滤器时,GPUImageMovieWriter的速度似乎太慢了,在视频的开头或结尾产生了空帧 要设置过滤器和内容,并预览实时过滤图像,我需要执行以下操作: videoCamera=[[GPUImageVideoCa

我正在使用令人印象深刻的iOS GPUImage框架来过滤相机的传入流,然后保存它。完成后,我要关闭包含的视图,并打开另一个具有播放选项的视图,以查看刚刚拍摄的电影。问题是,当我什么都不做时,我可以完成录制,将文件保存到临时文件,然后同步地将其复制到相机胶片上。但是当我使用输入声音和过滤器时,GPUImageMovieWriter的速度似乎太慢了,在视频的开头或结尾产生了空帧

要设置过滤器和内容,并预览实时过滤图像,我需要执行以下操作:

videoCamera=[[GPUImageVideoCamera alloc] initWithSessionPreset:AVCaptureSessionPresetiFrame960x540 cameraPosition:AVCaptureDevicePositionBack];
movieWriter = [[GPUImageMovieWriter alloc] initWithMovieURL:outputURL size:CGSizeMake(self.view.frame.size.width, self.view.frame.size.height)];
movieWriter.encodingLiveVideo = YES;
movieWriter.shouldPassthroughAudio = YES;
videoCamera.audioEncodingTarget = movieWriter;

_filteredVideoView = [[GPUImageView alloc]initWithFrame:CGRectMake(0.0, 0.0, self.view.frame.size.width, self.view.frame.size.height)];
[self.view addSubview:_filteredVideoView];

blendFilter = [[GPUImageNormalBlendFilter alloc]init];
sourcePicture = [[GPUImagePicture alloc] initWithCGImage:[mc getImage]];
[sourcePicture processImage];

[blendFilter addTarget:_filteredVideoView];
[videoCamera blendFilter];
[videoCamera startCameraCapture];
所有变量如outputURL和mc都已正确设置。要开始实际录制,我将其称为:

[blendFilter addTarget:movieWriter];
[movieWriter startRecording];
要停止录制并保存到相机卷,我有以下代码:

videoCamera.audioEncodingTarget = nil;
[movieWriter finishRecording];
[blendFilter removeTarget:movieWriter];
UISaveVideoAtPathToSavedPhotosAlbum(outputPath, nil, NULL, NULL);
[self gotoNextView];
文件可能在帧通过之前开始录制,和/或在临时文件仍在写入时将文件复制到相机卷。我如何确保所有内容都在文件中,以及如何在完成后得到通知,以便移动到下一个视图

        [self.movieWriter finishRecordingWithCompletionHandler:handler]
将保存视频代码放入完成处理程序块将等待视频录制完成