2012-09-18 85 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的方法。