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);            }        }    }}
      布局文件
      <?xml version="1.0" encoding="utf-8"?>                
      第一种方式基本就这样可以实现啦
使用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 我这里就不贴代码了~~~














更多相关文章

  1. AndroidManifest.xml文件剖析 (二)
  2. android中使用sqlite、复制assets下的数据库到SD卡、支持大于1M
  3. Android验证码倒计时实现方式总结
  4. Android原生方式实现夜间模式

随机推荐

  1. Android仿微信聊天界面
  2. 在Android使用正则表达式
  3. 更改android开机画面 DIY
  4. 【腾讯Bugly干货分享】Android进程保活招
  5. Android如何解析Intent Filter
  6. android中Intent的一些用法和总结
  7. Android系统各个版本 最新市场份额变换
  8. Android最全面、最易懂的Android屏幕适配
  9. Android 运行时权限处理(from jianshu)
  10. Android系统架构5层