我正在嘗試解決Android OpenSLES中的以下問題。Android OpenSLES緩衝區飢餓問題
的OpenSLES規範說以下內容:
http://www.khronos.org/registry/sles/specs/OpenSL_ES_Specification_1.0.1.pdf - 8.12
當播放機在SL_PLAYSTATE_PLAYING狀態,這是 由SLPlayItf接口控制[見8.32],加入 緩衝區將隱式開始播放。在 由於隊列中緩衝區不足而導致飢餓的情況下,停止播放音頻數據。 播放器保持在SL_PLAYSTATE_PLAYING狀態。在排隊等待 附加緩衝器後,音頻數據的播放將恢復。請注意,排隊緩衝區的飢餓導致音頻數據流中出現可聽差距。在播放器未處於播放狀態的情況下, 添加緩衝區不會開始音頻播放。
唉,一旦我們到Android:
http://mobilepearls.com/labs/native-android-api/ndk/docs/opensles/index.html - 解碼音頻爲PCM
取決於平臺的實現,解碼可能需要不能被閒置 資源。因此,不建議 由於不能提供足夠數量的空PCM緩衝器而使解碼器不起作用,例如,通過從Android簡單緩衝區隊列中返回 而不排入另一個空的緩衝區。解碼器飢餓的 的結果是未指定的;執行時可能會選擇 或者丟棄解碼後的PCM數據,暫停解碼過程,否則會在嚴重的情況下終止解碼器。
這個非規範行爲已經完全停止了我的項目的進度,我失去了如何最好地解決它。將整個文件解碼到內存或磁盤上的pcm不是一種選擇,我真的需要這是一個流媒體解決方案。對此的任何幫助將大規模讚賞