ULPFEC在WebRTC中的实现[转载]
一、WebRTC对抗网络丢包的两种手段
二、ULPFEC
三、ULPFEC基本概念
ULPFEC数据包中包含发送端需要告知接收端的一些重要信息,包括本FEC数据包所保护的媒体数据、保护级别和每个级别的保护长度。特别地,FEC数据包针对每个保护级别k设置一个偏移量掩码m(k),如果m(k)的第i位被设置为1,则序列号为N+i的媒体数据包在本FEC包的第k级别被保护。其中N为基准序列号,在本FEC包中设置。第k级别保护的媒体数据大小由L(k)指示,该值也在FEC包中设置。以上保护长度、偏移量掩码、负载类型和基准序列号能够完全确定生成FEC数据包中的奇偶校验码。
一般来说,FEC是带宽和保护力度的权衡,针对同样的媒体数据,更多的FEC数据包意味着更有力的抗丢包保护,但同时也会消耗更多的带宽。通常情况下,对于媒体数据包,不同部分的重要程度不一样。因此,我们可以针对数据包的不同部分实施不同程度保护(即非均等保护前向纠错),以充分利用带宽资源。更多带宽花费在更重要的数据部分,相反,较少带宽花费在不那么重要的数据部分。媒体数据包根据重要程度划分为若干部分,每个部分就是我们所说的保护级别,每个部分的长度即为保护长度,每个FEC包可携带多个保护级别的奇偶校验码。根据数据包不同部分重要程度进行保护的算法,就是所谓的ULPFEC非均等保护前向纠错。
作者:weizhenwei
链接:https://www.jianshu.com/p/06a27ebacec7
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
四、WebRTC中FEC和ARQ的优缺点
FEC
优点:单向传输,延迟小;
缺点:丢包率波动大时,抗丢包能力差,网络利用率不高;
ARQ
优点:网络利用率高;
缺点:延迟大,当延迟大或拥塞丢包时,会导致更严重的拥塞,不能使用ARQ;
ARQ全称Automatic Repeate reQuest,丢包重传,是一种通过重传关键数据包来纠错的信道保护算法,通常使用的是选择重传ARQ。
具体来说,发送端每一个数据包都植入顺序号码和时间戳,顺序号码代表被发送数据包的顺序,允许接收端可以通过监测顺序号码来发现丢包事件;时间戳代表语音视频数据包解码的时间点。发送端发送数据包后,如果接收端没有收到,接收端将会通过RTCP/TCP信道发送一个重传请求。发送端维护一个缓冲队列,当收到重传请求的时候将会重传数据包。接收端也会维护一个缓冲队列,等待尚未收到的数据包以及对已经收到的数据包进行排序。在解码deadline到来之前,接收端把缓冲区的数据包交给解码器进行解码。在解码deadline的时间点,接收端要么已经收齐了预期的数据包,要么已经决定放弃继续等待。
无论是码率自适应、FEC还是ARQ,都要依赖带宽估算算法来工作。码率自适应根据带宽估算的结果来自动调节码率;FEC和ARQ根据带宽估算的结果来分配冗余数据所占的带宽。
ULPFEC在WebRTC中的实现[转载]的更多相关文章
- Android IOS WebRTC 音视频开发总结(八十七)-- WebRTC中丢包重传NACK实现分析
本文主要介绍WebRTC中丢包重传NACK的实现,作者:weizhenwei ,文章最早发表在编风网,微信ID:befoio 支持原创,转载必须注明出处,欢迎关注我的微信公众号blacker(微信ID ...
- Android IOS WebRTC 音视频开发总结(八十六)-- WebRTC中RTP/RTCP协议实现分析
本文主要介绍WebRTC中的RTP/RTCP协议,作者:weizhenwei ,文章最早发表在编风网,微信ID:befoio 支持原创,转载必须注明出处,欢迎关注我的微信公众号blacker(微信ID ...
- webrtc中APM(AudioProcessing module)的使用
一,实例化和配置 AudioProcessing* apm = AudioProcessing::Create(0); //这里的0指的是channelID,只是一个标注那个通道的表示 apm-> ...
- webrtc中的带宽自适应算法
转自:http://www.xuebuyuan.com/1248366.html webrtc中的带宽自适应算法分为两种: 1, 发端带宽控制, 原理是由rtcp中的丢包统计来动态的增加或减少带宽,在 ...
- git在eclipse中的配置 转载
git在eclipse中的配置 转载 一_安装EGIT插件 http://download.eclipse.org/egit/updates/ 或者使用Eclipse Marketplace,搜索EG ...
- C#高级编程六十九天----DLR简介 .在.NET中使用DLR(转载) 我也来说说Dynamic
DLR 一.近年来,在TIOBE公司每个月发布的编程语言排行榜中,C#总是能挤进前十名,而在最近十年来,C#总体上呈现上升的趋势.C#能取得这样的成绩,有很多因素,其中它在语言特性上的锐意进取让人印象 ...
- C# json反序列化 对象中嵌套数组 (转载) 可能会导致循环或多重级联路径。请指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其他 FOREIGN KEY 约束。
C# json反序列化 对象中嵌套数组 (转载) 看图: 这里可以看到是二层嵌套!!使用C#如何实现?? 思路:使用list集合实现 → 建立类 → list集合 → 微软的 Newtonso ...
- WebRTC中的NetEQ
NetEQ使得WebRTC语音引擎能够快速且高解析度地适应不断变化的网络环境,确保了音质优美且缓冲延迟最小,其集成了自适应抖动控制以及丢包隐藏算法. WebRTC和NetEQ概述 WebRTC Web ...
- webRTC中回声消除(AEC)模块编译时aec_rdft.c文件报错:
webRTC中回声消除(AEC)模块编译时aec_rdft.c文件报错. 原因是: 局部变量ip跟全局变量冲突的问题,可以将局部变量重新命名一下,就可以通过编译了. aec_rdft.c修改以后文件代 ...
随机推荐
- el-tree点击获取直接父级的属性
这里是可以一直往上获取它的直接父级的所有属性以及状态 通过这两个事件其中的一个 在方法里可以写上 methods:{ curCheck(data,state){ const curNode = thi ...
- js-object引用示例
function displayInfo(args){ var output=""; if(typeof args.name == "string"){ out ...
- HDU 1688 Sightseeing 【输出最短路+次短路条数】
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1688 题目大意:给n个点,m条有向边.再给出起点s, 终点t.求出s到t的最短路条数+次短路条数. 思 ...
- PAT B1024/A1073 科学计数法
书中AC代码 #include <cstdio> #include <cstring> #include <iostream> #include <cmath ...
- 经验:什么影响了数据库查询速度、什么影响了MySQL性能 (转)
一.什么影响了数据库查询速度 1.1 影响数据库查询速度的四个因素 1.2 风险分析 QPS:Queries Per Second意思是“每秒查询率”,是一台服务器每秒能够相应的查询次数,是对一个特定 ...
- java 字节流与字符流的区别(转)
字节流与和字符流的使用非常相似,两者除了操作代码上的不同之外,是否还有其他的不同呢? 实际上字节流在操作时本身不会用到缓冲区(内存),是文件本身直接操作的,而字符流在操作时使用了缓冲区,通过缓冲区再操 ...
- Sublime Text3 插件收录
收录常用的Sublime Text3 插件, 方便安装使用,免得每次一个个的搜, 欢迎补充 安装方法直接打开install package 搜索安装 1. Babel 支持react jsx语法 2. ...
- Left4Dead2 LAN Online
Left4Dead2 LAN Online Franklin vs Wolverine 求生之路 局域网联机说明 ============================ 局域网联机方法: 1.先找到 ...
- UVA571Jugs题解--简单数论(其实是瞎搞)
题目链接 https://cn.vjudge.net/problem/UVA-571 分析 刚做了道倒水问题的题想看看能不能水二倍经验,结果发现了这道题 题意翻译:https://www.cnblog ...
- 【强化学习】MOVE37-Introduction(导论)/马尔科夫链/马尔科夫决策过程
写在前面的话:从今日起,我会边跟着硅谷大牛Siraj的MOVE 37系列课程学习Reinforcement Learning(强化学习算法),边更新这个系列.课程包含视频和文字,课堂笔记会按视频为单位 ...