【发布时间】:2015-01-20 00:47:49
【问题描述】:
应用的视频解码代码是典型的,就像MediaCodec document中的示例代码一样。没什么特别的。配置语句如下:
myMediaCodec.configure(myMediaFormat, mySurface, null, 0);
一切正常。但是,如果我将上面的代码更改为以下代码以将视频解码为缓冲区而不是表面:
myMediaCodec.configure(myMediaFormat, null, null, 0);
然后是以下代码:
int iOutputBufferIndex = myMediaCodec.dequeueOutputBuffer(myBufferInfo, 100000);
将始终返回 MediaCodec.INFO_TRY_AGAIN_LATER。更奇怪的是,任何后续调用 myMediaCodec.stop() 或 myMediaCodec.release() 都会挂起(即,该调用永远不会返回或生成异常)。 这发生在通用 (AGPTek) 平板电脑(Allwinner A31S,1.5GHz Cortex A7 四核)上。在模拟器和另一台平板电脑(Asus Memo Pad)上,一切正常。
我正在寻求任何提示来帮助解决这个问题。
【问题讨论】:
-
FWIW,您可以找到有关 bigflake 的一些其他示例和信息(例如 bigflake.com/mediacodec/#EncodeDecodeTest)。有问题的设备上运行的是哪个版本的 Android?
-
感谢您的提示。我一直在等待你的最终回应。 bigflake 是我检查的第一个地方,但不幸的是平板电脑运行在 Android 4.2.2 上,所以我无法运行测试。
-
4.3 之前的设备存在已知问题。如果这是一个编解码器错误,我不会感到惊讶。
-
基本问题是 Android 4.2 中唯一的 MediaCodec“测试”是 Youtube 和 Netflix 等应用程序。如果他们不这样做,代码路径就不会被执行,并且没有人注意到它们是否被破坏。但是,如果解码到 SurfaceView 有效,那么我希望解码到 SurfaceTexture 很有可能工作。它与解码到缓冲区时的失败方式相同吗?
-
这听起来有点熟悉……也许是stackoverflow.com/questions/23643307/…?请注意,该问题也适用于 4.1/4.2 设备。
标签: android android-mediacodec