以下代码偶尔会生成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所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)