ExoPlayer网速估计算法

2018-07-31  本文已影响0人  ce0b74704937

VLC网速估计算法

ExoPlayer是根据以往的下载速度来估计当前的网速

现介绍一下几个符号:

采样数组定义如下:

private final ArrayList<Sample> samples;

上述采样数组用于存储历史采样点。

采样点定义如下:

private static class Sample {

    public int index;
    public int weight;
    public float value;

}

index存储的是当前采样点在采样数组的索引,它是用来还原采样数组顺序用的,可以忽略
weight存储的是每次下载数据大小的平方根,下载数据的单位是byte
value存储的是每次下载的速度,单位是bit/s(bps)

网速估计的过程

1.采样点的添加方法

2.网速估计方法:

原理文档

其网速估计类名为SlidingPercetile.java,官网给出了该算法的原理链接,Wiki: Moving average, Wiki: Selection algorithm

个人理解

其实ExoPlayer的网速估计算法类似于移动平均,但是又不完全相同,没找到具体的讲ExoPlayer网速估计的算法文章了。个人理解,是这样的,假设每次下载的片段大小时一样的,那么这时候取的网速其实是所有网速的一个中位数,这样就去除了大值和小值的影响,这样预测出来的网速准确性未知,毕竟没找到相应的文章写这个算法的网速预测结果。

网速估计获取

上述Sample中的weight和value在ExoPlayer中按照如下方法计算所得:

注意:播放列表和音视频数据下载的Sample都会统计到计算中。

这一步完成之后,会得到当前的估计网速,bitrateEstimate。

上一篇 下一篇

猜你喜欢

热点阅读