播放器MediaPlayer解讀

轉載請著名出處 :  http://blog.csdn.net/shulianghan/article/details/38487967java


一. MediaPlayer 狀態機 介紹

Android MediaPlayer 狀態即圖例 :
編程



1. Idle (閒置) 狀態 和 End (結束) 狀態

MediaPlayer 對象聲明週期 : 從 Idle 到 End 狀態就是 MediaPlayer 整個生命週期;服務器

-- 生命週期開始 : 進入 Idle (閒置) 狀態;網絡

-- 生命週期結束 : 進入 End (結束) 狀態;框架


Idle 和 End 狀態轉換異步

-- 進入 Idle 狀態 : MediaPlayer 剛被建立 new MediaPlayer() 或者 調用了 reset() 方法以後, 進入 Idle (閒置) 狀態;ide

-- 進入 End 狀態 : 在 Idle 狀態調用 release() 方法後, 會進入 End (結束) 狀態;oop


兩種進入 Idle 狀態方法的差異 : 在 Idle 狀態沒法調用 getCurrentPosition(), getDuration(), getVideoHeight(), getVideoWidth(), setAudioStreamtype(int), setLooping(boolean), setVolume(float, float), pause(), start(), stop(), seekTo(), prepare(), prepareAsync() 方法都是錯誤的;編碼

-- new MediaPlayer() 進入 Idle 狀態 : 此時 MediaPlayer 內部引擎 和 狀態都沒有改變, 調用上面的方法以後, 將 沒法調用 OnErrorListener.onError() 方法;url

-- reset() 進入 Idle 狀態 :  此時若是調用上面的方法, 內部的引擎就會 回調 OnErrorListener.onError() 方法;


建立 和 重載 MediaPlayer 區別 :

-- 建立 MediaPlayer : 經過 new MediaPlayer() 建立的對象處於 Idle (閒置) 狀態;

-- 重載 MediaPlayer : 經過 create() 方法建立的 MediaPlayer 對象處於 Prepare (準備) 狀態;


End (結束) 狀態解析

-- release() 方法做用 : 該方法會釋放 播放引擎 中與 MediaPlayer 相關的資源;

-- 釋放惟一性資源 : 有些資源如 硬件加速組件 單態組件等都是惟一性的資源, 若是不釋放掉, 以後的 Mediaplayer 都沒法正常運行;

-- 沒法進行狀態轉換 : End 狀態表明 MediaPlayer 生命週期結束, 在此狀態不能轉換成其它狀態了;



2. Error (錯誤) 狀態


Error 狀態轉換 : 當 MediaPlayer 出現一些錯誤如 格式錯誤, 分辨率太高等緣由, 播放器引擎 就會調用 OnErrorListener.onError()方法;

-- 進入 Error 狀態 : 客戶端調用 OnErrorListener.onError() 方法, 會進入 Error 狀態;

-- 離開 Error 狀態 : 若是想要使用進入 Error 狀態的 MediaPlayer, 可使用 reset() 方法進入 Idle 狀態;


註冊監聽 : 編程註冊一個 OnErrorListener 監聽器, 用於獲取 播放器引擎 內部發生的錯誤;

-- 註冊方法 : 調用 MediaPlayer.setOnErrorListener(OnErrorListener) 方法, 註冊 OnErrorListener;


關於一些異常拋出 : 在不合法的地方調用方法, 會拋出 IllegalStateException 異常;



3. Initalized (初始化) 狀態


Initialized 狀態轉換 : 在 Idle 狀態調用 setDataSource() 方法, MediaPlayer 會遷移到 Initialized 狀態;

-- 注意 : 只能是在 Idle 狀態調用該方法, 若是在其它狀態調用該方法, 會報出 IllegalStateException 異常;



4. Prepared (就緒) 和 Preparing (準備中) 狀態


Prepared (就緒) 狀態轉換

-- 從 Initialized 狀態遷移 : 在 Initialized 狀態調用 prepare() 方法, 若是方法成功返回, MediaPlayer 就會進入 Prepared 狀態;

