2

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

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

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

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

4

4 回答 4

1

I had faced same problem. Incrementing presentationTimeUs parameter of queueInputBuffer() on each call solved the issue.

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

于 2018-05-17T13:36:10.457 回答
0

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

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

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

其中 drainOutputBuffer 是一个调用dequeueOutputBuffer.

于 2015-04-25T07:46:29.063 回答
0

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

于 2015-04-09T16:13:54.850 回答
0

如果其他人在使用MediaCodec时遇到这个问题(就像我今天所做的那样),请确保在完成它们后释放输出编解码器:

mediaCodec.releaseOutputBuffer(index, render); 

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

于 2013-10-15T08:56:49.807 回答