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

[java] view plaincopy print?
  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)方法可对其进行初始化操作,该方法有一个返回值表示初始化是否成功,当初始化成功后我们再来进行进一步的操作。代码如下:

[java] view plaincopy print?
  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的左上角,那么我们来看看完整的布局 文件应该是什么样子:

[java] view plaincopy print?
  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. <io.vov.vitamio.widget.VideoView
  9. android:id="@+id/vitamio"
  10. android:layout_width="match_parent"
  11. android:layout_height="200dp"
  12. android:layout_marginTop="24dp"/>
  13. <TextView
  14. android:id="@+id/buffer_percent"
  15. android:layout_width="wrap_content"
  16. android:layout_height="wrap_content"
  17. android:layout_alignTop="@id/vitamio"
  18. android:layout_marginLeft="12dp"
  19. android:textColor="#e6ff01"/>
  20. <TextView
  21. android:id="@+id/net_speed"
  22. android:layout_width="wrap_content"
  23. android:layout_height="wrap_content"
  24. android:layout_alignTop="@id/vitamio"
  25. android:layout_marginLeft="12dp"
  26. android:layout_toRightOf="@id/buffer_percent"
  27. android:textColor="#04fa00"/>
  28. </RelativeLayout>

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

[java] view plaincopy print?
  1. //显示缓冲百分比的TextView
  2. percentTv = (TextView) findViewById(R.id.buffer_percent);
  3. //显示下载网速的TextView
  4. netSpeedTv = (TextView) findViewById(R.id.net_speed);

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

[java] view plaincopy print?
  1. videoView.setOnBufferingUpdateListener(new MediaPlayer.OnBufferingUpdateListener() {
  2. @Override
  3. public void onBufferingUpdate(MediaPlayer mp, int percent) {
  4. percentTv.setText("已缓冲:" + percent + "%");
  5. }
  6. });

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

第二个监听器如下:

[java] view plaincopy print?
  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

以上。

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

  1. 《android多媒体api》之VideoView 视频播放控件

    <android多媒体api>系列是整合梳理android开发中经常用到的媒体相关api:多媒体开发主要内容有音频.视频录制播放.摄像头操作.录制操作.流媒体.直播.推流.拉流等方面:最近 ...

  2. android播放视频控件,视频播放控件VideoView的基本使用

    在Android的界面控件中有一个视频播放控件,可以直接在手机上面开辟一个视频播放的UI,播放视频,下面ATAAW.COM大概介绍下视频控件VideoView的使用,由于视频播放是属于Android多 ...

  3. 15个iOS的视频播放控件

    2019独角兽企业重金招聘Python工程师标准>>> 精心挑选了15个人气最高的iOS视频播放控件.让你在开发视频播放功能的时候自由翱翔. ijkplayer - Bilibili ...

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

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

  5. Android开源库集合(控件)

    RecycleView: RecycleView功能增强 https://github.com/Malinskiy/SuperRecyclerView RecycleView功能增强(拖拽,滑动删除, ...

  6. HTML在线编辑器控件

    经常会在网而上看到一些类似OfficeXP 中的工具条上的按钮和图标,觉得很漂亮,这几天在学习ASP.NET的时候才明白有这么多的HTML在线编辑器控件,如博客园中使用的几种HTML在线编辑器控件: ...

  7. Android中的基础控件TextView、Button、ImageView、EditText、ProgressBar

    文章目录 1 Android中的基础控件 1.1 控件的通用属性 2 TextView 2.1 TextView的继承关系 2.2 TextView的常用属性 3 EditText 3.1 常用属性 ...

  8. android中的标题栏是什么意思,Android通用标题栏组合控件

    原标题:Android通用标题栏组合控件 快,点击蓝色"字体"关注这个公众号,一起涨姿势 由于项目中经常用到此种组合控件,就封装了下,具体效果看下图,老司机可以绕道哈! 一.主要功 ...

  9. Android中进度条控件使用

    android中进度条控件使用 ProgressBar pb = findViewById(R.id.pb);pb.setMax(100);pb.setProgress(33); 转载于:https: ...

最新文章

  1. 斐波那契数列的低效与高效解法 【转】
  2. rdbms mysql_RDBMS-mysql初步
  3. python两数相加取_Leetcode_两数相加_Python
  4. 【NLP】NLP文本风格迁移,秒变金庸风
  5. java网络编程之Socket编程
  6. android 帧动画旋转,安卓动画实现
  7. 基于深度学习的视频预测研究综述
  8. azure 入门_Azure数据目录入门
  9. Linux内核分析(六) 文件系统
  10. 第一部分 1.2 定义OC的类和创建OC的对象
  11. linux uuid挂载磁盘_Linux磁盘设备磁盘设备的UUID标识代码(sda,sdb,sdc…)变化的解决办法...
  12. word插入目录右边对不齐
  13. php中的ul怎么居中,让 UL 与 LI 左对齐
  14. 使用免费ssl证书在iis6 https的配置方法!
  15. 均方根误差有没有单位_mse均方误差是否有单位
  16. pads2007 LISENCE 报错解决方案
  17. AMEsim柱塞泵的建模学习
  18. WiFi连接过程简要分析
  19. mac系统如何连接服务器地址,mac如何远程连接服务器地址
  20. 复杂性思维第二版 三、小世界图

热门文章

  1. iOS UI基础-4.1应用程序管理 字典转Model
  2. 华为三层交换机(5328)DHCP中继应用配置实例
  3. Jsp页面中使用fckeditor控件的两种方法
  4. 夏日里的激情——FE鹅和鸭农庄行
  5. JDBC编程的事务处理
  6. XML(一)XML大揭秘
  7. (转)使用Spring配置文件实现事务管理
  8. 预加载系列一:DNS Prefetching 的正确使用姿势
  9. SSM项目搭建一(终)
  10. svn Web管理svnadmin