MediaCodec signalEndOfInputStream()错误

时间:2014-03-06 10:44:14

标签: android mediacodec mediamuxer

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

抱歉英语不好。

1 个答案:

答案 0 :(得分: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上遇到了未修补的编解码器。

解决方法是简单地从不发送流末尾信号。相反,你只需停止编解码器。飞机缓冲区有可能丢失,你会丢帧,但对于现场录音,这可能无关紧要。 (这更像是视频编辑的一个问题。)