1. 程式人生 > >MediaPlayer和AudioTrack播放Audio的區別與聯系

MediaPlayer和AudioTrack播放Audio的區別與聯系

frame ont 支持 BE 很大的 解碼 參數 最大 fling

播放聲音可以用MediaPlayer和AudioTrack,兩者都提供了java API供應用開發者使用。雖然都可以播放聲音,但兩者還是有很大的區別的。
其中最大的區別是MediaPlayer可以播放多種格式的聲音文件,例如MP3,AAC,WAV,OGG,MIDI等。MediaPlayer會在framework層創建對應的音頻解碼器。
而AudioTrack只能播放已經解碼的PCM流,如果是文件的話只支持wav格式的音頻文件,因為wav格式的音頻文件大部分都是PCM流。AudioTrack不創建解碼器,所以只能播放不需要解碼的wav文件。

當然兩者之間還是有緊密的聯系的,MediaPlayer在framework層還是會創建AudioTrack,把解碼後的PCM數流傳遞給AudioTrack,AudioTrack再傳遞給AudioFlinger進行混音,然後才傳遞給硬件播放。
所以是MediaPlayer包含了AudioTRack。
通過查看API可以知道,MediaPlayer提供了5個setDataSource方法,分為三類,一類是傳遞播放文件的字符串路徑作為參數,例如直接取sd卡裏mp3文件的路徑,一類是傳遞播放文件的FileDescriptor文件描述符作為播放的id,例例如從db中查詢的音頻文件的id,就可以直接賦給MediaPlayer進行播放。還有一類是Uri類型的資源文件,用於播放content uri文件。

MediaPlayer和AudioTrack播放Audio的區別與聯系