Android MediaCodec dequeOutputBuffer始终返回-1

时间:2012-09-18 13:15:19

标签: android android-4.2-jelly-bean deque decoder mediacodec

我使用MediaCodec API上的新Jelly Bean来解码h264 stream。 使用开发人员页面中的代码片段,按名称(取自media_codec.xml)实例化解码器,传递表面并配置编解码器。

我面临的问题是, dequeOutputBuffer始终返回-1
试着用一个负面的超时来等待,但没有运气 每当我得到-1时,使用getOutputBuffers刷新缓冲区。

请注意,当使用自定义应用程序解析媒体源中的数据并提供给解码器时,会出现同样的问题。

上述任何输入都会有所帮助

4 个答案:

答案 0 :(得分:0)

如果其他人在使用 MediaCodec 开始时遇到此问题(就像我今天所做的那样),请确保在完成后解除输出编解码器:< / p>

mediaCodec.releaseOutputBuffer(index, render); 

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

-1是INFO_TRY_AGAIN_LATER,这意味着输出缓冲区队列仍在准备中,您只需要再次调用dequeueOutputBuffer

尝试在类似于ExoPlayer的循环中使用调用dequeueOutputBuffer的工作循环:

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

其中drainOutputBuffer是一个调用dequeueOutputBuffer

的方法

答案 3 :(得分:0)

我遇到了同样的问题。每次调用增加presentationTimeUs queueInputBuffer()参数都解决了这个问题。

例如, codec.queueInputBuffer(inputBufferIndex, 0, data.size, time, 0) time += 66 //incrementing by 1 works too