-- 從 Preparing 狀態遷移 : 在 Preparing 狀態調用 OnPrepareListener.onPrepared() 方法遷移到 Prepared 狀態;


Preparing (準備中) 狀態 : Initialized 狀態調用 prepareAsync() 方法進入 Preparing 狀態;

-- 該狀態執行的操做 : 在 Preparing 狀態時, 播放器引擎會繼續完成準備工做, 同步版本返回 或者 異步版本準備工做完成就會調用  OnPrepareListener.onPrepared() 方法進入 Prepared 狀態;


拋出異常 : 只有在 Initialized 方法中才能調用 prepare() 和 prepareAsync()方法, 在其它狀態調用會報出 IllegalStateException 遺產;


Prepared 狀態 MediaPlayer 可進行的操做 : 在這個狀態 MediaPlayer 能夠進行 音頻視頻屬性 循環屬性等操做;



5. Started (開始) 狀態


Started 狀態遷移 : 在 Prepared 狀態調用 start() 方法, MediaPlayer 即遷移到了 Started 狀態;

-- 判斷 MediaPlayer 是否在 Started 狀態 : 在任何狀態下調用 isPlaying() 方法, 能夠判斷 MediaPlayer 是否在 Started 狀態;

-- 跟蹤緩衝狀態 : 在 Started 狀態, 調用 OnBufferingUpdateListener.onBufferingUpdate() 方法, 能夠獲取視頻音頻流的緩衝狀態;



6. Paused (暫停) 狀態


Paused (暫停) 狀態遷移 : 在 Started 狀態調用 pause() 方法, MediaPlayer 會進入 Paused 狀態;

-- 狀態遷移時間 : Started 狀態轉換爲 Paused 狀態須要必定時間, 這個過程是異步的, 過一段時間以後 isPlaying() 狀態纔會改變; 

-- 回到 Started 狀態 : 在 Paused 狀態調用 start() 方法, 會進入 Started 狀態;



7. Stopped (中止) 狀態


Stopped 狀態遷移 : 在 Prepared, Started, Paused, PlaybackCompleted 狀態下 調用 stop() 方法, MediaPlayer 會遷移到 Stopped 狀態;



8. 播放位置調整


seekTo() 方法說明 : 該方法異步, 調用後 播放器引擎還須要進行其它操做, 跳轉才能完成;

-- 進行的操做 : 播放器引擎會回調 OnSeekComplete.onSeekComplete()方法, 該方法經過 setOnSeekCompleteListener() 方法註冊;

-- seekTo() 方法調用狀態 : 該方法能夠在 Prepared, Paused, PlaybackCompleted 狀態進行調用;

-- 獲取播放位置 : 調用 getCurrentPosition() 方法, 能夠獲取當前播放的位置, 能夠幫助播放器更新進度條;



9. PlaybackCompleted (播放完畢) 狀態

 

循環模式開啓 : 若是以前使用了 setLooping() 開啓了循環模式, 播放完畢以後 MediaPlayer 會從新進入 Started 狀態;


PlaybackCompleted 狀態遷移 : 若是沒有設置循環模式, 那麼播放完畢以後會調用 OnCompletion.onCompletion() 回調方法, MediaPlayer 會進入 PlaybackCompleted 狀態;

-- OnCompletion註冊 : 調用 MediaPlayer.setOnCompletionListener() 註冊該監聽器;

-- 進入 Started 狀態方法 : 在 PlaybackCompleted 狀態時, 調用 satrt() 方法能夠進入 Started 狀態;



二. MediaPlayer 接口 和 常量



1. MediaPlayer 接口



(1) 緩衝相關接口


接口介紹

-- 接口名稱 : MediaPlayer.OnBufferingUpdateListener;

-- 接口做用 : 定義一個回調接口, 該接口的做用是在流媒體緩衝狀態發生改變的時候, 標明該狀態;


接口方法介紹

-- 接口方法 :

[java] view plain copy
  1. public abstract void onBufferingUpdate (MediaPlayer mp, int percent)  


-- 方法做用 : 該方法在 MediaPlayer 經過 HTTP 下載緩衝視頻流的時候回調, 用以改變視頻緩衝狀態;

