有两个线程可以访问同一个MediaCodec
对象,它们可能需要同时运行。现在我遇到了一个问题:当两个线程同时运行时,代码如下:
try {
mediaCodec.releaseOutputBuffer(encoderStatus, false);
} catch (IllegalStateException e) {
e.printStackTrace();
}
如何处理此代码?
因为两个线程引用相同的mediaCodec对象,一个线程执行此代码将影响另一个线程对mediaCodec
的引用,而另一个线程无法正常运行。怎么解决?
答案 0 :(得分:0)
我不确定从多个线程是否明智地访问MediaCodec
,您需要注意同步,并且许多同步可能会阻碍您的(编码/解码)过程。
如果要在保存MP4文件的同时将其推送到PC,我认为您应该做的是在一个线程中执行MediaCodec
内容,将输出结果放在线程安全队列中并处理结果在其他线程中异步(可以使用Handler,Executor等完成)
答案 1 :(得分:0)
尽管MediaCodec在同步模式下不是多线程安全的必备软件(例如,您可以为dequeueInputBuffer()
创建一个线程,填充管道的一端,以及{{1的第二个线程,排除管道的另一端),我不知道当你使用2个Threads和1个MediaCodec实例时崩溃的任何硬件解码器(我的应用程序已经在很多设备上测试过)。我觉得你很高兴。