1. 程式人生 > >Android MediaPlayer播放音訊與視訊

Android MediaPlayer播放音訊與視訊

使用MediaPlayer播放音訊與視訊

播放音訊

  1. 首先創建出一個MediaPlayer物件
MediaPlayer mMediaPlayer = new MediaPlayer();
  1. 設定聲音源
public static final String FILENAME = "deserve.mp3";
public static final String PATH = "/mnt/sdcard/" + FILENAME;
FileInputStream fis = new FileInputStream(new File(PATH));
mMediaPlayer.setDataSource(fis.getFD());// 設定聲音源

3.引數設定

mMediaPlayer.setLooping(false); // 設定是否迴圈

    /*
      PlaybackParams playBackParams = new PlaybackParams();
      playBackParams.setAudioFallbackMode(PlaybackParams.AUDIO_FALLBACK_MODE_FAIL);//設定音訊後備模式
      playBackParams.setSpeed(1.0f);// 調音速 --測試最大值為8.0f
      playBackParams.setPitch(1.0f); // 調音調
      mMediaPlayer.setPlaybackParams(playBackParams);
    */
    /*
      // 使用系統的媒體音量控制
      AudioAttributes attributes = new AudioAttributes.Builder()
          .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
          .setFlags(AudioAttributes.FLAG_LOW_LATENCY)
          .setUsage(AudioAttributes.USAGE_MEDIA)
          .setLegacyStreamType(AudioManager.STREAM_MUSIC)
          .build();
      mMediaPlayer.setAudioAttributes(attributes);
      */

4.MediaPlayer播放音訊
這裡在MediaPlayer類中提供了兩個準備的方法,一個是同步準備prepare(),一個是非同步準備prepareAsync(),建議在使用時使用prepare(),非同步準備方法在呼叫後會立即呼叫setOnCompletionListener()方法,使得當前歌曲結束播放。在呼叫prepare()或者prepareAsync()方法後呼叫setOnPreparedListener()方法進行準備監聽,在此監聽中呼叫start()方法進行播放。

  1. 暫停與停止
    pause(): 暫停音樂播放
    stop() : 停止音樂播放
    reset() : 重置當前音樂

  2. 設定進度條實時顯示播放進度
    (1)首先應該在佈局檔案中新增ProgressBar(橫向)或者SeekBar,在Activity中進行初始化。
    (2)使用定時器來定時更新進度。

        //----------定時器記錄播放進度---------//
        Timer mTimer = new Timer();
        TimerTask mTimerTask = new TimerTask() {
          @Override public void run() {
            seekBar.setProgress(mp.getCurrentPosition());
          }
        };
        mTimer.schedule(mTimerTask, 0, 10);

(3)定時器的程式碼應該在mMediaPlayer.setOnPreparedListener()中呼叫。當其開始播放時開啟這個定時任務,並呼叫seekBar.setMax(mp.getDuration());來設定進度條的最大時間,其中mp.getDuration()是獲取當前播放檔案的總長度。
(4)停止播放或者結束播放時,呼叫mTimer.cancel();來關閉定時器。

  1. 視訊播放不同之處
    視訊播放時要使用VideoView來進行視訊的顯示,此時MediaPlayer要設定一個顯示器。
mMediaPlayer.setDisplay(videoView.getHolder());