流媒体弱网优化之路(FEC)——FEC的应用奥秘(附demo)
流媒体弱网优化之路(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)相关推荐
- 流媒体弱网优化之路(FEC)——FEC原理简介
流媒体弱网优化之路(FEC)--FEC原理简介 文章目录 流媒体弱网优化之路(FEC)--FEC原理简介 一.信道保护措施背景介绍 1.1.ARQ丢包重传 1.2.ABC码率自适应 1.3.FEC前向 ...
- 流媒体弱网优化之路(FEC+mediasoup)——FEC引入的问题收尾
文章目录 一.前情提要 二.相关知识 2.1 ulpfec封包格式 2.2 flexfec封包格式 三.冗余原理 3.1 大帧随机丢包 3.2 大帧聚簇丢包 四.代码导读 4.1 封包调用 4.2 解 ...
- 视频会议场景下的弱网优化
疫情将远程办公,视频会议推上了风口的同时,同样也为视频会议平台的运作带来了更多的挑战.蓝猫微会创始人兼CEO 邓昀泽在LiveVideoStack线上分享中针对视频会议系统优化中弱网定义,算法评估及技 ...
- 腾讯云低延时直播系统架构设计与弱网优化实践
"直播带货"可能是2020年最具代表性的词汇之一,那么传统电商该如何融合直播系统,直播过程如何保障用户的最佳观看体验?本文由腾讯云资深架构师何书照在LiveVideoStack线上 ...
- 弱网搭建及模拟工具,弱网或无网状态下 App的优化,弱网优化,网络优化(DNS/HttpDNS)
现代移动端网络短连接的优化手段总结:请求速度.弱网适应.安全保障- http://www.52im.net/thread-1413-1-1.html 快速理解P2P技术中的NAT穿透原理- http: ...
- 弱网优化在支付宝的深度实践 | mPaaS 线下沙龙 CodeDay#1 分享实录
作者:凝睇,蚂蚁金服移动开发平台 mPaaS 技术专家.目前负责蚂蚁金服移动开发平台 mPaaS 服务端组件体系优化与架构设计. 内容采编自 CodeDay#1 杭州站现场分享,主题是<弱网优化 ...
- Android性能优化系列篇(五):弱网优化
六.弱网优化 1.Serializable原理 通常我们使用Java的序列化与反序列化时,只需要将类实现Serializable接口即可,剩下的事情就交给了jdk.今天我们就来探究一下,Java序列化 ...
- Android 网络性能优化(4)弱网优化
系列文章目录 1. Android 网络性能优化(1)概述 2. Android 网络性能优化(2)DNS优化 3. Android 网络性能优化(3)复用连接池 4. Android 网络性能优化( ...
- 百度APP移动端网络深度优化实践分享(三):移动端弱网优化篇
本文由百度技术团队"蔡锐"原创发表于"百度App技术"公众号,原题为<百度App网络深度优化系列<三>弱网优化>,感谢原作者的无私分享. ...
最新文章
- mybatis mysql方言_MyBatis 方言支持 - Mysql to 华为高斯数据库(gaussdb)
- Android-Activity启动流程
- PAT_B_1017_Java(20分)
- Haar小波变换代码实现
- 【转】理解SQL Server的安全对象和权限
- 用python做tkinter_Python下用Tkinter进行GUI编程
- python语言入门-Python语言入门.pdf
- oracle判断字符串以什么开头_oracle存储过程 判断字符串开头
- Log4J发日志邮件给多个接收者及标题、正文乱码问题
- sas和python哪个好学_Sas R和Python的比较 | 数据分析的工具选择
- 操作系统安全与系统攻击
- 最速下降法求解步骤及例题
- 发现并充分发挥你的长处—盖洛普优势测试
- 股权-公司治理的至高点,如何合理运用股权(融人、融资、融市场) 张明若
- 别混淆区别很大 LED网格屏和格栅屏区别对比及分析
- 新手小白适合做哪个跨境电商平台?测评自养号能带来哪些收益及优势?
- js实现table或ul的自动滚动
- 阿里云视频点播(VOD)控制台上传慢解决方案
- 65款实用Chrome插件推荐
- 网页商品SKU(规格)选择