一、WebRTC对抗网络丢包的两种手段

    丢包重传(NACK)和前向纠错(FEC)。FEC是一种前向纠错技术,发送端将负载数据加上一定的冗余纠错码一起发送,接收端根据接收到的纠错码对数据进行差错检测,如果发现差错,则利用纠错码进行纠错。而ULPFEC(Uneven Level Protection Forward Error Correction,直译为非均等保护前向纠错)则是WebRTC实现的FEC方案之一。

二、ULPFEC

    ULPFEC由RFC5109[2]定义,在WebRTC中以RED格式进一步封装在RTP中传输。该标准使用XOR操作基于多个多媒体数据包生成FEC数据包,然后在接收端根据FEC数据包和已接收数据包恢复丢失的数据包。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中的实现[转载]的更多相关文章

  1. Android IOS WebRTC 音视频开发总结(八十七)-- WebRTC中丢包重传NACK实现分析

    本文主要介绍WebRTC中丢包重传NACK的实现,作者:weizhenwei ,文章最早发表在编风网,微信ID:befoio 支持原创,转载必须注明出处,欢迎关注我的微信公众号blacker(微信ID ...

  2. Android IOS WebRTC 音视频开发总结(八十六)-- WebRTC中RTP/RTCP协议实现分析

    本文主要介绍WebRTC中的RTP/RTCP协议,作者:weizhenwei ,文章最早发表在编风网,微信ID:befoio 支持原创,转载必须注明出处,欢迎关注我的微信公众号blacker(微信ID ...

  3. webrtc中APM(AudioProcessing module)的使用

    一,实例化和配置 AudioProcessing* apm = AudioProcessing::Create(0); //这里的0指的是channelID,只是一个标注那个通道的表示 apm-> ...

  4. webrtc中的带宽自适应算法

    转自:http://www.xuebuyuan.com/1248366.html webrtc中的带宽自适应算法分为两种: 1, 发端带宽控制, 原理是由rtcp中的丢包统计来动态的增加或减少带宽,在 ...

  5. git在eclipse中的配置 转载

    git在eclipse中的配置 转载 一_安装EGIT插件 http://download.eclipse.org/egit/updates/ 或者使用Eclipse Marketplace,搜索EG ...

  6. C#高级编程六十九天----DLR简介 .在.NET中使用DLR(转载) 我也来说说Dynamic

    DLR 一.近年来,在TIOBE公司每个月发布的编程语言排行榜中,C#总是能挤进前十名,而在最近十年来,C#总体上呈现上升的趋势.C#能取得这样的成绩,有很多因素,其中它在语言特性上的锐意进取让人印象 ...

  7. C# json反序列化 对象中嵌套数组 (转载) 可能会导致循环或多重级联路径。请指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其他 FOREIGN KEY 约束。

    C# json反序列化 对象中嵌套数组 (转载)   看图: 这里可以看到是二层嵌套!!使用C#如何实现?? 思路:使用list集合实现 → 建立类 → list集合 → 微软的   Newtonso ...

  8. WebRTC中的NetEQ

    NetEQ使得WebRTC语音引擎能够快速且高解析度地适应不断变化的网络环境,确保了音质优美且缓冲延迟最小,其集成了自适应抖动控制以及丢包隐藏算法. WebRTC和NetEQ概述 WebRTC Web ...

  9. webRTC中回声消除(AEC)模块编译时aec_rdft.c文件报错:

    webRTC中回声消除(AEC)模块编译时aec_rdft.c文件报错. 原因是: 局部变量ip跟全局变量冲突的问题,可以将局部变量重新命名一下,就可以通过编译了. aec_rdft.c修改以后文件代 ...

随机推荐

  1. 【POJ - 3579 】Median(二分)

    Median Descriptions 给N数字, X1, X2, ... , XN,我们计算每对数字之间的差值:∣Xi - Xj∣ (1 ≤ i < j ≤N). 我们能得到 C(N,2) 个 ...

  2. java分词工具hanlp介绍

    前几天(6月28日),在第23届中国国际软件博览会上,hanlp这款自然语言处理工具荣获了“2019年第二十三届中国国际软件博览会优秀产品”. HanLP是由一系列模型预算法组成的工具包,结合深度神经 ...

  3. DOS cscript

    C:\>cscript /?Microsoft (R) Windows Script Host Version 5.812版权所有(C) Microsoft Corporation.保留所有权利 ...

  4. SQL Server 数据备份存储过程

    原文:SQL Server 数据备份存储过程 今天开园,分享一下我一直在使用的数据备份存储过程,欢迎转载!!! ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ...

  5. BEGIN_MESSAGE_MAP和END_MESSAGE_MAP()

    这两个宏表示这个类的消息映射开始和结束,中间的宏定义定义了此类的所有的消息映射.前面的afx_msg void OnPaint():只是声明OnPaint()函数的一个消息处理函数,然后是OnPain ...

  6. 第2章:Python生态工具

    1.Python内置小工具 1).1秒钟启动一个下载服务器: python -m SimpleHTTPServer python3 -m http.server 会在当前目录下启动一个文件下载服务器, ...

  7. Postgresql在Windows下的解压安装

    1.将下载的压缩包解压,我是解压在D:\postgreSQL\pgsql中. 2.设置环境变量如下: set PGHOME=D:\postgreSQL\pgsql    set PGDATA=%PGH ...

  8. IntelliJ IDEA 2017.3.2 热加载(Hot Swap)

    一.IntelliJ IDEA 自带热加载,修改代码后点击Ctrl + F9即可 缺点:1.Ctrl + F9只对当前类重新编译加载 2.只支持构造代码块的CRUD.方法体内代码修改.资源文件内容的修 ...

  9. asp.net 1.HTTP协议

    1.概念 协议是指计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或规则,超文本传输协议(HTTP)是一种通信协议,它允许将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器. ...

  10. spring-test跟junit结合单元测试获取ApplicationContext实例的方法

    步骤 1.继承AbstractJUnit4SpringContextTests 2.引入ApplicationContext   示例代码:(可以根据name或者类型获取bean) import or ...