MediaCodec多线程参考

时间:2016-09-13 09:56:54

标签: java android concurrency mediacodec

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

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

如何处理此代码?

因为两个线程引用相同的mediaCodec对象,一个线程执行此代码将影响另一个线程对mediaCodec的引用,而另一个线程无法正常运行。怎么解决?

2 个答案:

答案 0 :(得分:0)

我不确定从多个线程是否明智地访问MediaCodec,您需要注意同步,并且许多同步可能会阻碍您的(编码/解码)过程。

如果要在保存MP4文件的同时将其推送到PC,我认为您应该做的是在一个线程中执行MediaCodec内容,将输出结果放在线程安全队列中并处理结果在其他线程中异步(可以使用Handler,Executor等完成)

答案 1 :(得分:0)

尽管MediaCodec在同步模式下不是多线程安全的必备软件(例如,您可以为dequeueInputBuffer()创建一个线程,填充管道的一端,以及{{1的第二个线程,排除管道的另一端),我不知道当你使用2个Threads和1个MediaCodec实例时崩溃的任何硬件解码器(我的应用程序已经在很多设备上测试过)。我觉得你很高兴。