你是否遇到过这样的问题,在疯狂追剧时手机电量消耗过快,一度以为是屏幕亮度等引起?但当在相同的屏幕亮度、音量、网络环境(WiFi网络)等条件下刷同一部剧,不同视频类应用的耗电量仍不同。
那么还有哪些因素会增加视频应用的耗电量?华为终端开放实验室从预缓存策略角度出发,分别对8款视频类应用的耗电情况进行了对比分析,带你探究预缓存策略对这些应用耗电量的影响!
什么是预缓存?
为保证视频播放流畅,在视频播放过程中,需要将要播放的视频数据临时下载到内存中,以便解码后在屏幕上播放。这种预先临时下载到内存中的行为,我们称之为预缓存。视频类应用所采用的预缓存策略是影响耗电的重要原因。这些数据在播放完成、中途退出或掉电的情况下都可能被清除。
预缓存如何影响应用耗电?
预缓存策略会直接影响WiFi状态,进而影响应用的功耗值(耗电量)。故通过WiFi状态的分布数据可以直观体现视频类应用的具体功耗。
image本次,华为终端开放实验室选取了8款常见的视频类应用作为评测对象,探究各应用不同预缓存策略对手机功耗的影响。
测试环境及操作步骤
一、测试环境
硬件环境:华为Mate 20
软件版本:Android 9.0
二、测试范围
本次测试选取了常见的8款视频类App:
爱奇艺9.12.0、优酷视频7.5.9、咪咕视频5.5.5.1、腾讯视频6.5.8.17981、搜狐视频7.0.1、影视大全2.8.6、百度视频8.8.0、乐视视频8.7
三、预置条件
- 在统一WiFi环境下,关闭手机WiFi自动更新版本;
- 播放器的设置相同:播放720超清画质,视频播放无弹窗,抓包过程中不会出现广告;
- 手机连接USB,手机测试时电量大于50。
四、操作步骤
- 打开APP播放影片,播放10分钟后通过tcpdump抓取接下来10分钟的数据包生成.pcap文件;
- 使用Wireshark打开抓取到的.pcap文件并将其导出成csv文件;
- 按时间顺序统计所有涉及本机ip(包括上传下载)的数据包记录到集合中,集合大小为总数据包数,本机ip一般以192.168开头;
- 以50毫秒为周期,将集合进行分组。一组内可能有多条数据包记录,例如50毫秒内有多条数据包记录;也可能多个连续组数据包都为0,例如两条相邻数据包记录之间时长大于50毫秒;
- 统计总分组数为总周期数,数据包为0的组数为零包周期数;
- 计算平均包和稀疏度。
-
平均包 = 总数据包个数 / 总周期数
-
稀疏度 = 零数据包周期数 / 总周期数
平均包较小且稀疏度值较大则表明WiFi在线视频播放的缓存策略较优。
平均包较大且稀疏度较小,意味着频繁缓冲,WiFi不间断工作,WiFi视频播放的缓存策略较差。
测试结果
多次测试在线视频播放的WiFi工作状态和其对应的功耗,得出如下关系:
- 平均包小于10并且稀疏度大于0.8时,功耗值小于30毫安;
- 平均包小于20并且稀疏度大于0.5小于0.8时,功耗值大于30毫安小于50毫安;
- 平均包大于20或者稀疏度小于0.5时,功耗值大于50毫安;
本次测试的8款应用的WiFi分布状态指标对比如下图:
image可以看出咪咕视频的稀疏度小于0.5,测试值为0.3055,功耗值大于50毫安,功耗值较大。可见WiFi长时间处于工作状态,预缓存策略有待整改。通过功耗值的对比,咪咕视频观看1小时视频耗用的功耗相当于影视大全的1.5-2小时的功耗值。
image相关技术要点解析
一、预缓存流程
视频在线播放过程如下图所示,大体涉及两个过程:
- 从服务器缓存视频到内存上,假设缓存速率是v1 ;
- 播放器的解码器从内存上读取缓存数据解码渲染到屏幕上,假设解码速率是v2。
理论上视频播放需要满足的条件是:任何时刻(t)的当前冗余缓存视频数据D大于0(D=v1t-v2t>0)。但是实际上网络带宽或者用户拖动进度条等因素都会对播放产生影响,所以D值的选取很大程度上决定了用户的体验。
二、WiFi工作状态
连续一段时间的WiFi工作状态反映出当前冗余缓存是否恰当,也反映出预缓存策略是否恰当。WiFi主要有三种状态:工作状态(Active)、监听状态(listen)和休眠状态(sleep)。工作状态和监听状态主要体现在数据包的传递,休眠状态下理解成零数据包的传递。工作状态和监听状态越多功耗越大,休眠状态越多功耗越小。因此我们可以通过WiFi状态分布查看其功耗的大小。
三、预缓存策略对WiFi工作状态的影响
1.长期处于监听状态(listen)——高功耗
冗余缓存较小,视频解码播放完成需要继续缓存才能流畅播放,需要频繁的通过WiFi传递数据包。WiFi启动上传或者下载一个有效的数据包后,在进入睡眠状态之前会有一个监听状态(listen)来保证WiFi连接的及时性。对于频繁的小包传递会使WiFi有较长的时间在监听状态,功耗较大。
2.长期处于工作状态(Active)——高功耗
冗余缓存太大如下图,WiFi频繁的传递数据包,缓存的数据远大于当前视频解码播放的数据,造成WiFi长时间处于工作状态,功耗较大。部分用户观看视频中途不看,过多的缓存内容也会造成功耗的浪费。
image3.WiFi间歇性工作——低功耗
冗余缓存适中情况如下图,缓存数据大于当前播放视频解码数据时候,WiFi不进行数据包传递进入休眠状态以降低功耗。当冗余D值被消耗到某个阈值时,WiFi唤醒工作.。WiFi间歇工作特性明显,功耗得到极大优化。
image四、平均包和稀释度
为了解视频播放过程中WiFi工作状态的分布,衡量预缓存策略,我们引入了两个评测指标:单位周期平均数据包数(平均包)和数据包为零的周期数占比(稀疏度)。
平均包(avePkgs)的个数越少,代表数据包传递越少,处于工作状态的时间就越少。稀疏度越大,代表零数据包的个数越多,处于休眠状态时间越长。
总数据包数(Pkgs):TCP/IP协议通信传输中的数据单位称之为数据包,统计数据包出现的总次数,包括上传和下载的数据包次数。
总周期数:实际获取数据包的总时间/基本周期(50毫秒)。
零数据包周期数:相邻两条数据包记录时间之间大于基本周期,则称之有一组零数据。
优化建议
在不影响流畅播放的前提下,可以通过以下方法进行优化:
- WiFi视频播放场景下,采用WiFi间歇工作的方式来提升功耗体验;
- 通过当前时刻的网络带宽d、缓存速度v1、播放速度v2、播放进度c和当前冗余缓存数据量D等参考指标综合计算一个值y = f (d,v1,v2,c,D), 当y值满足某个设定的阈值,WiFi停止缓存数据,让其进入休眠。
- 各大厂商也可以引入更多的WiFi缓存模型来达到即能满足视频流畅播放又能满足WiFi功耗优化的目的。
*以上内容首发于安卓绿色联盟公众号,解释权归华为终端开放实验室所有
网友评论