视频播放完成:
1 vv.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { 2 @Override 3 public void onCompletion(MediaPlayer mp) { 4 String strres="播放完成"; 5 //判断视频的总长度与当前长度是否在误差区间内 6 if(Math.abs(vv.getDuration()-vv.getCurrentPosition())>1000){ 7 8 strres="播放错误,可能无网络连接"; 9 10 } 11 //设置屏幕提示信息 12 vv_text.setText(strres); 13 14 } 15 });
视频播放错误:

1 vv.setOnErrorListener(new MediaPlayer.OnErrorListener() { 2 @Override 3 public boolean onError(MediaPlayer mp, int what, int extra) 4 { 5 //设置屏幕显示信息 6 vv_text.setText("视频未知错误"); 7 8 return false; 9 } 10 });
视频卡顿和停止卡顿:
1 vv.setOnInfoListener(new MediaPlayer.OnInfoListener(){ 2 @Override 3 public boolean onInfo(MediaPlayer mp, int what, int extra){ 4 5 switch(what){ 6 case MediaPlayer.MEDIA_INFO_BUFFERING_START: 7 //设置屏幕显示信息,开始卡顿 8 vv_text.setText("视频卡顿,加载中....."); 9 break ; 10 case MediaPlayer.MEDIA_INFO_BUFFERING_END: 11 //设置屏幕显示信息,卡顿结束 12 vv_text.setText(""); 13 break ; 14 } 15 return true; 16 } 17 }) ;
设置播放资源:
1 //本地文件 2 vv.setVideoPath(Environment.getExternalStorageDirectory()+"/dongxiaodong/kk1.mp4"); 3 4 //URL形式,支持本地URL和网络URL 5 //vv.setVideoURI(Uri.parse("https://www.bilibili.com/video/xxxxx")); 6 7 //设置自带的播放控件 8 //vv.setMediaController(new MediaController(this));
播放开始按钮:
1 //开始播放视频按钮 2 vv_start.setOnClickListener(new View.OnClickListener() { 3 @Override 4 public void onClick(View v) { 5 6 //设置屏幕显示信息 7 vv_text.setText(""); 8 9 //开始播放 10 vv.start(); 11 12 } 13 });
播放暂停按钮:
1 //暂停播放视频按钮 2 vv_pause.setOnClickListener(new View.OnClickListener() { 3 @Override 4 public void onClick(View v) { 5 6 //设置屏幕显示信息 7 vv_text.setText("视频暂停中"); 8 9 //暂停视频播放 10 vv.pause(); 11 12 } 13 });
重新播放按钮:
1 //重新播放视频 2 vv_restart.setOnClickListener(new View.OnClickListener() { 3 @Override 4 public void onClick(View v) { 5 //设置屏幕显示信息 6 vv_text.setText("正在重新播放中,请稍等"); 7 8 //设置时间轴显示为0 9 vv_starttime.setText("时间轴为:0.00/0.00"); 10 11 //设置进度条显示为0 12 vv_bar.setProgress(0); 13 14 //重新播放视频 15 vv.resume(); 16 vv.start(); 17 18 } 19 });

播放下一个视频:
1 vv_next.setOnClickListener(new View.OnClickListener() { 2 @Override 3 public void onClick(View v) { 4 //设置屏幕显示信息 5 vv_text.setText("正在切换,请稍等"); 6 7 //设置时间轴为0 8 vv_starttime.setText("时间轴为:0.00/0.00"); 9 10 //设置进度条为0 11 vv_bar.setProgress(0); 12 13 //停止播放 14 vv.pause();//暂停 15 vv.stopPlayback();//停止播放并释放资源 16 17 //得到下一个视频的资源 18 if(nextbool){ 19 nextbool=false; 20 //网络资源,该url已经过期 21 vv.setVideoURI(Uri.parse("http://193.112.87.88/video/xx.flv")); 22 } else { 23 nextbool=true; 24 //本地资源 25 vv.setVideoPath(Environment.getExternalStorageDirectory()+"/dongxiaodong/kk1.mp4"); 26 } 27 28 //开始播放下一个 29 vv.start(); 30 31 } 32 });
时间轴时间显示和进度条更新实现:
时间轴时间显示推算将在后文给出解释,另外 d 可以实现手动补零效果,runOnUiThread可以在普通线程中处于UI线程android videoview,可以推动UI的一系列操作。


1 new Thread(new Runnable() { 2 @Override 3 public void run() { 4 while (true){ 5 //延时1秒 6 try { 7 Thread.sleep(1); 8 } catch (InterruptedException e) { 9 e.printStackTrace(); 10 } 11 12 //进入主线程更新UI 13 runOnUiThread(new Runnable() { 14 @Override 15 public void run() { 16 if(vv.isPlaying()) { 17 18 //获取到视频播放进度 19 int maxx=vv.getDuration(); 20 int progress=vv.getCurrentPosition(); 21 22 //设置进度条信息 23 vv_bar.setMax(maxx); 24 vv_bar.setProgress(progress); 25 26 //得到时间轴字符串 27 String strtime=String.format("时间轴为:d:d/d:d", (progress % 3600000) / 60000,(progress % 60000 ) / 1000, (maxx % 3600000) / 60000,(maxx % 60000 ) / 1000); 28 //显示时间轴信息 29 vv_starttime.setText(strtime); 30 31 } 32 } 33 }); 34 } 35 36 } 37 }).start();
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/bofangqi/article-122936-2.html
世界人民总有醒悟的一天
马云就是废话太多
韬啊要加油啊