我试图从示例代码Grafika使用Live摄像头记录(用OpenGL)。 每一个东西的作品在我的Moto G的罚款,但我尝试在我的其他设备(Galaxy Tab的2 Cyanogendmod 11),这是似乎方法:signalEndofInputStream()不工作和编码器永远不会停止。 这是有办法将信号发送到MediaCodec以其他方式?
对不起,我英语不好。
我试图从示例代码Grafika使用Live摄像头记录(用OpenGL)。 每一个东西的作品在我的Moto G的罚款,但我尝试在我的其他设备(Galaxy Tab的2 Cyanogendmod 11),这是似乎方法: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测试之前禁用。 你可能运行到上氰未打补丁的编解码器。
解决方法是根本不会发送端的流信号。 相反,你只是停止编解码器。 有一些机会,在飞行缓冲将会丢失,你会丢帧,但对于现场录音,这可能并不重要。 (这是更多的视频编辑的一个问题。)