2012-09-18 520 views
1

我正在使用Jelly Bean上的新MediaCodec API来解码h264 stream。 在开发者页面中使用代码片段,通过名称(取自media_codec.xml)实例化解码器,传递曲面并配置编解码器。Android MediaCodec dequeOutputBuffer始终返回-1

我面临的问题是,dequeOutputBuffer总是返回-1
尝试用负面超时无限期地等待,没有运气与此。
每当我得到-1时,使用getOutputBuffers刷新缓冲区。

请注意,使用自定义应用程序解析来自媒体源的数据并提供给解码器时,会看到相同的问题。

对任何输入上面会有帮助

+0

你可以请你发布你的代码。我很乐意进一步调试 – itsmeagain

+0

mediacodec使用示例:http://bigflake.com/mediacodec/ – fadden

回答

0

如果有人同时用MediaCodec开始一定要释放输出编解码器,你已处理完毕后,其他人在面临这样的问题(如我今天一样)他们:

mediaCodec.releaseOutputBuffer(index, render); 

否则编解码器很快就会用尽可用的缓冲区。

0

在获取输出缓冲区中的数据之前,可能需要输入几个输入缓冲区。

0

-1是INFO_TRY_AGAIN_LATER,表示输出缓冲区队列仍在准备中,您只需再次调用dequeueOutputBuffer即可。

尝试使用工作循环,类似于ExoPlayer一个循环中调用dequeueOutputBuffer

while (drainOutputBuffer(positionUs, elapsedRealtimeUs)) {} 
    if (feedInputBuffer(true)) { 
     while (feedInputBuffer(false)) {} 
    } 

其中drainOutputBuffer是调用dequeueOutputBuffer的方法。