-- 方法參數 : mpMediaPlayer 實體對象; percent 已經緩衝了的 或者 播放了的 媒體流百分比;



(2) 播放完畢相關接口


接口介紹

-- 接口名稱 : MediaPlayer.OnCompletionListener;

-- 接口做用 : 在接口中定義了 流媒體 播放完畢後回調的方法;


接口方法介紹

-- 接口方法 :

[java] view plain copy
  1. public abstract void onCompletion (MediaPlayer mp)  


-- 方法做用 : 在 媒體流 播放完畢以後回調;



(3) 錯誤相關接口


接口介紹

-- 接口名稱 : MediaPlayer.OnErrorListener;

-- 接口做用 : 在該接口中定義回調方法, 在異步操做中出現錯誤時會回調該方法, 其它狀況下出現錯誤時直接拋出異常;


接口方法介紹

-- 接口方法 :

[java] view plain copy
  1. public abstract boolean onError (MediaPlayer mp, int what, int extra)  


-- 方法做用 : 異步操做中出現錯誤時回調該方法;

-- 參數介紹

--- a. MediaPlayer mp : MediaPlayer 實體類;

--- b. int what : 出現的錯誤類型, 如 

MEDIA_ERROR_UNKONWN(位置錯誤) 或者

MEDIA_ERROR_SERVER_DIED(服務器錯誤) ;


--- c. int extra : 針對與具體錯誤的附加碼, 用於定位錯誤更詳細信息, 例如 

MEDIA_ERROR_IO(本地文件或網絡相關錯誤), 

MEDIA_ERROR_MALFORMAD (比特流不符合相關的編碼標準和文件規範), 

MEDIA_ERROR_UNSUPPORTED(框架不支持該功能), 

MEDIA_ERROR_TIME_OUT(一些操做超時);


-- 方法執行結果 : 成功處理錯誤返回 true, 處理失敗返回 false, 若是沒有設定針對該方法的監聽器, 直接調用 OnCompletionListener 監聽器;



(4) 信息相關接口


接口介紹

-- 接口名稱 : MediaPlayer.OnInfoListener;

-- 接口做用 : 該接口定義了一個回調方法, 該方法在媒體播放時出現信息或者警告時回調該方法;


接口方法介紹

-- 接口方法 :

[java] view plain copy
  1. public abstract boolean onInfo (MediaPlayer mp, int what, int extra)  


-- 方法做用 : 出現了信息或者警告的時候回調;

-- 參數介紹

--- a. MediaPlayer mp : MediaPlayer 實體對象;


--- b. int what : 信息或者警告的類型, 如

MEDIA_INFO_UNKNOWN(未知的信息), 

MEDIA_INFO_VEDIO_TRACK_LAGGING(視頻過於複雜解碼太慢), 

MEDIA_INFO_VEDIO_RENDERING_START(開始渲染第一幀), 

MEDIA_INFO_BUFFRING_START(暫停播放開始緩衝更多數據), 

MEDIA_INFO_BUFFERING_END(緩衝了足夠的數據從新開始播放), 

MEDIA_INFO_BAD_INTERLEAVING(錯誤交叉), 

MEDIA_INFO_NOT_SEEKABLE(媒體不可以搜索), 

MEDIA_INFO_METADATA_UPDATE(一組新的元數據用), 

MEDIA_INFO_UNSUPPORTED_SUBTITLE(不支持字幕), 

MEDIA_INFO_SUBTITLE_TIMED_OUT(讀取字幕使用時間過長);


--- c. int extra : 信息或者警告的類型,


-- 返回值 : 若是處理了信息就會返回 true, 沒有處理返回false, 若是沒有註冊該監聽, 就會忽略該信息;



(5) 準備播放相關接口


接口介紹

-- 接口名稱 : MediaPlayer.OnPreparedListener;

-- 接口做用 : 該接口中定義一個回調方法, 該方法在進入 Prepared 狀態 並 開始播放的時候回調;


接口方法介紹

-- 接口方法 :

[java] view plain copy
  1. public abstract void onPrepared (MediaPlayer mp)  


