Android視訊播放器
這裡我們大家分享兩種視訊播放的方法:
第一種是用MediaPlayer+SeerBar+SurfaceView
MediaPlayer:加載視訊檔案mediaPlayer.setDataSource(this, Uri.parse("file://storage/sdcard/DCIM/Camera/ddbb.mp4"));
SeerBar:顯示目前視訊播放的的位置,快進、後退視訊
SurfaceView:顯示視訊畫面
先看效果圖:
因為MediaPlayer是從SD卡拿視訊的,是以要權重限:
下面是具體代碼:
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);
}
}