我使用MediaCodec API
上的新Jelly Bean
来解码h264 stream
。
使用开发人员页面中的代码片段,按名称(取自media_codec.xml)实例化解码器,传递表面并配置编解码器。
我面临的问题是, dequeOutputBuffer始终返回-1 。
试着用一个负面的超时来等待,但没有运气
每当我得到-1时,使用getOutputBuffers刷新缓冲区。
请注意,当使用自定义应用程序解析媒体源中的数据并提供给解码器时,会出现同样的问题。
上述任何输入都会有所帮助
答案 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