其实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,如下:

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

然后在Activity中来查找Vitamio,Vitamio在使用之前必须对其进行初始化操作,调用Vitamio.initialize(this)方法可对其进行初始化操作,该方法有一个返回值表示初始化是否成功,当初始化成功后我们再来进行进一步的操作。代码如下:

if (Vitamio.initialize(this)) {
VideoView videoView = (VideoView) findViewById(R.id.vitamio);
videoView.setVideoURI(Uri.parse("http://112.253.22.157/17/z/z/y/u/zzyuasjwufnqerzvyxgkuigrkcatxr/hc.yinyuetai.com/D046015255134077DDB3ACA0D7E68D45.flv"));
MediaController controller = new MediaController(this);
videoView.setMediaController(controller);
videoView.start();
}

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

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

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

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="lenve.vitamio.MainActivity"> <io.vov.vitamio.widget.VideoView
android:id="@+id/vitamio"
android:layout_width="match_parent"
android:layout_height="200dp"
android:layout_marginTop="24dp"/> <TextView
android:id="@+id/buffer_percent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignTop="@id/vitamio"
android:layout_marginLeft="12dp"
android:textColor="#e6ff01"/> <TextView
android:id="@+id/net_speed"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignTop="@id/vitamio"
android:layout_marginLeft="12dp"
android:layout_toRightOf="@id/buffer_percent"
android:textColor="#04fa00"/> </RelativeLayout>

然后在Activity中查找到这两个控件:

        //显示缓冲百分比的TextView
percentTv = (TextView) findViewById(R.id.buffer_percent);
//显示下载网速的TextView
netSpeedTv = (TextView) findViewById(R.id.net_speed);

然后调用VideoView中的两个监听器,第一个如下:

videoView.setOnBufferingUpdateListener(new MediaPlayer.OnBufferingUpdateListener() {
@Override
public void onBufferingUpdate(MediaPlayer mp, int percent) {
percentTv.setText("已缓冲:" + percent + "%");
}
});

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

第二个监听器如下:

            videoView.setOnInfoListener(new MediaPlayer.OnInfoListener() {
@Override
public boolean onInfo(MediaPlayer mp, int what, int extra) {
switch (what) {
//开始缓冲
case MediaPlayer.MEDIA_INFO_BUFFERING_START:
percentTv.setVisibility(View.VISIBLE);
netSpeedTv.setVisibility(View.VISIBLE);
mp.pause();
break;
//缓冲结束
case MediaPlayer.MEDIA_INFO_BUFFERING_END:
percentTv.setVisibility(View.GONE);
netSpeedTv.setVisibility(View.GONE);
mp.start();
break;
//正在缓冲
case MediaPlayer.MEDIA_INFO_DOWNLOAD_RATE_CHANGED:
netSpeedTv.setText("当前网速:" + extra + "kb/s");
break;
}
return true;
}
});

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

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

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

以上。

玩转Android之在线视频播放控件Vitamio的使用的更多相关文章

  1. Android高级_视频播放控件

    一.Android系统自带VideoView控件 1. 创建步骤: (1)自带视频文件放入res/raw文件夹下: (2)声明初始化VideoView控件: (3)创建视频文件Uri路径,Uri调用p ...

  2. Android常用酷炫控件(开源项目)github地址汇总

    转载一个很牛逼的控件收集帖... 第一部分 个性化控件(View) 主要介绍那些不错个性化的 View,包括 ListView.ActionBar.Menu.ViewPager.Gallery.Gri ...

  3. Android 常用炫酷控件(开源项目)git地址汇总

    第一部分 个性化控件(View) 主要介绍那些不错个性化的 View,包括 ListView.ActionBar.Menu.ViewPager.Gallery.GridView.ImageView.P ...

  4. JS调用Android、Ios原生控件

    在上一篇博客中已经和大家聊了,关于JS与Android.Ios原生控件之间相互通信的详细代码实现,今天我们一起聊一下JS调用Android.Ios通信的相同点和不同点,以便帮助我们在进行混合式开发时, ...

  5. Android Material适配 为控件设置指定背景色和点击波纹效果

    Android Material适配 为控件设置指定背景色和点击波纹效果,有需要的朋友可以参考下. 大部分时候,我们都需要为控件设置指定背景色和点击效果 4.x以下可以使用selector,5.0以上 ...

  6. Android开发之日历控件实现

    Android开发之日历控件实现:以下都是转载的. 日历控件 日历控件 日历控件 日历控件

  7. android中的EditView控件

    android中的EditView控件 EditText继承关系:View-->TextView-->EditText ,EditText是可编辑文本框 1.EditText默认情况下,光 ...

  8. 将VLC库封装为duilib的万能视频播放控件

    转载请说明出处,谢谢~~ 昨天封装好了基于webkit的浏览器控件,修复了duilib的浏览器功能的不足,而我的仿酷狗播放器项目中不光需要浏览器,同时也需要视频播放功能,也就是完成MV的功能.所以我打 ...

  9. Android中通过WebView控件实现与JavaScript方法相互调用的地图应用

    在Android中通过WebView控件,可以实现要加载的页面与Android方法相互调用,我们要实现WebView中的addJavascriptInterface方法,这样html才能调用andro ...

