我正在尝试使用示例代码Grafika中的Live Camera Recording(With Opengl)。一切都可以在Moto G上正常运行,但我尝试在其他设备(带有Cyanogendmod 11的Galaxy Tab 2)上运行,似乎该方法:signalEndofInputStream()无法正常工作,并且编码器永不停止。
有没有其他方法可以将信号发送到MediaCodec?
对不起,英语不好。
最佳答案
您可以解决它。
如果查看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上遇到未打补丁的编解码器。
解决方法是根本不发送流结束信号。相反,您只是停止编解码器。机上缓冲区有可能会丢失,并且您会丢帧,但是对于实时录制而言,这可能并不重要。 (对于视频编辑,这更是一个问题。)