我尝试在我的设备上运行 ExoPlayer 演示应用程序,但我遇到了这个问题:
outputIndex = codec.dequeueOutputBuffer(outputBufferInfo, 0);
总是返回 -1。
我查看了 stackoverflow 上的所有问题和答案,但没有任何帮助。我在 csd-0 和 MediaFormat 中的 csd-1 缓冲区中设置了 sps 和 pps 标头(我尝试了使用启动代码和没有),将其设置在一个缓冲区 csd-0 中,使用 MediaCodec.BUFFER_FLAG_CODEC_CONFIG 调用 queueInputBuffer,将超时更改为 10000 甚至为-1。一切都适用于其他设备,但不是我需要的地方。解码器 - OMX.amlogic.avc.decoder.awesome
编辑 如果我将超时设置为 -1,那么什么也不会发生,我等待 dequeueOutputBuffer,但 logcat 显示:
Warning message AMessage(what = 'omx ', target = 5) = {
int32_t type = 0
void *node = 0x51
int32_t event = 2130706433
int32_t data1 = 0
int32_t data2 = 0
} unhandled in root state.
编辑 2:我发现,amlogic 解码器的输出缓冲区大小小于输入。但在始终显示视频的其他设备上,情况正好相反:输出缓冲区大小更大。是不是重要?
也许有人有同样的问题?它是编解码器规范吗?我还需要尝试什么?