Android视频播放器
这里我们大家分享两种视频播放的方法:
第一种是用MediaPlayer+SeerBar+SurfaceView
MediaPlayer:加载视频文件mediaPlayer.setDataSource(this, Uri.parse("file://storage/sdcard/DCIM/Camera/ddbb.mp4"));
SeerBar:显示当前视频播放的的位置,快进、后退视频
SurfaceView:显示视频画面
先看效果图:
因为MediaPlayer是从SD卡拿视频的,所以要加权限:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
下面是具体代码:
public class MainActivity extends AppCompatActivity {
private SurfaceView sv_main_surface;
private SeekBar sb_main_seekBar;
private MediaPlayer mediaPlayer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
}
setContentView(R.layout.activity_main);
//获取SurfaceView
sv_main_surface = (SurfaceView) findViewById(R.id.sv_main_surface);
//获取SeekBar
sb_main_seekBar = (SeekBar) findViewById(R.id.sb_main_seekBar);
//进度条滑动事件
sb_main_seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
//获取seekBar的当前滑动位置
int sb=sb_main_seekBar.getProgress();
//快进视频
mediaPlayer.seekTo(sb);
}
});
}
public void startMediaPlayer(View view){
final ImageView imageView= (ImageView) view;
//SD卡播放视频
if (mediaPlayer==null) {
mediaPlayer=new MediaPlayer();
try {
//设置视频SD卡路径
mediaPlayer.setDataSource(this, Uri.parse("file://storage/sdcard/DCIM/Camera/ddbb.mp4"));
//准备
mediaPlayer.prepare();
} catch (IOException e) {
e.printStackTrace();
}
imageView.setImageResource(android.R.drawable.ic_media_pause);
//将视频展示到sv_main_surface
mediaPlayer.setDisplay(sv_main_surface.getHolder());
//进度条最大值
Log.i("test","DDDDDDDDDDD="+mediaPlayer.getDuration());
mediaPlayer.start();
sb_main_seekBar.setMax(mediaPlayer.getDuration());
new myThread().start();
}else if (mediaPlayer.isPlaying()) {
//暂停视频
mediaPlayer.pause();
imageView.setImageResource(android.R.drawable.ic_media_play);
}else{
//播放视频
mediaPlayer.start();
imageView.setImageResource(android.R.drawable.ic_media_pause);
}
}
//seekbar
class myThread extends Thread{
@Override
public void run() {
super.run();
while(sb_main_seekBar.getProgress()<=sb_main_seekBar.getMax()){
//获取视频当前播放的位置
int position=mediaPlayer.getCurrentPosition();
sb_main_seekBar.setProgress(position);
}
}
};
}
第二种视频播放VideoView:
使用VideoView播放视频就比较简单了,不像使用MediaPlayer那么麻烦
还是老规矩先看效果图:
这两张图片看起效果差不多,其实仔细看这一张是没有进度条的好了废话不多说,直接看代码:
public class VideoviewActivity extends AppCompatActivity {
private VideoView vv_videoview_video;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
}
setContentView(R.layout.activity_videoview);
//获取VideoView
vv_videoview_video = (VideoView) findViewById(R.id.vv_videoview_video);
//设置视频地址
vv_videoview_video.setVideoPath("file://storage/sdcard/DCIM/Camera/ddbb.mp4");
//实例化媒体控制器
MediaController mediaController=new MediaController(this);
mediaController.setMediaPlayer(vv_videoview_video);
vv_videoview_video.setMediaController(mediaController);
}
}