随机推荐

  1. GetActiveView 返回 NULL 为 MDI 框架窗口

    blog 在 MDI 应用程序中,MDI 主框架窗口(CMDIFrameWnd) 不具有与其相关联的视图.相反,每个单独的子窗口(CMDIChildWnd)具有与之关联的一个或多个视图.因此,对 MD ...

  2. PHP奇趣笔试试题一则

    $a = 3; $b = 5; if($a = 5 || $b = 7){ $a++; $b++; } echo $a, ' ', $b; 输出结果为: A.6 8 B.6 6 C.2 6 D.1 6 ...

  3. dubbo spring2.5.6与spring 3冲突解决

    dubbo的详细资料请参考: http://alibaba.github.io/dubbo-doc-static/Administrator+Guide-zh.htm#AdministratorGui ...

  4. VJP1456 最小总代价(状压)

    链接 这题卡了一天  刚开始没考虑第一个传的和最后一个传的 感觉挺简单 啪啪的敲完 居然还过了17组数据.. 正解:dp数组一维保存状态 一维保存当前传到了谁 再枚举是由谁传过来的 这样可以保证正确性 ...

  5. 深入理解c语言_从编译器的角度考虑问题_纪念Dennis Ritchie先生

    开源中国: Dennis Ritchie教授过世了,他发明了C语言,一个影响深远并彻底改变世界的计算机语言.一门经历40多年的到今天还长盛不训的语言,今天很多语言都受到C的影 响,C++,Java,C ...

  6. NameValueCollection类

    最近在研究HttpRequest类,发现里面的很多属性都返回一个NameValueCollection对象,今天再来了解一下这个神秘的对象. 随便写了个例子,发现跟HashTable类似.但是这个东西 ...

  7. iPhone, Android等设备上的Touch和Gesture

    现在,为智能触摸手机创建直观的用户界面时,最重要的部分不再是单纯的视觉效果,而是要创建出能很好地处理用户触摸交互的界面.对于Web应用而言,这意味着使用touch事件来取代传统的mouse事件.在Do ...

  8. 基于WebForm+EasyUI的业务管理系统形成之旅 -- 施工计划安排(Ⅶ)

    上篇<基于WebForm+EasyUI的业务管理系统形成之旅 -- 首页Portal界面拖拽>,主要介绍首页随客户喜好安排区块位置,更好的实现用户体验. 这两天将项目中施工计划管理归纳总结 ...

  9. oracle rac IP详解

    rac环境下vip/public/private IP的区别 每个节点要2块网卡, 3个IP,虚拟IP或者叫做业务IP,单个网卡当掉可以“漂”到其他网卡是继续提供服务 在Oracle RAC环境下,每 ...

  10. uvalive 3938 "Ray, Pass me the dishes!" 线段树 区间合并

    题意:求q次询问的静态区间连续最大和起始位置和终止位置 输出字典序最小的解. 思路:刘汝佳白书 每个节点维护三个值 pre, sub, suf 最大的前缀和, 连续和, 后缀和 然后这个题还要记录解的 ...