android中使用MediaPlayer播放视频

Android中播放视频主要有两种方式:

  • 使用其自带的播放器。指定Action为ACTION_VIEW,Data为Uri,Type为其MIME类型

  • 使用SurfaceView+MediaPlayer+seekbar,这种方式效果比较好,这里也重点介绍
  • 使用android自带的VideoView,等下会简单介绍

    步骤:

    1. 调用player.setDataSource()方法设置要播放的资源,可以是文件、文件路径、或者URL。
    2. 调用MediaPlayer.setDisplay(holder)设置surfaceHolder,surfaceHolder可以通过surfaceview的getHolder()方法获得。
    3. 调用MediaPlayer.prepare()来准备。
    4. 调用MediaPlayer.start()来播放视频

      package com.pxd.mediaplayer;
      
      import android.media.AudioManager;
      import android.media.MediaPlayer;
      import android.os.Environment;
      import android.support.v7.app.AppCompatActivity;
      import android.os.Bundle;
      import android.view.SurfaceView;
      import android.view.View;
      import android.widget.ImageButton;
      import android.widget.SeekBar;
      
      import java.io.File;
      import java.io.IOException;
      
      public class MainActivity extends AppCompatActivity {
          private MediaPlayer mediaPlayer;
          private SeekBar seekBar;
          private SurfaceView sv_main_surface;
      
          @Override
          protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.activity_main);
              seekBar = (SeekBar) findViewById(R.id.seekBar);
              sv_main_surface = (SurfaceView) findViewById(R.id.sv_main_surface);
      
              seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
                  @Override
                  public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {}
                  @Override
                  public void onStartTrackingTouch(SeekBar seekBar) {}
                  @Override
                  public void onStopTrackingTouch(SeekBar seekBar) {
                      //获取拖动结束之后的位置
                      int progress=seekBar.getProgress();
                      //跳转到某个位置播放
                      mediaPlayer.seekTo(progress);
                  }
              });
          }
          public void play(View view) throws IOException {
              final ImageButton imageButton= (ImageButton) view;
             if(mediaPlayer==null){
                  mediaPlayer=new MediaPlayer();
                 //设置类型
                 mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
                  /* 得到文件路径 *//* 注:文件存放在SD卡的根目录,一定要进行prepare()方法,使硬件进行准备 */
                 File file = new File(String.valueOf(Environment.getExternalStorageDirectory()));
                 try{
                     /* 为MediaPlayer 设置数据源 */
                     mediaPlayer.setDataSource(file.getAbsolutePath()+"/Movies/OPPO.mp4");
                      /* 准备 */
                     mediaPlayer.prepare();
                     //将播放器捕捉的画面展示到SurfaceView画面上
                     mediaPlayer.setDisplay(sv_main_surface.getHolder());
                 }catch(Exception ex){
                     ex.printStackTrace();
                 }
                   mediaPlayer.start();
                 // 把图标变为暂停图标
                 imageButton.setImageResource(android.R.drawable.ic_media_pause);
                 //获取音乐的总时长
                 int duration=mediaPlayer.getDuration();
                 //设置进度条的最大值为音乐总时长
                 seekBar.setMax(duration);
                 new MyThread().start();
              }else if(mediaPlayer.isPlaying()){
                  mediaPlayer.pause();
                  //把图标变为播放图标
                  imageButton.setImageResource(android.R.drawable.ic_media_play);
              }else{
                 mediaPlayer.start();
                 //把图标变为暂停图标
                 imageButton.setImageResource(android.R.drawable.ic_media_pause);
             }
          }
      
          class MyThread extends Thread{
              @Override
              public void run() {
                  super.run();
                  while(seekBar.getProgress()<=seekBar.getMax()){
                    //获取当前位置音乐播放的位置
                       int currentPosition=mediaPlayer.getCurrentPosition();
                    //让进度条滚动起来
                      seekBar.setProgress(currentPosition);
                  }
              }
          }
      }
      
      布局文件
      
      
          
          
          
      
          
      
      
      
      第一种方式基本就这样可以实现啦
使用VideoView方式实现:
代码如下:
package com.pxd.mediaplayer;

import android.os.Environment;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.MediaController;
import android.widget.VideoView;

import java.io.File;

public class VideoActivity extends AppCompatActivity {

    private VideoView vv_main_video;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_video);
        vv_main_video = (VideoView) findViewById(R.id.vv_main_video);
        //给VideoView设置播放来源
        File file = new File(String.valueOf(Environment.getExternalStorageDirectory()));
        vv_main_video.setVideoPath(file.getAbsolutePath()+"/Movies/OPPO.mp4");
        //实例化一个媒体控制器
        MediaController mediaController=new MediaController(this);
        vv_main_video.setMediaController(mediaController);
        mediaController.setMediaPlayer(vv_main_video);
    }
}
布局就是一个VideoView 我这里就不贴代码了~~~














你可能感兴趣的:(Android)