移动性能测试 看剧流畅还省电?视频类应用预缓存策略功耗评测详解

安卓绿色联盟 · 2019年01月25日 · 959 次阅读

你是否遇到过这样的问题,在疯狂追剧时手机电量消耗过快,一度以为是屏幕亮度等引起?但当在相同的屏幕亮度、音量、网络环境(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

三、预置条件

  1. 在统一 WiFi 环境下,关闭手机 WiFi 自动更新版本;
  2. 播放器的设置相同:播放 720 超清画质,视频播放无弹窗,抓包过程中不会出现广告;
  3. 手机连接 USB,手机测试时电量大于 50。

四、操作步骤

  1. 打开 APP 播放影片,播放 10 分钟后通过 tcpdump 抓取接下来 10 分钟的数据包生成.pcap 文件;
  2. 使用 Wireshark 打开抓取到的.pcap 文件并将其导出成 csv 文件;
  3. 按时间顺序统计所有涉及本机 ip(包括上传下载)的数据包记录到集合中,集合大小为总数据包数,本机 ip 一般以 192.168 开头;
  4. 以 50 毫秒为周期,将集合进行分组。一组内可能有多条数据包记录,例如 50 毫秒内有多条数据包记录;也可能多个连续组数据包都为 0,例如两条相邻数据包记录之间时长大于 50 毫秒;
  5. 统计总分组数为总周期数,数据包为 0 的组数为零包周期数;
  6. 计算平均包和稀疏度。
  • 平均包 = 总数据包个数 / 总周期数

  • 稀疏度 = 零数据包周期数 / 总周期数

平均包较小且稀疏度值较大则表明 WiFi 在线视频播放的缓存策略较优。

平均包较大且稀疏度较小,意味着频繁缓冲,WiFi 不间断工作,WiFi 视频播放的缓存策略较差。

测试结果

多次测试在线视频播放的 WiFi 工作状态和其对应的功耗,得出如下关系:

  • 平均包小于 10 并且稀疏度大于 0.8 时,功耗值小于 30 毫安;
  • 平均包小于 20 并且稀疏度大于 0.5 小于 0.8 时,功耗值大于 30 毫安小于 50 毫安;
  • 平均包大于 20 或者稀疏度小于 0.5 时,功耗值大于 50 毫安;

image

本次测试的 8 款应用的 WiFi 分布状态指标对比如下图:

image

可以看出咪咕视频的稀疏度小于 0.5,测试值为 0.3055,功耗值大于 50 毫安,功耗值较大。可见 WiFi 长时间处于工作状态,预缓存策略有待整改。通过功耗值的对比,咪咕视频观看 1 小时视频耗用的功耗相当于影视大全的 1.5-2 小时的功耗值。

image

相关技术要点解析

一、预缓存流程

视频在线播放过程如下图所示,大体涉及两个过程:

  1. 从服务器缓存视频到内存上,假设缓存速率是 v1 ;
  2. 播放器的解码器从内存上读取缓存数据解码渲染到屏幕上,假设解码速率是 v2。

image

理论上视频播放需要满足的条件是:任何时刻 (t) 的当前冗余缓存视频数据 D 大于 0(D=v1*t-v2*t>0)。但是实际上网络带宽或者用户拖动进度条等因素都会对播放产生影响,所以 D 值的选取很大程度上决定了用户的体验。

二、WiFi 工作状态

连续一段时间的 WiFi 工作状态反映出当前冗余缓存是否恰当,也反映出预缓存策略是否恰当。WiFi 主要有三种状态:工作状态(Active)、监听状态(listen)和休眠状态(sleep)。工作状态和监听状态主要体现在数据包的传递,休眠状态下理解成零数据包的传递。工作状态和监听状态越多功耗越大,休眠状态越多功耗越小。因此我们可以通过 WiFi 状态分布查看其功耗的大小。

三、预缓存策略对 WiFi 工作状态的影响

1.长期处于监听状态(listen)——高功耗

冗余缓存较小,视频解码播放完成需要继续缓存才能流畅播放,需要频繁的通过 WiFi 传递数据包。WiFi 启动上传或者下载一个有效的数据包后,在进入睡眠状态之前会有一个监听状态(listen)来保证 WiFi 连接的及时性。对于频繁的小包传递会使 WiFi 有较长的时间在监听状态,功耗较大。

2.长期处于工作状态(Active)——高功耗

冗余缓存太大如下图,WiFi 频繁的传递数据包,缓存的数据远大于当前视频解码播放的数据,造成 WiFi 长时间处于工作状态,功耗较大。部分用户观看视频中途不看,过多的缓存内容也会造成功耗的浪费。

image

3.WiFi 间歇性工作——低功耗

冗余缓存适中情况如下图,缓存数据大于当前播放视频解码数据时候,WiFi 不进行数据包传递进入休眠状态以降低功耗。当冗余 D 值被消耗到某个阈值时,WiFi 唤醒工作.。WiFi 间歇工作特性明显,功耗得到极大优化。

image

四、平均包和稀释度

为了解视频播放过程中 WiFi 工作状态的分布,衡量预缓存策略,我们引入了两个评测指标:单位周期平均数据包数(平均包)和数据包为零的周期数占比(稀疏度)。

平均包(avePkgs)的个数越少,代表数据包传递越少,处于工作状态的时间就越少。稀疏度越大,代表零数据包的个数越多,处于休眠状态时间越长。

总数据包数(Pkgs):TCP/IP 协议通信传输中的数据单位称之为数据包,统计数据包出现的总次数,包括上传和下载的数据包次数。

总周期数:实际获取数据包的总时间/基本周期(50 毫秒)。

零数据包周期数:相邻两条数据包记录时间之间大于基本周期,则称之有一组零数据。

优化建议

在不影响流畅播放的前提下,可以通过以下方法进行优化:

  1. WiFi 视频播放场景下,采用 WiFi 间歇工作的方式来提升功耗体验;
  2. 通过当前时刻的网络带宽 d、缓存速度 v1、播放速度 v2、播放进度 c 和当前冗余缓存数据量 D 等参考指标综合计算一个值 y = f (d,v1,v2,c,D), 当 y 值满足某个设定的阈值,WiFi 停止缓存数据,让其进入休眠。
  3. 各大厂商也可以引入更多的 WiFi 缓存模型来达到即能满足视频流畅播放又能满足 WiFi 功耗优化的目的。

* 以上内容首发于安卓绿色联盟公众号,解释权归华为终端开放实验室所有

暂无回复。
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册