2013-11-20 108 views
1

在Android中播放包含AAC(在MP4容器中)的內存緩衝區是否合理?我無法將此緩衝區寫入磁盤......它必須從內存中播放。在Android上播放AAC緩衝區

看來,我唯一的選擇就是解碼手動PCM和使用AudioTrack由於Android不公開播放非PCM內存緩衝區任何API。 OpenSL ES支持內存來源,但Android並未實現此功能。

+0

有沒有任何種類的由Android的Java提供的內存映射文件設施?我對這個平臺不太熟悉,而且我正在尋找類似的東西。如果存在這樣的類,並且它返回一個FileDescriptor對象,那麼您應該可以將它傳遞給MediaPlayer.setDataSource()。 –

+0

不是我所知道的。您可以使用管道來獲取文件描述符(可能要求使用本機代碼),但文件描述符將不可查找,因此無法爲播放器正常工作。 – Fixee

回答

0

我能找到的唯一方法是(如我的問題所示)手動解碼AAC。 Android上有幾個軟件包可以做到這一點,或許ffmpeg是經過最充分測試和知名的。 ffmpeg可以被蒸餾成AAC解碼器,因此內存需求非常小(儘管將解碼器引入已經具有一個本地解碼器的設備是令人沮喪的)。

一旦AAC解碼爲PCM,它可以在Java播放(AudioTrack),或天然(OpenSL ES)。本機選項的播放延遲顯着較低,如果這對你來說很重要。

相關問題