安卓视频播放器(VideoView)(2)

电脑杂谈  发布时间:2019-09-15 11:06:14  来源:网络整理

视频播放完成:

 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 });

视频播放错误:

videoview播放黑屏_android videoview_videoview

 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 });

videoview播放黑屏_videoview_android videoview

播放下一个视频:

 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

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...