1

我正在尝试使用示例代码 Grafika 中的 Live Camera Recording (With Opengl)。在我的 Moto G 上一切正常,但我在我的其他设备(带有 Cyanogendmod 11 的 Galaxy Tab 2)上尝试,似乎方法:signalEndofInputStream() 不起作用,编码器永远不会停止。有没有办法以其他方式将信号发送到 MediaCodec?

抱歉英语不好。

4

1 回答 1

1

你可以解决它。

如果您查看DecodeEditEncodeTest,您会看到一个名为WORK_AROUND_BUGS. 它是这样使用的:

if (WORK_AROUND_BUGS) {
    // Might drop a frame, but at least we won't crash mediaserver.
    try { Thread.sleep(500); } catch (InterruptedException ie) {}
    outputDone = true;
} else {
    encoder.signalEndOfInputStream();
}

这在 CTS 测试的开发过程中使用,当时特定于供应商的代码还不能很好地与流结束信号一起工作。添加它是为了让我们可以在供应商处理补丁时使用其他功能。该标志在 4.3 中发布的测试之前被禁用。您可能会在 Cyanogen 上遇到未打补丁的编解码器。

解决方法是永远不要发送流结束信号。相反,您只需停止编解码器。飞行中的缓冲区可能会丢失并且您会丢失一帧,但对于实时录制而言,这可能无关紧要。(对于视频编辑来说,这更像是一个问题。)

于 2014-03-06T18:33:02.313 回答