使用GPUImageMovieWriter录制带有音频的视频,在录制的开始和结束时没有急动?

时间:2013-02-13 17:54:32

标签: ios6 video-capture audio-recording gpuimage

我正在使用GPUImage框架以紧密的间隔一个接一个地录制多个视频,并使用GPUImageVideoCamera和GPUImageMovieWriter实时启用各种过滤器。

当我录制视频时,视频以混蛋开始(冻结半秒)并以混蛋结束。我知道这背后的原因是我将movieWriter对象传递给VideoCamera的audioEncodingtarget的语句。

所以在我的情况下,当我一个接一个地录制多个视频(使用不同的GPUImageMovieWriter对象)时,视频预览视图会在每次录制的开始和结束时冻结。

如果删除音频编码目标语句,条件会显着改善,但我当然不会收到音频。

目前我在录制时使用AVAudioRecorder来保存音轨,但我相信这不是一个理想的工作。

有没有办法解决这个问题。

- 我看了Apple的RosyWriter示例,他们的应用程序工作几乎相似,但几乎不变30 fps。我尝试使用RosyWriter代码(在删除添加紫色效果的代码之后)保存所需的视频,同时向用户显示GPUImageVideoCamera的过滤视图但是徒劳无功。当应用未修改的rosywriter代码时,只记录两个视频并且休息视频失败。我还试图从GPUImageVideoCamera传递红宝书代码捕获会话,但只获取黑框和没有音频的视频。

请帮助我如何在没有这种急动的情况下录制带有音频的GPUImage过滤视频。提前致谢

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,这是我的解决方法。

正如您所指出的,出现此问题是因为s​​etAudioEncodingTarget方法在内部调用addAudioInputsAndOutputs来设置音频输入/输出到捕获会话。

为了避免这个问题,我为VideoCamera创建了justSetAudioEncodingTarget方法,如下所示, (在GPUImageVideoCamera.m上)

// just set
-(void)justSetAudioEncodingTarget:(GPUImageMovieWriter*)newValue {

if( newValue == nil ) {
    return;
}
addedAudioInputsDueToEncodingTarget = YES;

[super setAudioEncodingTarget:newValue];
}

以下步骤是我的方案,我检查了它顺利工作。

创建VideoCamera后,调用VideoCamera的addAudioInputsAndOutputs。 在开始录制之前这不对。 :)

通过我上面的justSetAudioEncodingTarget将MovieWriter设置为VideoCamera。