2

我正在使用 GPUImage 框架连续录制多个视频,并使用 GPUImageVideoCamera 和 GPUImageMovieWriter 实时启用各种过滤器。

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

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

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

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

有什么办法可以解决这个问题。

-- 我查看了 Apple 的 RosyWriter 示例,他们的应用程序以几乎恒定的 30 fps 运行几乎相似但流畅。我尝试使用 RosyWriter 代码(在删除添加紫色效果的代码之后)保存所需的视频,同时向用户显示 GPUImageVideoCamera 的过滤视图,但徒劳无功。当应用未修改的 rosywriter 代码时,仅记录两个视频,其余视频失败。我还尝试在 rosywriter 代码中传递来自 GPUImageVideoCamera 的捕获会话,但只获取带有黑框且没有音频的视频。

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

4

1 回答 1

0

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

正如您所指出的,发生此问题是因为 setAudioEncodingTarget 方法在内部调用 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。

于 2015-03-26T07:34:45.270 回答