1.布局文件定义VideoView控件
2.关联视频路径
mVideoView.setVideoPath(url);
mVideoView.requestFocus();
mVideoView.start();
这一步实现的是视频播放
3.进度控制,及加载中显示
布局文件添加progressbar控件(进度条)
mMediaController = new MediaController(this);//实现进度控制
mVideoView.setMediaController(mMediaController);
根据视频播放的进度控制进度条的显示
a.缓冲中,显示进度条
b.准备播放时,进度条不显示
c.播放完毕,实现循环播放,及调用播放的方法
页面关闭时,调用onDestory方法,执行销毁操作(否则容易出现内存泄漏问题)
完整代码如下(目前还有一个小问题,不能全屏显示,待解决)
MediaController mediaController=new MediaController(mContext);
vv.setMediaController(mediaController);
vv.setVideoPath("http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4");
vv.requestFocus();
vv.start();
vv.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
progress_circular.setVisibility(View.GONE);
}
});
vv.setOnErrorListener(new MediaPlayer.OnErrorListener() {
@Override
public boolean onError(MediaPlayer mp, int what, int extra) {
return false;
}
});
vv.setOnInfoListener(new MediaPlayer.OnInfoListener() {
@Override
public boolean onInfo(MediaPlayer mp, int what, int extra) {
if (what==MediaPlayer.MEDIA_INFO_BUFFERING_START){
progress_circular.setVisibility(View.VISIBLE);
}else{
progress_circular.setVisibility(View.GONE);
}
return false;
}
});
//播放完毕,循环播放
vv.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
vv.setVideoPath("http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4");
vv.requestFocus();
vv.start();
}
});
@Override
protected void onDestroy() {
super.onDestroy();
//执行销毁操作
if (vv!=null){
vv.suspend();
}
}
使用视频的第一帧作为封面(显示比较慢,网上找的方法,目前不太适用)
public Bitmap getNetVideoBitmap(String videoUrl) {
Bitmap bitmap = null;
MediaMetadataRetriever retriever = new MediaMetadataRetriever();
try {
//根据url获取缩略图
retriever.setDataSource(videoUrl, new HashMap());
//获得第一帧图片
bitmap = retriever.getFrameAtTime();
iv.setImageBitmap(bitmap);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} finally {
retriever.release();
}
return bitmap;
}
参考链接