WebRTC的NACK和RTX简述
背景
在丢包 10%下测试WebRTC,发现丢包导致的卡顿,需要一些开启一些机制来保证丢包重传。
摘要
简述WebRTC中NACK、RTX的功能和联系。
正文
NACK、RTX是WebRTC里丢包重传策略,两个策略之间有一定的联系。
NACK:接收端通过RTCP将丢包的序列号通知给发送端,让发送端重传该包。
RTX:发送端在新的SSRC上发送重传包或者冗余包。
两者均需要通过sdp协商开启,在支持的服务端(例如Janus)修改SDP即可开启。
要点
- 重传包不一定通过RTX发送;
- RTX包不一定用来重传丢失的包。
解释
在发送端收到NACK后,要重发接收端丢掉的包,发送的模式有两种:
- RTX模式
在接收端通过SDP使能发送端的RTX以后,重发的包封装到RTX包里发送,RTX包与原RTP有不同的SSRC,这样有助于避免SRTP的重放攻击,也能让接收端更好的估算带宽; - 普通模式
在没有使能RTX时,发送端只是简单的重发原来的RTP包,这种模式会影响接收端的RTCP统计,比如会出现负的丢包率。
另外,RTX包有两种
- 收到NACK重发的包
如上述; - 发送端发送的冗余Padding包
发送端的初始码率在达不到目标码率的情况下,会通过发送RTX包来补充,以能够逼近目标码率,当然这个机制必须启用RTX才能激活。因此,接收端可能会收到两种RTX包,一种是被NACK触发的,一种是发送端用来补充发送码率的冗余包。
WebRTC的NACK和RTX简述相关推荐
- 【webrtc】nack
-参考大神文章 [RtpRtcp] NACK-RTX 参考大神 VideoReceiveStream 继承 NackSender 序号是uint16_t 的 class VideoReceiveStr ...
- WebRTC禁用NACK
vi webrtc_video_engine.c static const int kNackHistoryMs = 1000; 改为 static const int kNackHistoryMs ...
- WebRTC系列-Qos系列之发送NACK
文章目录 1. NACK简述 2. 判断包位置的算法 2. WebRTC中NACK的处理流程 2.1 主要流程函数分析 2.2 是否丢包判断 2.3 乱序包的处理 在之前的文章 WebRTC系列-Qo ...
- 什么是FEC/NACK/RTX
FEC (Forward Error Correction) 中文叫前向纠错 前向纠错技术(Forward Error Correction)在确保信号的长距可靠传输方面也起着非常重要的作用,逐渐成为 ...
- 开源流媒体解决方案,流媒体服务器,推拉流,直播平台,SRS,WebRTC,移动端流媒体,网络会议,优秀博客资源等分享
开源流媒体解决方案,流媒体服务器,推拉流,直播平台,SRS,WebRTC,移动端流媒体,网络会议,优秀博客资源等分享 一.优秀的流媒体博客资源 1.1 EasyNVR:专注于安防视频互联网化的技术 1 ...
- webRTC原理及信令简介
WebRtc基本概念及协议介绍 术语 Signaling channel(信令通道) a) 一种资源,使应用程序可以通过交换信令消息来发现,建立,控制和终止对等连接 b) 信令消息是两个应用程序相互交 ...
- WebRTC进阶-SDP协议详解
文章目录 SDP结构 会话描述 会话创建者o 媒体描述 媒体信息 音频媒体信息 a=rtpmap a=fmtp 视频媒体信息 SSRC与CNAME PlanB与UnifiedPlan 网络描述 a=c ...
- webrtc fec
转自:http://www.cnblogs.com/webrtc/p/7402570.html WebRTC::FEC [TOC] Tags: WebRTC FEC WebRTC中的 FEC 实现分为 ...
- 解读 WebRTC 音频 NetEQ 及优化实践
简介:NetEQ 是 WebRTC 音视频核心技术之一,对于提高 VoIP 质量有明显的效果,本文将从更为宏观的视角,用通俗白话介绍 WebRTC 中音频 NetEQ 的相关概念背景和框架原理,以及相 ...
- 从WebRtc学习RTP协议
文章目录 TCP为何不适用于实时音视频 UDP->RTP RTP协议结构 Jittbuffer RTP扩展头 RTP填充数据 参考 TCP为何不适用于实时音视频 可靠性是以牺牲实时性为代价的.按 ...
最新文章
- SQL语句order by两个字段同时排序
- java pdf 水印_Java 在PDF中添加水印——文本/图片水印
- 子类能否访问或覆盖父类的private方法
- mysql索引优化实际例子_MySQL索引优化的实际案例分析
- 【C语言】如何安装CLion并在CLion中Run一个程序
- 第 4 章 部署 Enterprise Library
- Yii2框架之旅(六)
- NPM 修复两个严重漏洞但无法确认是否已遭在野利用,可触发开源软件供应链攻击...
- 【matlab-1】工具箱、窗口、变量的存储与加载、帮助
- 【f1c200s/f1c100s】不带中断引脚采用扫描的方式实现通用gpio-keys
- php jwt token刷新方案,laravel JWT自动刷新 自定义验证器
- 测试员,面对自己30岁后的下坡路,我们该何去何从?
- Java中Date日期时间的工具类
- smzdm 扫地机器人_Dyson 360 EYE扫地机器人评测:这次的黑科技是否值得拥有?
- 27岁,今年研究生上岸,有什么忠告可以给我的?
- Python 为什么不支持 switch 语句?
- 论文解读:《Amy pred-FRL是一种通过使用特征表示学习来精确预测淀粉样蛋白的新方法》
- xp计算机共享上限,WindowsXP系统下怎样突破客户端连接数限制?突破xp系统共享用户个数限制的方法...
- matlab/simulink下的模糊pid的温度控制系统
- 有了她,容易多了-- aardio语法与使用手册
热门文章
- WiFi 802.11可调参数说明---信标间隔(Beacon Interval)
- GBDT训练分类器时,残差是如何计算的?
- 可能有用的篡改检测常识
- 如果您的iPhone关闭,静音或不打扰,警报是否会起作用?
- 华为接头人话术指南:欲投华为,必看此贴!引流华为招聘提前批(备份)
- iphone模拟器目录
- matlab 将路径靠左,latex 图片位置靠左
- nodejs之koa配置koa-views中间件
- [微信小程序开发者工具] [error] Error: Fail to open IDE 问题解决方法
- Docker安装Yapi