-- 方法做用 : 該方法在進入 Prepared 狀態 並 開始播放的時候回調;

-- 參數介紹 : MediaPlayer mp , MediaPlayer 實體對象;



(6) 查找操做相關接口


接口介紹

-- 接口名稱 : MediaPlayer.OnSeekCompleteListener;

-- 接口做用 : 該接口定義了一個回調方法, 該方法在查找操做完成後回調;


接口方法介紹

-- 接口方法 :

[java] view plain copy
  1. public abstract void onSeekComplete (MediaPlayer mp)  

-- 方法做用 : 查找操做完成的時候回調該方法;



(7) 視頻大小相關接口


接口介紹

-- 接口名稱 : MediaPlayer.OnVideSizeChangedListener;

-- 接口做用 : 該接口中定義了一個回調方法, 當視頻大小首次被知曉或者更新的時候回調該方法;


接口方法介紹

-- 接口方法 :

[java] view plain copy
  1. public abstract void onVideoSizeChanged (MediaPlayer mp, int width, int height)  


-- 方法做用 : 視頻大小更新時回調該方法, 若是沒有視頻返回0;

-- 參數解析 : int width 視頻的寬度, int height 視頻的高度;



三. MediaPlayer 經常使用方法解析



1. MediaPlayer 構造方法


方法的注意點 : 使用 create() 方法建立的 MediaPlayer, 直接指定了 媒體資源, 不須要再進行 調用 prepare() 方法;



(1) 默認構造方法


方法名稱 public MediaPlayer ();

[java] view plain copy
  1. public MediaPlayer ()  


方法簡介 : 默認構造方法, 建立的 MediaPlayer 自動進入 Idle 狀態, 不一樣於 create() 方法, 建立的 MediaPlayer 自動進入 Prepared 狀態;

-- 兩種方法比較 : 由於 create() 方法建立的時候就指定了數據源, 不用在 Idle 狀態設置數據, 並調用 prepare() 方法了;



(2) 指定uri的構造方法


方法名稱public static MediaPlayer create (Context context, Uri uri);

[java] view plain copy
  1. public static MediaPlayer create (Context context, Uri uri)  


方法簡介 : 根據給定的 Uri 建立一個 MediaPlayer 對象, 若是建立成功, 其內部會自動調用 prepare() 方法, 不一樣再本身調用一次, MediaPlayer 使用完畢以後要使用 release()方法, 不然會出錯;


返回值 : 若是建立成功返回 MediaPlayer 對象, 若是建立失敗返回 null;


參數介紹

-- Context context : Android 的上下文對象;

-- Uri uri : 數據源的 Uri; 



(3) 指定資源 id


方法名稱public static MediaPlayer create (Context context, int resid);

[java] view plain copy
  1. public static MediaPlayer create (Context context, int resid)  


方法簡介 : 經過給定的 raw 資源 id, 建立 MediaPlayer 對象;


參數介紹 : int resid 設置播放源文件, 這裏指的是 raw 資源 id;



(4) 指定 id 和 SurfaceView


方法名稱public static MediaPlayer create (Context context, Uri uri, SurfaceHolder holder);

[java] view plain copy
  1. public static MediaPlayer create (Context context, Uri uri, SurfaceHolder holder)  


方法簡介 : 建立一個 MediaPlayer, 指定 MediaPlayer 數據源 Uri 和 SurfaceView 對象;


參數介紹

-- Context context : Android 的上下文對象;

-- Uri uri : 指定的網絡媒體的數據源;

-- SurfaceHolder holder : 指定要播放視頻的 SurfaceHolder ;



2. 獲取播放器相關屬性方法



(1) 獲取當前位置


方法名稱public int getCurrentPosition ();


方法解析 : 獲取當前播放器播放的位置, 返回值是 已經播放了的毫秒數;


方法的有效狀態和無效狀態

-- 有效狀態 : Idle, Initialized, Prepared, Started, Paused, Stopped, PlaybackCompleted, 在以上狀態調用該方法不會改變 MediaPlayer 狀態;

-- 無效狀態 : Error 狀態, 在 Error 狀態調用該方法, 會進入 Error 狀態中;



