轉載自http://blog.csdn.net/xiashaohua/article/details/53638780
1.1.1 播放代碼
MediaPlayer類是android framework提供的多媒體類,可以用來播放音頻、視頻和流媒體,MediaPlayer包含了Audio和Video的播放功能。
其基本的方法和功能簡介如下:
MediaPlayer 構造方法
create 創建一個要播放的多媒體
getCurrentPosition 得到當前播放位置
getDuration 得到文件的時間
getVideoHeight 得到視頻的高度
getVideoWidth 得到視頻的寬度
isLooping 是否循環播放
isPlaying 是否正在播放
pause 暫停
prepare 準備(同步)
prepareAsync 準備(異步)
release 釋放MediaPlayer對象
reset 重置MediaPlayer對象
seekTo 指定播放的位置(以毫秒爲單位的時間)
setAudioStreamType 設置流媒體的類型
setDataSource 設置多媒體數據來源
setDisplay 設置用SurfaceHolder來顯示多媒體
setLooping 設置是否循環播放
setOnButteringUpdateListener 網絡流媒體的緩衝監聽
setOnErrorListener 設置錯誤信息監聽
setOnVideoSizeChangedListener 視頻尺寸監聽
setScreenOnWhilePlaying 設置是否使用SurfaceHolder來保持屏幕顯示
setVolume 設置音量
start 開始播放
stop 停止播放
除開界面的相關佈局和控件,聲音播放的代碼流程主要如下,
mPlayer = new MediaPlayer();
try {
mPlayer.setDataSource(mMediaItem.getPath());
mPlayer.setOnCompletionListener(this);
mPlayer.setOnErrorListener(mErrorListener);
mPlayer.prepare();
mPlayer.start();
}
它主要使用了MediaPlayer類來完成播放功能,對於該類的介紹請見後續章節。
MediaPlayer各個狀態間關係如圖:
Idle狀態爲空閒,Initialized狀態爲初始化,Idle狀態加載了音頻資源後進入Initialized狀態,之後調用prepare()方法就可以進入Prepared狀態。在Prepared狀態調用start()方法便可播放音樂。在代碼編寫的時候,api如何調用,狀態如何轉換,請參見下面的狀態流程圖,避免在不正確的狀態調用不合適的api,引起各種異常。
播放流程的功能塊圖如下,
播放過程中每個步驟的函數調用流程如下,
Init:
setDataSource:
prepareAsync:
在prepare裏面,當MediaExtractor解析文件後會產生一個音頻流和一個視頻流(可能還有字幕流),對應一個MediaSource的數據結構。
Start: