流媒体弱网优化之路(FEC)

您所在的位置:网站首页 网络直播的应用场景 流媒体弱网优化之路(FEC)

流媒体弱网优化之路(FEC)

2024-07-13 11:19| 来源: 网络整理| 查看: 265

流媒体弱网优化之路(FEC)——FEC的应用奥秘(附demo) —— 我正在的github给大家开发一个用于做实验的项目 —— github.com/qw225967/Bifrost 目标:可以让大家熟悉各类Qos能力、带宽估计能力,提供每个环节关键参数调节接口并实现一个json全配置,提供全面的可视化算法观察能力。 欢迎大家使用 ——

文章目录 流媒体弱网优化之路(FEC)——FEC的应用奥秘(附demo)一、FEC应用简析1.1 FEC原理简述1.2 FEC编码的不同 二、FEC丢包模型三、测试对比四、结果与分析

提示:demo链接在文章末尾,有兴趣自取。

一、FEC应用简析

  前面的NACK方案能在延迟较小的情况下快速补偿丢包,但是随着丢包率上升以及延迟增加,纯NACK方案逐渐无法满足传输需求了。那么在已知高延迟高丢包的环境下,我们可以通过提前冗余去做数据补充,让我们可以快速有效的抵抗丢包,这就是FEC(前向纠错)在较差环境下抗丢包的优势,当然它的劣势就是会固定地增加带宽来抵抗丢包,因此我们更多考虑将他使用在超过20%丢包以上的场景上。

1.1 FEC原理简述

  我这里有一篇文章简单分析了固定冗余的FEC算法原理,从中可以了解FEC的基本逻辑:FEC原理

1.2 FEC编码的不同

  各类FEC编码都是为了优化冗余比以及算力的,这里有一些记录可以看一下:RS与FEC编码

二、FEC丢包模型

  根据上次nack中提到的丢包模型NACK丢包模型,我们来计算一下这里使用fec可以达到的效果: 在这里插入图片描述

  上图提到重传问题,我们在这里加入冗余比较低的基于范德蒙矩阵的fec(webrtc中的fec冗余比会远大于这个,而且动态效果也会更好,意味着会比现在带宽减少较多——webrtc的ulpfec一次最多支持48个媒体包,webrtc冗余度介绍)

在这里插入图片描述

  上图中弱网条件为:30%丢包 + 70ms rtt的情况。   我们仿真使用的是基于范德蒙固定矩阵的FEC算法,设置了8个包打4个冗余度的情况进行实验(后续可以试试别的冗余度论证)。 那么计算过程可以归纳为:   1.当发送24个包时,会有16个原始数据 + 8个冗余数据。到达对端时可能会丢失7个包;   2.丢失的数据中,有可能有5个数据包是原始数据、2个数据包是冗余数据;   3.而冗余数据每1一个可以压缩2个原始数据,那么可恢复的可能就是75%;   4.那么理论上5个原始数据中有3-4个包可以有效恢复,也就是1 ~ 2个包会发生重传的情况。

  因此计算出来第一次重传在30%丢包的情况下可能会明显降低至 12%左右(30% * 2/5 = 12%)下降约18%,下降比1 :1.7;

三、测试对比

  根据上述的理论分析,我们对基于范德蒙矩阵的fec进行仿真,对比重传发生概率的下降比。   环境:20% 丢包 + 70ms rtt 在这里插入图片描述   环境:30% 丢包 + 70ms rtt 在这里插入图片描述

四、结果与分析

  对上述理论进行分析:   1.FEC提前进行冗余压缩并不是全部包都做冗余,而是存在对应的冗余比率,我们仿真使用的基于范德蒙矩阵的FEC冗余度仍然存在浪费,换到webrtc原生的FEC会更能适应真正的网络环境。即使如此,我们仿真的结果依然能反馈出FEC可以有效降低重传概率;   2.同时观察多组数据发现,FEC+NACK的方案还可以有效降低重传的次数,理论上会在高丢包情况下反应得更明显一些。而且在高丢包环境下,FEC的优势是:      ■ 无需等待重传的延迟;     ■ 单个FEC包恢复多个,降低带宽消耗;   3.根据上述降重传次数的情况,我们还可以分析出在高延迟环境下,FEC比NACK延迟更低,因为随着RTT的上涨,重传周期会越来越大。

  所以,我们可以得知:   1.FEC可以有效降低第一次丢包的占比,明显降低丢包的概率;   2.FEC可以减少重传次数,随着丢包率越大,这样的表现越明显;   3.根据第二条结论,我们可以知道在高延迟的情况下,FEC对丢包补偿的效果体现越明显。

大家感兴趣可以去我的github把demo克隆下来试试。   demo连接:[email protected]:qw225967/transport-demo.git



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3