(2) 獲取文件時長


方法名稱public int getDuration ();


方法解析 : 獲取文件的播放時長 (毫秒), 若是沒有可用的時長, 就會返回 -1;


方法的有效狀態和無效狀態 : 設置數據源以後的非錯誤狀態 才能夠獲取播放文件時長;

-- 有效狀態 : PreparedStartedPausedStoppedPlaybackCompleted, 在以上狀態調用該方法不會改變 MediaPlayer 狀態;

-- 無效狀態 : Idle, InitializedError 狀態, 在 Error 狀態調用該方法, 會進入 Error 狀態中;



(3) 獲取視頻高度 寬度


方法名稱 public int getVideoHeight (), public int getVideoWidth ();


方法解析 : 返回視頻的高度 或者 寬度, 若是沒有資源, 那麼會返回0, 當視頻大小改變的時候可使用 MediaPlayer.OnVideoSizeChangedListener 監聽其監聽該事件;


 

方法的有效狀態和無效狀態 : 除 Error 之外的全部狀態;

-- 有效狀態 : IdleInitialized, PreparedStartedPausedStoppedPlaybackCompleted, 在以上狀態調用該方法不會改變 MediaPlayer 狀態;

-- 無效狀態 : Error 狀態, 在 Error 狀態調用該方法, 會進入 Error 狀態中;



(4) 檢查 MediaPlayer 是否在循環


方法名稱public boolean isLooping ();


方法解析 : 檢查 MediaPlayer 是否在循環播放, 若是是 返回 true, 不是的話 返回 false;


方法的有效狀態和無效狀態 : 在任何狀態都有效, 包括在 Error 狀態的時候;



(5) 檢查 MediaPlayer 是否在播放


方法名稱public boolean isPlaying ();


方法解析 : 檢查 MediaPlayer 是否正在播放;


方法的有效狀態和無效狀態 : 除 Error 之外的全部狀態, 均可以查看 MediaPlayer 是否在播放;

-- 有效狀態 : IdleInitialized, PreparedStartedPausedStoppedPlaybackCompleted, 在以上狀態調用該方法不會改變 MediaPlayer 狀態;

-- 無效狀態 : Error 狀態, 在 Error 狀態調用該方法, 會進入 Error 狀態, 拋出 IllegalStateException;



3. 狀態遷移相關方法



(1) 暫停播放


方法名稱public void pause ();


方法解析 : 暫停播放, 若是想要恢復播放的話, 調用 start() 方法;


方法的有效狀態和無效狀態 : 只有在 Started 和 Paused 狀態有效, Started 狀態調用該方法進入 Paused 狀態, Paused 狀態調用該方法不起做用;

-- 有效狀態 : StartedPaused, 在以上狀態調用該方法不會改變 MediaPlayer 狀態;

-- 無效狀態 : Error , IdleInitialized, PreparedStoppedPlaybackCompleted 狀態, 在 Error 狀態調用該方法, 會進入 Error 狀態, 拋出 IllegalStateException;



(2) 同步準備播放


方法名稱public void prepare ();


方法解析 : 這是個同步方法, 設置完數據源播放載體以後調用該方法 或者 prepareAsync() 方法, 才能進行正常播放, 若是方法調用成功, 才能正常播放;


方法的有效狀態和無效狀態 : 只有在 Initialized 和 Stopped 狀態中會

-- 有效狀態 : Initialized, Stopped, 在以上狀態調用該方法不會改變 MediaPlayer 狀態;

-- 無效狀態 : IdlePreparedStartedPausedPlaybackCompletedError 狀態, 在 Error 狀態調用該方法, 會進入 Error 狀態中;



(3) 異步準備播放


方法名稱public void prepareAsync ();


方法做用 : 異步的方法, 讓播放器處於準備狀態;

-- 調用時機 : 設置完數據源 和 播放載體 以後調用該方法;

-- 適用狀況 : 對於 流媒體 來講, 調用該方法當即返回, 要比 阻塞等待緩衝足夠的數據在播放比較好;


方法的有效狀態和無效狀態 : 只有在 Initialized 和 Stopped 狀態中會

