玩转Android之在线视频播放控件Vitamio的使用

其实Android中自带的MediaPlayer本身就能播放在线视频,MediaPlayer结合SurfaceView播放在线视频也是不错的选择(如果你没有性能或者用户体验上的要求),关于MediaPlayer+SurfaceView播放在线视频我后面会给筒子们详细介绍,这里我想先说一下一个第三方的视频播放控件Vitamio的使用,这个控件用起来还是非常方便的,而且性能也不错,OK,废话不多说,先来看看我们今天的一个效果图。

OK,这是一段网络视频,当视频处于缓冲状态时,会提示用户目前缓冲的百分比以及当前的下载网速,我们就来看看这么一个效果该怎么实现。

1.准备工作

1.视频网址

http://112.253.22.157/17/z/z/y/u/zzyuasjwufnqerzvyxgkuigrkcatxr/hc.yinyuetai.com/D046015255134077DDB3ACA0D7E68D45.flv

2.下载Vitamio库

Vitamio下载地址https://github.com/yixia/VitamioBundle

Vitamio官网地址https://www.vitamio.org/?locale=zh-CN

其实官网并没有什么卵用,连个Demo都没有,大家只需要去GitHub上下载Vitamio库文件即可。

3.导入Vitamio库

导入库,这个很简单吧,和筒子们导入其他库的方式一样,不赘述(这里有疑问欢迎留言讨论)。

4.在已创建的App中引用该库文件

2.播放网络视频

第一步的工作完成之后,接下来我们就可以开始使用Vitamio了,首先在布局文件中来引用Vitamio,如下:

  1. <io.vov.vitamio.widget.VideoView  
  2.     android:id="@+id/vitamio"  
  3.     android:layout_width="match_parent"  
  4.     android:layout_height="200dp"  
  5.     android:layout_marginTop="24dp"/>  

然后在Activity中来查找Vitamio,Vitamio在使用之前必须对其进行初始化操作,调用Vitamio.initialize(this)方法可对其进行初始化操作,该方法有一个返回值表示初始化是否成功,当初始化成功后我们再来进行进一步的操作。代码如下:
  1. if (Vitamio.initialize(this)) {  
  2.             VideoView videoView = (VideoView) findViewById(R.id.vitamio);  
  3.             videoView.setVideoURI(Uri.parse("http://112.253.22.157/17/z/z/y/u/zzyuasjwufnqerzvyxgkuigrkcatxr/hc.yinyuetai.com/D046015255134077DDB3ACA0D7E68D45.flv"));  
  4.             MediaController controller = new MediaController(this);  
  5.             videoView.setMediaController(controller);  
  6.             videoView.start();  
  7.         }  

Vitamio中的VideoView和Android自带的VideoView的用法基本一致,就是导入的包不同罢了,setVideoURI方法给VideoView设置一个网络播放地址,MediaController是一个播放控制器(这个东西不是必须设置的,看需求),设置完这些之后,直接调用videoView的start方法就可以播放视频了(注意添加网络访问权限)。

3.显示缓冲百分比以及下载网速

完成第二部,视频播放已经没有问题了,但是如果筒子们想要在视频缓冲的过程中显示缓冲百分比以及下载速率该怎么办呢?这个也简单。首先缓冲百分比和下载速率是显示在两个TextView上的,而且这两个TextView都显示在VideoView的左上角,那么我们来看看完整的布局 文件应该是什么样子:

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <RelativeLayout  
  3.     xmlns:android="http://schemas.android.com/apk/res/android"  
  4.     xmlns:tools="http://schemas.android.com/tools"  
  5.     android:layout_width="match_parent"  
  6.     android:layout_height="match_parent"  
  7.     tools:context="lenve.vitamio.MainActivity">  
  8.   
  9.     <io.vov.vitamio.widget.VideoView  
  10.         android:id="@+id/vitamio"  
  11.         android:layout_width="match_parent"  
  12.         android:layout_height="200dp"  
  13.         android:layout_marginTop="24dp"/>  
  14.   
  15.     <TextView  
  16.         android:id="@+id/buffer_percent"  
  17.         android:layout_width="wrap_content"  
  18.         android:layout_height="wrap_content"  
  19.         android:layout_alignTop="@id/vitamio"  
  20.         android:layout_marginLeft="12dp"  
  21.         android:textColor="#e6ff01"/>  
  22.   
  23.     <TextView  
  24.         android:id="@+id/net_speed"  
  25.         android:layout_width="wrap_content"  
  26.         android:layout_height="wrap_content"  
  27.         android:layout_alignTop="@id/vitamio"  
  28.         android:layout_marginLeft="12dp"  
  29.         android:layout_toRightOf="@id/buffer_percent"  
  30.         android:textColor="#04fa00"/>  
  31.   
  32. </RelativeLayout>  

然后在Activity中查找到这两个控件:
  1. //显示缓冲百分比的TextView  
  2. percentTv = (TextView) findViewById(R.id.buffer_percent);  
  3. //显示下载网速的TextView  
  4. netSpeedTv = (TextView) findViewById(R.id.net_speed);  

然后调用VideoView中的两个监听器,第一个如下:
  1. videoView.setOnBufferingUpdateListener(new MediaPlayer.OnBufferingUpdateListener() {  
  2.                 @Override  
  3.                 public void onBufferingUpdate(MediaPlayer mp, int percent) {  
  4.                     percentTv.setText("已缓冲:" + percent + "%");  
  5.                 }  
  6.             });  

这个方法表示监听缓冲百分比,里边的percent参数就表示当前缓冲百分比。

第二个监听器如下:

  1. videoView.setOnInfoListener(new MediaPlayer.OnInfoListener() {  
  2.     @Override  
  3.     public boolean onInfo(MediaPlayer mp, int what, int extra) {  
  4.         switch (what) {  
  5.             //开始缓冲  
  6.             case MediaPlayer.MEDIA_INFO_BUFFERING_START:  
  7.                 percentTv.setVisibility(View.VISIBLE);  
  8.                 netSpeedTv.setVisibility(View.VISIBLE);  
  9.                 mp.pause();  
  10.                 break;  
  11.             //缓冲结束  
  12.             case MediaPlayer.MEDIA_INFO_BUFFERING_END:  
  13.                 percentTv.setVisibility(View.GONE);  
  14.                 netSpeedTv.setVisibility(View.GONE);  
  15.                 mp.start();  
  16.                 break;  
  17.             //正在缓冲  
  18.             case MediaPlayer.MEDIA_INFO_DOWNLOAD_RATE_CHANGED:  
  19.                 netSpeedTv.setText("当前网速:" + extra + "kb/s");  
  20.                 break;  
  21.         }  
  22.         return true;  
  23.     }  
  24. });  

这个监听器我们可以用来监听缓冲的整个过程,what参数表示缓冲的时机,extra参数表示当前的下载网速,根据what参数我们可以判断出当前是开始缓冲还是缓冲结束还是正在缓冲,开始缓冲的时候,我们将左上角的两个控件显示出来,同时让播放器暂停播放,缓冲结束时将左上角两个控件隐藏起来,同时播放器开始播放,正在缓冲的时候我们就来显示当前的下载网速。

OK,这个就是Vatamio一个基本的用法,Vitamio大多数API都和原生的VideoView的API一致,这里我就不再赘述。

源码下载(由于CSDN对上传文件大小有限制,我只上传了我的代码的Module,大家下载demo之后需要自己下载Vitamio并引入,工程方可运行)http://download.csdn.net/detail/u012702547/9510217

 

以上。

 

posted @ 2017-03-13 17:47  brave-sailor  阅读(909)  评论(0编辑  收藏  举报