Android 端实现视频播放的两种方式
1、通过surfaceView+MediaPlayer 实现
2、使用VideoView+MediaController实现
一、通过surfaceView+MediaPlayer实现(多用于自定义开发播放器)
页面布局:sufaceView+SeekBar+ImageButton
<SurfaceView
android:id="@+id/sfv_main_video"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="8" />
<SeekBar
android:id="@+id/sb_main_video"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<ImageButton
android:id="@+id/ib_main_play"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:onClick="isPlayOrPause"
android:src="@android:drawable/ic_media_play" />
java代码:
/**
* play or pause
*
* @param view
*/
public void isPlayOrPause(View view) {
final ImageButton ib_main_play = (ImageButton) view;
// 判断MediaPlay的状态
if (mediaPlayer == null) { // 1、为空,也就是第一次
// 实例化MediaPlayer
mediaPlayer = new MediaPlayer();
// 设置类型
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
try {
// 设置视频源
// 内存卡
mediaPlayer.setDataSource(this, Uri.parse("file://mnt/sdcard/Download/sister.mp4"));
// 需要准备(内存卡)
mediaPlayer.prepare();
// 将画面展示到surfaceView上
mediaPlayer.setDisplay(sfv_main_video.getHolder());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// 准备完成监听
mediaPlayer.setOnPreparedListener(new OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
// TODO Auto-generated method stub
// 播放
mediaPlayer.start();
// 改变图标
ib_main_play.setImageResource(android.R.drawable.ic_media_pause);
// 获取视频总时长
int duration = mediaPlayer.getDuration();
// 设置seekBar总长
sb_main_video.setMax(duration);
// 进度条
new MyThread().start();
}
});
} else if (mediaPlayer.isPlaying()) { // 2、正在播放?
mediaPlayer.pause();
ib_main_play.setImageResource(android.R.drawable.ic_media_play);
} else { // 3、暂停
mediaPlayer.start();
ib_main_play.setImageResource(android.R.drawable.ic_media_pause);
}
}
/**
* 进度条
*
* @author L
*
*/
class MyThread extends Thread {
@Override
public void run() {
// TODO Auto-generated method stub
super.run();
// 当前长度,是否大于最大值
while (sb_main_video.getProgress() <= sb_main_video.getMax()) {
// 获取当前播放进度
int current = mediaPlayer.getCurrentPosition();
sb_main_video.setProgress(current);
}
}
}
二、使用VideoView+MediaController实现(单视频播放,类似于微博之类的小视频播放)
页面布局:VideoView
<VideoView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/vv_main_video"/>
这种方法只需要在页面上使用VideoView控件
java代码:
vv_main_video = (VideoView) findViewById(R.id.vv_main_video);
//设置视频地址
vv_main_video.setVideoPath("file://mnt/sdcard/Download/sister.mp4");
//实例化一个MediaController(媒体控制器)
MediaController mediaController = new MediaController(this);
//添加关联
vv_main_video.setMediaController(mediaController);
mediaController.setMediaPlayer(vv_main_video);
上述两种方法都能实现视频播放,一个偏向于自定义播放器,另一个让自己的app可以播放视频
在此记录,供参考