-- 有效狀態 : Initialized, Stopped, 在以上狀態調用該方法不會改變 MediaPlayer 狀態;

-- 無效狀態 : IdlePreparedStartedPausedPlaybackCompletedError 狀態, 在 Error 狀態調用該方法, 會進入 Error 狀態中;



(4) 釋放 MediaPlayer


方法名稱 : public void release ();


方法解析 : 釋放掉與 MediaPlayer 相關的資源;

-- 調用時機 : 在 MediaPlayer 播放的 Activity 暫停(pause) 中止(stop) 或者 銷燬(destroy)  的時候要調用該方法釋放 資源;


方法的有效狀態和無效狀態 : 在任何狀態下 調用 release() 方法均可以;



(5) 重置 MediaPlayer


方法名稱 public void reset ();


方法解析 : 重置 MediaPlayer 到 Idle 狀態, 此時尚未設置數據源, 若是想要播放媒體資源, 須要設置數據源 和 調用 prepare()方法;


方法的有效狀態和無效狀態 : 在任何狀態下 調用 release() 方法均可以;



4. 設置數據源相關方法



(1) 設置本地文件路徑


方法名稱public void setDataSource (String path);


方法解析 : 設置一個 文件路徑 或者 http/rtsp 地址 當作數據源;


參數解析 : String path, 媒體資源的 文件路徑 或者是 http/rtsp url 地址路徑;


 

方法的有效狀態和無效狀態 : 只有在 Idle 狀態下才能設置數據源, 其它狀況都會報錯;

-- 有效狀態 : Idle, 在以上狀態調用該方法不會改變 MediaPlayer 狀態;

-- 無效狀態 : Initialized, PreparedStartedPausedStoppedPlaybackCompletedError, 狀態, 在 Error 狀態調用該方法, 會進入 Error 狀態中;



(2) 設置文件描述符


方法名稱public void setDataSource (FileDescriptor fd);


方法解析 : 設置一個文件描述符資源, 調用者應該注意關閉這個文件描述符;


參數解析 : FileDescriptor sd, UNIX 系統的文件描述, 至關與一個文件;


方法的有效狀態和無效狀態 : 只有在 Idle 狀態下才能設置數據源, 其它狀況都會報錯;

-- 有效狀態 : Idle, 在以上狀態調用該方法不會改變 MediaPlayer 狀態;

-- 無效狀態 : Initialized, PreparedStartedPausedStoppedPlaybackCompletedError, 狀態, 在 Error 狀態調用該方法, 會進入 Error 狀態中;



(3) 設置數據源只截取其中一段


方法名稱public void setDataSource (FileDescriptor fd, long offset, long length);


方法解析 : 設置一個文件描述符數據源, 這個文件描述符文件必須是可查詢的;


參數解析

-- FileDescriptor fd : 文件描述符;

-- long offset : 文件開始播放的位置, 這裏指的是字節數;

-- long length : 文件播放的大小, 字節數;


 

方法的有效狀態和無效狀態 : 只有在 Idle 狀態下才能設置數據源, 其它狀況都會報錯;

-- 有效狀態 : Idle, 在以上狀態調用該方法不會改變 MediaPlayer 狀態;

-- 無效狀態 : Initialized, PreparedStartedPausedStoppedPlaybackCompletedError, 狀態, 在 Error 狀態調用該方法, 會進入 Error 狀態中;



(4) 設置 Uri 路徑


方法名稱public void setDataSource (Context context, Uri uri);


方法介紹 : 設置一個 Uri 路徑看成數據源;


參數介紹

-- Context context : Android 上下文對象;

-- Uri uri : 網絡媒體文件數據源;


 

方法的有效狀態和無效狀態 : 只有在 Idle 狀態下才能設置數據源, 其它狀況都會報錯;

-- 有效狀態 : Idle, 在以上狀態調用該方法不會改變 MediaPlayer 狀態;

-- 無效狀態 : Initialized, PreparedStartedPausedStoppedPlaybackCompletedError, 狀態, 在 Error 狀態調用該方法, 會進入 Error 狀態中;



