最近做项目时,要用到视频播放器,做好以后发现,在播放网络视频是不能像其它软件一样如(PPTV、QQLIVE)等,在视频缓冲的时候显示视频缓冲的大小(kb/s)。上网找了很多好像没有类似的方法。比如:
videoview的getBufferPercentage:这个方法是获取视频加载的百分比,但是不能转换为KB/S,而且视频已经播放出来了才能出发这个事件,一般用来设置seekBar。
MediaPlayer的setOnBufferingUpdateListener:和getBufferPercentage方法一样。
也有人说可以用MediaPlayer.
MediaPlayer:这个方法中的
MEDIA_INFO_DOWNLOAD_RATE_CHANGED来监听下载速度。但是我找了半天也没有,我用的是ANDROID2.2.
都不行,然后我就想到了流量监控,不是就能知道在视频缓冲的时候用了多少流量了嘛。
所有就找到了TrafficStats这个类,用getUidRxBytes这个方法来查找我这个程序使用的流量。这个方法需要传递一个UID(进程ID)
下面是通过程序包名来转换UID的方法
本身
TrafficStats.
getUidRxBytes查找出来的是小b,所以要除以1024来转换为KB。
但是这个方法统计的流量是从开机一直到关机的流量,不能实现我所想达到的“显示视频加载速度”的要求。
于是我想到了倒计时的原理,我们能不能让他每一秒都运行一次,用上一秒的流量减去下一秒的流量不就能知道每一秒视频缓冲的大小了吗!
实例化一个
timer,在新建一个
TimerTask处理我们的代码,
timer.schedule(task, 1000,1000)就是在一秒之后执行
TimerTask
中的代码,而且1秒循环一次。因为
TimerTask
是一个异步线程,所以要新建一个Handler来获取这个值
最后把这个值显示到
progressBar中!
下面是效果图,显示的值和360手机卫士的流量浮框是一样的!
Android视频播放器缓冲时流量显示的实现方式
最新推荐文章于 2021-06-02 18:52:09 发布