流媒体弱网优化之路(FEC)——FEC的应用奥秘(附demo)

文章目录

  • 流媒体弱网优化之路(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连接:git@github.com:qw225967/transport-demo.git

流媒体弱网优化之路(FEC)——FEC的应用奥秘(附demo)相关推荐

  1. 流媒体弱网优化之路(FEC)——FEC原理简介

    流媒体弱网优化之路(FEC)--FEC原理简介 文章目录 流媒体弱网优化之路(FEC)--FEC原理简介 一.信道保护措施背景介绍 1.1.ARQ丢包重传 1.2.ABC码率自适应 1.3.FEC前向 ...

  2. 流媒体弱网优化之路(FEC+mediasoup)——FEC引入的问题收尾

    文章目录 一.前情提要 二.相关知识 2.1 ulpfec封包格式 2.2 flexfec封包格式 三.冗余原理 3.1 大帧随机丢包 3.2 大帧聚簇丢包 四.代码导读 4.1 封包调用 4.2 解 ...

  3. 视频会议场景下的弱网优化

    疫情将远程办公,视频会议推上了风口的同时,同样也为视频会议平台的运作带来了更多的挑战.蓝猫微会创始人兼CEO 邓昀泽在LiveVideoStack线上分享中针对视频会议系统优化中弱网定义,算法评估及技 ...

  4. 腾讯云低延时直播系统架构设计与弱网优化实践

    "直播带货"可能是2020年最具代表性的词汇之一,那么传统电商该如何融合直播系统,直播过程如何保障用户的最佳观看体验?本文由腾讯云资深架构师何书照在LiveVideoStack线上 ...

  5. 弱网搭建及模拟工具,弱网或无网状态下 App的优化,弱网优化,网络优化(DNS/HttpDNS)

    现代移动端网络短连接的优化手段总结:请求速度.弱网适应.安全保障- http://www.52im.net/thread-1413-1-1.html 快速理解P2P技术中的NAT穿透原理- http: ...

  6. 弱网优化在支付宝的深度实践 | mPaaS 线下沙龙 CodeDay#1 分享实录

    作者:凝睇,蚂蚁金服移动开发平台 mPaaS 技术专家.目前负责蚂蚁金服移动开发平台 mPaaS 服务端组件体系优化与架构设计. 内容采编自 CodeDay#1 杭州站现场分享,主题是<弱网优化 ...

  7. Android性能优化系列篇(五):弱网优化

    六.弱网优化 1.Serializable原理 通常我们使用Java的序列化与反序列化时,只需要将类实现Serializable接口即可,剩下的事情就交给了jdk.今天我们就来探究一下,Java序列化 ...

  8. Android 网络性能优化(4)弱网优化

    系列文章目录 1. Android 网络性能优化(1)概述 2. Android 网络性能优化(2)DNS优化 3. Android 网络性能优化(3)复用连接池 4. Android 网络性能优化( ...

  9. 百度APP移动端网络深度优化实践分享(三):移动端弱网优化篇

    本文由百度技术团队"蔡锐"原创发表于"百度App技术"公众号,原题为<百度App网络深度优化系列<三>弱网优化>,感谢原作者的无私分享. ...

最新文章

  1. mybatis mysql方言_MyBatis 方言支持 - Mysql to 华为高斯数据库(gaussdb)
  2. Android-Activity启动流程
  3. PAT_B_1017_Java(20分)
  4. Haar小波变换代码实现
  5. 【转】理解SQL Server的安全对象和权限
  6. 用python做tkinter_Python下用Tkinter进行GUI编程
  7. python语言入门-Python语言入门.pdf
  8. oracle判断字符串以什么开头_oracle存储过程 判断字符串开头
  9. Log4J发日志邮件给多个接收者及标题、正文乱码问题
  10. sas和python哪个好学_Sas R和Python的比较 | 数据分析的工具选择
  11. 操作系统安全与系统攻击
  12. 最速下降法求解步骤及例题
  13. 发现并充分发挥你的长处—盖洛普优势测试
  14. 股权-公司治理的至高点,如何合理运用股权(融人、融资、融市场) 张明若
  15. 别混淆区别很大 LED网格屏和格栅屏区别对比及分析
  16. 新手小白适合做哪个跨境电商平台?测评自养号能带来哪些收益及优势?
  17. js实现table或ul的自动滚动
  18. 阿里云视频点播(VOD)控制台上传慢解决方案
  19. 65款实用Chrome插件推荐
  20. 网页商品SKU(规格)选择

热门文章

  1. SRi4K NFC Card Datasheet
  2. 【收藏】NOI Linux 2.0版 图文安装与使用详细教程
  3. MCADEx开发 ProE二次开发 Creo二次开发-Creo Toolkit文件说明
  4. [计蒜客][字符串]最长的名字
  5. 泛微E8创建自定义报表
  6. 7-28 猴子选大王 (20 分),从中学习约瑟夫环
  7. 广告牌定时器怎么设置时间_招牌定时器怎么设置时间?简单吗?
  8. 2.基本电气控制电路
  9. sqlserver自动定时备份
  10. 第一章 安装Ogre 3D引擎