5. 設置監聽器相關方法


注意 : 註冊監聽器相關方法在 MediaPlayer 的任何狀態均可以調用;



(1) 註冊緩衝變化相關監聽器


方法名稱public void setOnBufferingUpdateListener (MediaPlayer.OnBufferingUpdateListener listener);


方法做用 : 註冊一個在網絡緩衝數據流發生變化後回調的監聽器;



(2) 註冊播放完畢監聽器


方法名稱 : public void setOnCompletionListener (MediaPlayer.OnCompletionListener listener);


方法做用 : 註冊一個在媒體資源播放完畢以後回調的播放事件;



(3) 註冊錯誤監聽器


方法名稱public void setOnErrorListener (MediaPlayer.OnErrorListener listener);


方法解析 : 註冊一個在異步操做過程當中發生錯誤回調的監聽器;



(4) 註冊事件監聽器


方法名稱 : public void setOnInfoListener (MediaPlayer.OnInfoListener listener);


方法解析 : 註冊一個當有信息 或者 警告出現就會回調的監聽器;



(5) 註冊準備播放監聽器


方法名稱public void setOnPreparedListener (MediaPlayer.OnPreparedListener listener);


方法解析 : 註冊一個當媒體資源準備播放時回調的監聽器;



(6) 註冊搜尋操做監聽器


方法名稱public void setOnSeekCompleteListener (MediaPlayer.OnSeekCompleteListener listener);


方法解析 : 註冊一個搜尋操做完成後回調的監聽器;



(7) 註冊視頻大小改變監聽器


方法名稱public void setOnVideoSizeChangedListener (MediaPlayer.OnVideoSizeChangedListener listener);


方法解析 : 註冊一個 當視頻大小已知 或者 更新後 回調的監聽器;



6. MediaPlayer 其它設置



(1) 指定音頻流類型


方法名稱 : public void setAudioStreamType (int streamtype);


方法解析 : 爲 MediaPlayer 設置音頻流類型, 音頻類型在 AudioManager 中定義, 該方法必須在 prepare() 或者 prepareAsync() 方法以前調用;


方法的有效狀態和無效狀態 : 

-- 有效狀態 : IdleInitialized, PreparedStartedPausedStoppedPlaybackCompleted, 在以上狀態調用該方法會進入 Paused 狀態;

-- 無效狀態 : Error 狀態, 在 Error 狀態調用該方法, 會進入 Error 狀態中;



(2) 設定播放載體


方法名稱 public void setDisplay (SurfaceHolder sh);


方法解析 : 設定該媒體播放器的載體 SurfaceHolder, 若是要播放視頻必須設置該項 或者 setSurface() 中的任意一個, 若是播放音頻, 就不準要設置該該項, 若是播放視頻沒有設置該項, 那麼只會播放聲音;


方法的有效狀態和無效狀態 : 在任何狀態下都有效, 而且不會改變當前的運行狀態;



(3) 設置循環播放


方法名稱public void setLooping (boolean looping);


方法解析 : 設置播放器是否循環播放;


方法的有效狀態和無效狀態 : 

-- 有效狀態 : IdleInitialized, PreparedStartedPausedStoppedPlaybackCompleted, 在以上狀態調用該方法不會改變當前狀態;

-- 無效狀態 : Error 狀態, 在 Error 狀態調用該方法, 會進入 Error 狀態中;



(4) 設置是否保持屏幕


方法名稱public void setScreenOnWhilePlaying (boolean screenOn);


方法解析: 設置在視頻播放的時候是否使用 SurfaceHolder 保持屏幕亮起;


方法的有效狀態和無效狀態 : 任何狀態均可調用, 而且不會改變當前狀態;



(5) 設置電源管理狀態


方法名稱 public void setWakeMode (Context context, int mode);


方法解析 : 爲 MediaPlayer 設置電源管理狀態;


方法的有效狀態和無效狀態 : 任何狀態均可調用, 而且不會改變當前狀態;



做者 : 韓曙亮

轉載請著名出處 :  http://blog.csdn.net/shulianghan/article/details/38487967

相關文章
相關標籤/搜索