android – 如何防止MediaCodec.dequeueInputBuffer生成的java.lang.IllegalStateException

android – 如何防止MediaCodec.dequeueInputBuffer生成的java.lang.IllegalStateException,第1张

概述以下代码偶尔会生成 java.lang.IllegalStateException: int iInputBufIndex = _mcDecoder.dequeueInputBuffer(TIMEOUT_USEC); 其中_mcDecoder是MediaCodec的一个实例.解码流是H.264视频.代码在大多数情况下运行良好. 有没有办法主动检查MediaCodec的状态以避免此异常? 堆栈跟踪: 以下代码偶尔会生成 java.lang.IllegalStateException:

int iinputBufIndex = _mcDecoder.dequeueinputBuffer(TIMEOUT_USEC);

其中_mcDecoder是MediaCodec的一个实例.解码流是H.264视频.代码在大多数情况下运行良好.
有没有办法主动检查MediaCodec的状态以避免此异常?

堆栈跟踪:

java.lang.IllegalStateException    at androID.media.MediaCodec.dequeueinputBuffer(Native Method)at net.mydomain.androID.MYnameSPACE.MYCLASS.MyMethod0(UnkNown Source)at net.mydomain.androID.MYnameSPACE.MYCLASS.ProcessH264(UnkNown Source)at net.mydomain.androID.MYnameSPACE.MYCLASS.MyMethod1(UnkNown Source)at net.mydomain.androID.MYnameSPACE.MYCLASS.MyMethod2(UnkNown Source)at net.mydomain.androID.MYnameSPACE.MYCLASS.MyMethod3(UnkNown Source)at net.mydomain.androID.MYnameSPACE.MYCLASS.access(UnkNown Source)at net.mydomain.androID.MYnameSPACE.MYCLASS.run(UnkNown Source)at java.lang.Thread.run(Thread.java:841)
解决方法 如果编解码器内部返回错误,则抛出此异常.这可以是例如由错误的比特流引起(虽然解码器大多应该处理我认为)或者可能是错误地传递数据包. (尝试通过现代Qualcomm芯片组上的MediaCodec解码隔行扫描的H.264视频也会导致对象进入错误状态,例如 https://code.google.com/p/android/issues/detail?id=72336 – 这一点特别讨厌,因为它在尝试关闭编解码器时会崩溃整个过程. )

除了注意异常之外,没有办法知道发生了这种情况(除了读取系统日志之外). (也许这是一个很好的补充作为一个新的API?)我不太确定它是否能继续尝试提供解码器,如果它能够恢复,或者它是一个失败的原因和整个解码器应该关闭.

总结

以上是内存溢出为你收集整理的android – 如何防止MediaCodec.dequeueInputBuffer生成的java.lang.IllegalStateException全部内容,希望文章能够帮你解决android – 如何防止MediaCodec.dequeueInputBuffer生成的java.lang.IllegalStateException所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1127663.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-30
下一篇 2022-05-30

发表评论

登录后才能评论

评论列表(0条)

保存