MediaCodec 多线程参考

MediaCodec multi-threaded reference

有两个线程访问同一个MediaCodec对象,它们可能需要同时运行。现在遇到一个问题:当两个线程同时运行ning时,代码如下:

try {
   mediaCodec.releaseOutputBuffer(encoderStatus, false);
} catch (IllegalStateException e) {
    e.printStackTrace();
}

如何处理这段代码?

由于两个线程引用了同一个mediaCodec对象,一个线程执行这段代码会影响另一个线程对mediaCodec的引用,另一个线程不能运行正常。如何解决?

我不确定从多线程访问 MediaCodec 是否明智,您需要小心同步,大量同步可能会拖延您的 (encoding/decoding) 进程。

如果你想在保存 MP4 文件的同时将它推送到 PC,我认为你应该做的是在一个线程中做你的 MediaCodec 事情,将输出结果放在一个线程安全队列中并处理异步在其他线程中的结果(可以通过使用 Handler、Executor 等来完成)

虽然 MediaCodec 在同步模式下多线程安全并不是必须的(例如,您可以有一个线程用于 dequeueInputBuffer(),填充管道的一端,第二个线程用于 dequeueOutputBuffer(),排空管道的另一端),我不知道有任何硬件解码器在您使用 2 个线程和 1 个 MediaCodec 实例时崩溃(并且我的应用程序已经在很多设备上进行了测试)。我觉得你可以走了。