Android MediaCodec dequeOutputBuffer始终返回-1
问题描述:
我正在使用Jelly Bean
上的新MediaCodec API
来解码h264 stream
。 在开发者页面中使用代码片段,通过名称(取自media_codec.xml)实例化解码器,传递曲面并配置编解码器。Android MediaCodec dequeOutputBuffer始终返回-1
我面临的问题是,dequeOutputBuffer总是返回-1。
尝试用负面超时无限期地等待,没有运气与此。
每当我得到-1时,使用getOutputBuffers刷新缓冲区。
请注意,使用自定义应用程序解析来自媒体源的数据并提供给解码器时,会看到相同的问题。
对任何输入上面会有帮助
答
如果有人同时用MediaCodec开始一定要释放输出编解码器,你已处理完毕后,其他人在面临这样的问题(如我今天一样)他们:
mediaCodec.releaseOutputBuffer(index, render);
否则编解码器很快就会用尽可用的缓冲区。
答
在获取输出缓冲区中的数据之前,可能需要输入几个输入缓冲区。
答
-1是INFO_TRY_AGAIN_LATER
,表示输出缓冲区队列仍在准备中,您只需再次调用dequeueOutputBuffer
即可。
尝试使用工作循环,类似于ExoPlayer一个循环中调用dequeueOutputBuffer
:
while (drainOutputBuffer(positionUs, elapsedRealtimeUs)) {} if (feedInputBuffer(true)) { while (feedInputBuffer(false)) {} }
其中drainOutputBuffer是调用dequeueOutputBuffer
的方法。
你可以请你发布你的代码。我很乐意进一步调试 – itsmeagain
mediacodec使用示例:http://bigflake.com/mediacodec/ – fadden