WebRTC Qos策略
1.WebRTC 用于提升 QoS 的方法:
NACK、FEC、SVC、JitterBuffer、IDR Request、PACER、Sender Side BWE、VFR(动态帧率调整策略)
https://blog.csdn.net/CrystalShaw/article/details/80432267
丢包重传
NACK:一种通知技术,和ACK相反,通知未达
FMT=1, PT=RTPFB
a=rtcp-fb:96 nack
RTX:参考rfc4588,使用额外的 ssrc 传输,在sdp中标识
a=rtpmap:97rtx/90000
a=ssrc-group:FID2736695910239189782
RPSI:无
NACK 可以节省带宽,但会带来延迟*
谈谈网络通信中的ACK,NACK 和 REX](https://link.zhihu.com/?target=https%3A//blog.51cto.com/ticktick/2468581)
丢包恢复(冗余编码 前向纠错 FEC)**通过 FEC 协议实现:RED:RFC2198, 封装FEC冗余报文UlpFEC: RFC5109,报文异或,生成冗余打包;带宽占用大,连续丢包,随机丢包FLEXFEC: 草案, 更灵活,引入交织算法,增加纵向OXR运算,增加网络抗丢包能力。
a=rtpmap:116 red/90000a=rtpmap:117 ulpfec/90000
FEC由于通过冗余纠错,所以延迟比较低,但浪费带宽*
https://blog.csdn.net/CrystalShaw/article/details/83413772
根据丢包率动态调整冗余度。
关键帧请求(IDR)**严重丢包时可以通过发送关键帧请求进行画面恢复。关键帧请求方式包括三种:RTCP FIR:使用 RTCP Feedback 消息请求关键帧(完整帧)RTCP PLI:关键帧丢包重传SIP Info:
a=rtcp-fb:100 ccm fira=rtcp-fb:96 nack pli
Jitter Buffer 抖动缓冲区将收到的RTP报文缓存起来,按照时间戳或者序号重排,消除报文乱序和抖动问题。
分为静态和动态,动态 Jitter Buffer 根据网络环路延时情况,动态调整缓存大小。
Jitter buffer 核心思想是用时间换空间,以增大端到端延时为代价,换取视频通话的流畅性。 当网络抖动发生时,增加Buffer长度,以应对可能发生的抖动;当网络稳定时,减少buffer长度,降低视频端到端延迟,提高实时性。(尽量保证视频不卡的前提下,降低端到端延迟,在延迟和卡顿率之间平衡)
流程**:组帧--帧排序--检查帧参考关系--计算抖动(时间戳)--根据抖动计算buffer长度--根据抖动自适应调整buffer长度
Pacer 网络报文平滑策略**视频帧可能分别封装在多个RTP报文,若这个视频帧RTP报文同时发送到网络,必然会导致网络瞬间拥塞。PACER 就是实现把RTP同一时刻产生的若干包,周期性的发送,防止上行流量激增导致拥塞。让视频数据按照评估码率均匀的分布在各个时间片里发送。
削峰填谷; 将报文平滑地发送给接收端。在弱网环境尤其重要。
根据 estimator 计算的码率,来计算发包频率
WebRTC中pacer的流程比较清晰,分为三步:1)如果一帧图像被编码和RTP切分打包后,先会将RTP报文存在待发送的队列中,并将报文元数据(packet id, size, timestamp, 重传标示)送到pacer queue进行排队等待发送,插入队列的元数据会进行优先级排序。2)pacer timer会触发一个定时任务事件来计算budget,budget会算出当前时间片网络可以发送多少数据,然后从pacer queue当中取出报文元数据进行网络发送。3)如果pacer queue没有更多待发送的报文,但budget却还可以发送更多的数据,这个时候pacer会进行padding报文补充。
设置发送速率 PacedSender::SetEstimatedBitrate(bitrate_bps)*
包缓存队列;发包线程按一定间隔发包。
带宽评估和拥塞控制
https://mp.weixin.qq.com/s/Ej63-FTe5-2pkxyXoXBUTw
https://blog.csdn.net/CrystalShaw/article/details/82981183
https://blog.mozilla.org/webrtc/what-is-rmcat-congestion-control/
WebRTC 的拥塞控制和码率估计采用 GCC 算法。该算法充分考虑了网络丢包和网络延迟对码率估计的不同影响,分别基于丢包率和网络延迟进行码率估计,最后综合得出最优值。
算法实现上,基于丢包率的码率估计在发送端进行,基于网络延迟的码率估计在接收端进行。最后,在发送端计算出最优值,作用于Codec和PacedSender模块。GCC算法能够较好地基于网络实时状况估计网络带宽,为网络实时通信打下坚实基础。
GCC算法弊端:不能适应所有网络模型、应对网络峰值能力差。比如实时在线编辑场景。
M55 版本引进 Sendside-BWE 拥塞控制算法,把所有码率计算都移到发送端进行,并采用全新的 Trendline 滤波器取代之前的 Kalman 滤波器。能够更好更快的进行码率估计和网络过载恢复。
a=rtcp-fb:100 goog-remba=rtcp-fb:100 transport-cc
GCC 算法(Google Congestion Control)
https://www.jianshu.com/p/0f7ee0e0b3be
https://www.jianshu.com/p/5259a8659112
GCC拥塞控制算法主要分两部分:基于丢包检测的拥塞控制和 基于延时检测的拥塞控制。
其中,发送端基于丢包率的码率控制,接收端基于延迟的码率控制。
基于延迟检测和丢包反馈的拥塞机制(GCC)和带宽调节策略来保证延迟、质量和网路速度之间平衡
带宽估计,传输反馈机制
基于丢包率(loss-based )(发送端实现)发送端从接收端发送的 RTCP RR(Receiver Report)报文,根据 Report Block 中携带的丢包率信息,动态调整发送端码率。
通过丢包率信息以及计算RTT,并结合 TMMBR 或 REME 中携带的码率信息计算最终的码率值,然后媒体引擎根据码率配置编码器,实现码率自适应调整。
RTCP RR 反馈包,显示接收端丢包率,lost fraction 字段
基于延时带宽估计(delay-based) (接收端实现)
记录数据包时间戳,计算数据分组的延时变化,判断网络拥塞情况;最终评估码率,由 RTCP feedback(TMMBR 或 REME )报文 反馈给发送端。
WebRTC 新版本中,GCC算法将两种拥塞控制算法都在发送端实现。
基于延时的拥塞控制由三个模块组成:到达时间滤波器、过载检查器和速率控制器。
使用 Kalman filter(卡夫曼过滤器)带宽评估模型;WebRTC M55 新版本都是采用发送端的 trendline 滤波器来做延迟带宽评估。
TMMBR
REME (Receiver Estimated Maximum Bitrate)
rtcp remb 消息反馈
Sendside-BWE 算法(Transport-CC Feedback)
M55 版本引进 Sendside-BWE 拥塞控制算法,把所有码率计算都移到发送端进行,并采用全新的 Trendline 滤波器取代之前的 Kalman 滤波器。能够更好更快的进行码率估计和网络过载恢复。
RTP头部扩展 TransportSequenceNumber ,代表传输序号(不同于媒体层序号,用于组帧和抗丢包),关注数据传输特性,用于码率估计。
接收端,通过检查头部是否有 TransportSequenceNumber 扩展,决定采用 Sendside-BWE 还是 GCC 算法。接收端的 EstimatorProxy 周期发送 Transport-CC 报文。
包括关键技术:包组延迟评估(InterArrival)、滤波器趋势判断(TrendlineEstimator)、过载检测(OveruseDetector)和码率调节(AimdRateControl)。
BBR 算法
BBR在实时视频领域应用
Google's BBR 拥塞控制算法模型解析
从TCP拥塞本质看BBR算法及其收敛性(附CUBIC的改进/NCL机制)
2.总结
3.音频QoS
以上部分,我们主要讨论 RTP 视频相关 Qos。这里,我们着重讨论音频相关Qos。
时延是语音通话的重要指标,时延低于150ms时人感觉不到,超过150ms且小于450ms时人能感受但不影响通话,当时延大于1s时将严重影响通话交流。
音频的时延包括:通信终端时延(采集、前处理、编码)、网络时延、通信终端与网络设备间时延。
发送端延时:采集延时、前处理算法延时、编码延时
网络延时:Jitter Buffer、FEC
接收端延时:网络延时、解码延时、后处理算法延时和播放延时。
减少延时方法:减少缓冲深度、加速信号处理算法(WSOLA、NetEQ)
WebRTC 音频相关两大核心技术:前后处理(3A,AEC/AGC/ANS)、netEQ。
此处主要介绍 netEQ 算法,3A算法在音频处理详细介绍。
netEQ
在 NetEQ 模块中,主要分为:MCU(微控制单元)和 DSP(数字信号处理)模块。
MCU:主要负责延时及抖动计算统计,并生成对应的控制命令;
DSP:主要负责接收并根据MCU控制命令进行对应的数据包处理。
浅谈WebRTC NetEQ
webrtc音频Qos汇总
抗丢包方法:NACK、FEC、交织编码
抗抖动方法:Jitter Buffer、音频平滑处理
4.Jitter Buffer
抗网络抖动由三个模块完成:网络延时统计算法、缓冲区延迟统计算法、控制命令决策判定。
webrtc 会根据网络延时(DelayManager)和缓冲区数据长度(Buffer Level Filter)以及上一帧的处理方式,决定给解码器发什么信号处理命令。
5.音频平滑处理方法
音频解码信号处理命令主要有五种:kNormal(正常播放)、kAccelerate(加速播放)、kExpand(减速播放)、kAlternativePlc(丢包补偿)、kMerge(融合)。
抗抖动方法尽量保证音频质量,但特定网络,音频渲染会出现音频数据堆积、断流现象。若不进行特殊处理,音频会时快时慢;所以引入音频不变调算法进行平滑处理。
在弱网丢包率比较高情况下,数据会长时间丢失,变速不变调算法也无法满足实际应用,webrtc又引入了丢包补偿、音频融合算法,衔接和平滑音频质量。
丢包补偿:根据前一帧的解码信息,利用基音同步重复的方法近似替代当前的丢失帧,以达到丢包补偿。
融合算法:当上一次播放的帧和当前解码的帧不连续的情况下,进行衔接和平滑处理。让两个数据包一部分播放时间重叠,使过度更自然。
原文 https://zhuanlan.zhihu.com/p/149675376
★文末名片可以免费领取音视频开发学习资料,内容包括(FFmpeg ,webRTC ,rtmp ,hls ,rtsp ,ffplay ,srs)以及音视频学习路线图等等。
见下方!↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
相关文章:
WebRTC Qos策略
1.WebRTC 用于提升 QoS 的方法:NACK、FEC、SVC、JitterBuffer、IDR Request、PACER、Sender Side BWE、VFR(动态帧率调整策略)https://blog.csdn.net/CrystalShaw/article/details/80432267丢包重传NACK:一种通知技术,…...
Mysql数据查询
文章目录1 group by子句2 回溯统计3 having子句1 group by子句 group by子句**:分组统计,根据某个字段将所有的结果分类,并进行数据统计分析 分组的目的不是为了显示数据,一定是为了统计数据group by子句一定是出现在where子句之…...
Kafka入门(五)
下面聊聊Kafka常用命令 1、Topic管理命令 以topic:test_1为例 1.1、创建topic ./bin/kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 3 --partitions 3 --topic test_1参数说明: –bootstrap-server:…...
如何快速在windows系统中切换node.js版本
前言 最近在同时维护公司的两个项目,一个是新项目,另一个是老项目,二者所依赖的node版本是不一致的。 这就导致我在切换项目的时候必须重新安装对应版本的 node.js,否则就会报各种神马错误。 但这一卸一装可着实烦死个银…...
设计模式-单例模式(java)
单例是一种常用的设计模式,它的目的是确保一个类只有一个实例,并提供一个全局访问点。在Java编程语言中,实现单例有多种方法,本篇文章将介绍其中的两种实现方式。 方式一:饿汉式单例模式 饿汉式单例模式是最简单的实…...
Revit中复合墙图层的规则和CAD识别翻模墙
一、Revit中用于指定复合墙图层的规则,具体内容? 在编辑复合墙的结构时,请使用“指定图层”工具将“编辑部件”对话框中的行指定给图层或预览窗格中的区域,并遵循这些原则。 在预览窗格中,样本墙的各个行必须保持从左到右的顺序显…...
【DL】Paddle BML Codelab环境使用说明 - 知识点目录
《Paddle BML Codelab环境使用说明》 1. 编辑区 Code Cell 1.1 Code Cell 操作 Magic关键字/魔术命令 Magic命令含义%timeit测试单行语句的执行时间%%timeit测试代码块的执行时间%matplotlib inline显示matplotlib生成的图形%run调用外部python脚本%pdb 调试程序%pwd 查看当…...
python正则表达式处理文本-re模块
python正则表达式处理文本-re模块 1.概述 正则表达式通常用于含有大量文本处理的应用当中。例如,它们经常用作开发者使用的文本编辑程序的搜索模式,包括 vi,emacs 和现代集成开发环境。它们也是 Unix 命令行工具的组成部分,例如…...
换了固态硬盘需要重装系统吗?教你如何实现不重装系统!
电脑大家都用过嘛,如果您的计算机装的还是机械硬盘,想必阁下肯定是修身养性的高手,因为在这个浮躁的社会中,是很少有人能够忍受5分钟甚至更久的开机时间的,不仅开机慢,应用程序的响应速度也很慢,…...
网上医疗预约挂号系统
技术:Java、JSP等摘要:网上医疗预约挂号系统是主要是对居民的保健、护理、疾病预防等健康信息实行有效的预约挂号管理。医疗机构为居民建立完整的健康档案,安排体检以及实施免疫等预防措施。而基于Web的远程保健平台以网上医疗预约挂号系统为…...
专题:一看就会的C++类模板讲解 (1)
目录 一.类模板的作用 二.类模板的定义: 三.类模板的声明格式: 四.类模板对象 五.再举一个例子 一.类模板的作用 面向对象的程序设计编程实践中,我们可能会面临这样的问题:要实现比较两个数的大小。明明比较两个数的方法都一样…...
什么是“奥卡姆剃刀”,如何用“奥卡姆剃刀”解决复杂问题?复杂问题简单化
什么是“奥卡姆剃刀”,如何用“奥卡姆剃刀”解决复杂问题?复杂问题简单化问题什么是“奥卡姆剃刀”?如何使用“奥卡姆剃刀”解决问题复杂问题简单化“汉隆剃刀”小结问题 假设你在夜空中看到一颗闪闪发光的「不明飞行物」,你认为这会是什么呢…...
角谷定理(递归)
已知有角谷定理: 输入一个自然数,若为偶数,则把它除以2,若为奇数,则把它乘以3加1。经过如此有限次运算后,总可以得到自然数值1。求经过多少次可得到自然数1。如:例如数据22的变化过程ÿ…...
数学小课堂:微积分复盘(高等数学本质上是对趋势的动态描述,是对各种相关性抽象的表述。)
文章目录 引言I 复盘1.1 概念和表述1.2 现实与虚构1.3 有穷和无穷1.4 静态和动态1.5 直觉和逻辑II 通过数学逻辑,理解人生。2.1 精明与聪明2.2 朋友和理性的对手2.3 攒钱和赚钱2.4 荣誉和财富引言 高等数学本质上是对趋势的动态描述,是对各种相关性抽象的表述。 I 复盘 1.…...
JAVA线程池原理详解一
JAVA线程池原理详解一 一. 线程池的优点 线程是稀缺资源,使用线程池可以减少创建和销毁线程的次数,每个工作线程都可以重复使用。可以根据系统的承受能力,调整线程池中工作线程的数量,防止因为消耗过多内存导致服务器崩溃。 二…...
Windows平台Unity Camera场景实现轻量级RTSP服务和RTMP推送
技术背景随着VR技术在医疗、军事、农业、学校、景区、消防、公共安全、研学机构、展厅展馆,商场等场所普及,开发者对Unity平台下的直播体验提出了更高的要求。技术实现Unity平台下的RTMP推流、RTMP、RTSP播放前几年已经覆盖了Windows、Linux、Android、i…...
LSB 题解
今天来刷一道Misc的题目,LSB原理进行图片隐写 LSB原理 LSB是一种利用人类视觉的局限性设计的幻术 PNG和BMP图片中的图像像素一般是由RGB(RED红 GREEN绿 BLUE蓝)三原色组成 记住,JPG图片是不适合使用LSB隐写的,JPG图片对像数进行了有损压缩…...
离线部署docker与镜像
离线部署docker与镜像 1.离线部署docker 1).在docker官网上下载,合适的安装文件 本次使用的是“docker-20.10.9.tgz ” 下载地址:https://download.docker.com/linux/static/stable/x86_64/ [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下…...
Linux文件系统介绍(上)
使用 Linux 系统时,需要作出的决策之一就是为存储设备选用什么文件系统。大多数 Linux 发行版在安装时会非常贴心地提供默认的文件系统,大多数入门级用户想都不想就用了默认的那个。 使用默认文件系统未必就不好,但了解一下可用的选择有时也会…...
创建SpringBoot注意事项
作为一个java小白,你是否因为创建SpringBoot项目那些莫名其妙的错误搞得头皮发麻。不要慌张,这篇文章能帮你解决90%的问题【持续更新…】 本文结合创建SpringBoot项目的完整过程来讲 在idea中新建项目 虽然SpringBoot项目是由maven内核组成的࿰…...
2023年全国最新二级建造师精选真题及答案9
百分百题库提供二级建造师考试试题、二建考试预测题、二级建造师考试真题、二建证考试题库等,提供在线做题刷题,在线模拟考试,助你考试轻松过关。 11.关于施工合同违约赔偿损失范围的说法,正确的是()。 A.…...
解决MySQL的 Row size too large (> 8126).
📢欢迎点赞 :👍 收藏 ⭐留言 📝 如有错误敬请指正,赐人玫瑰,手留余香!📢本文作者:由webmote 原创📢作者格言:无尽的折腾后,终于又回到…...
最优传输问题和Sinkhorn
最优传输问题 假设有M堆土,每堆土的大小是ama_mam,有N个坑,每个坑的大小是bnb_nbn,把单位土从土堆m运送到坑n的代价是c(m,n)c(m,n)c(m,n),如何找到一种运输方法填满坑,并且代价最小,这就是…...
Netty核心组件EventLoop源码解析
源码解析目标 分析最核心组件EventLoop在Netty运行过程中所参与的事情,以及具体实现 源码解析 依然用netty包example下Echo目录下的案例代码,单我们写一个NettyServer时候,第一句话就是 EventLoopGroup bossGroup new NioEventLoopGroup(…...
排障命令-汇总
目录 日志查询 1. grep 2. zgrep cpu 1. top 内存 1. free tcp相关 1. netstat 2. ulimit 3. lsof jvm常用 1. jps 2. jinfo 3. jstack 4. jmap 5. jstat 进制转换 1. 十进制转16进制 日志查询 1. grep 定义:(global regular expression) 命令用于查…...
python+pytest接口自动化(4)-requests发送get请求
python中用于请求http接口的有自带的urllib和第三方库requests,但 urllib 写法稍微有点繁琐,所以在进行接口自动化测试过程中,一般使用更为简洁且功能强大的 requests 库。下面我们使用 requests 库发送get请求。requests库简介requests 库中…...
开源电子书工具Calibre 6.3 发布
Calibre 开源项目是 Calibre 官方出的电子书管理工具。它可以查看,转换,编辑和分类所有主流格式的电子书。Calibre 是个跨平台软件,可以在 Linux、Windows 和 macOS 上运行。Calibre 6.3 正式发布,此次更新内容如下:新…...
C++ STL:适配器 Adapter
文章目录1、容器适配器1.1、stack1.2、queue1.3、priority_queue2、迭代器适配器2.1、插入迭代器2.2、反向迭代器2.3、流迭代器3、函数适配器3.1、* bindbind 使用方法bind 简化原理3.2、mem_fn适配器就是接口,对容器、迭代器、算法进行包装,但其实质还是…...
防抖和节流
防抖和节流的区别?防抖:触发高频事件后n 秒内 函数只会执行一次,如果n秒内 高频事件在在次触发,则会重新计算节流:高频事件触发,但在n 秒内 只会执行一次,所以节流会稀释函数的执行频率下面就是…...
vue3 微信扫码登录及获取个人信息实现的三种方法
一、流程: 微信提供的扫码方式有两种,分别是: 跳转二维码扫描页面 内嵌式二维码根据文档我们可以知道关于扫码授权的模式整体流程为: 1. 第三方发起微信授权登录请求,微信用户允许授权第三方应用后,微信会拉起应用或重定向到第三方网站&…...
制作网站给别人做诈骗的会犯什么罪/官方app下载安装
5、更新到某个版本 svn update -r m path 例如: svn update如果后面没有目录,默认将当前目录以及子目录下的所有文件都更新到最新版本。 svn update -r 200 test.php(将版本库中的文件test.php还原到版本200) svn update test.php(更新,于版本…...
西安企业网站建设哪家好/可以下载新闻视频的网站
题目 给定二叉搜索树(BST)的根节点和一个值。 你需要在BST中找到节点值等于给定值的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 NULL。 例如, 给定二叉搜索树: 4/ \2 7/ \ 1 3和值: 2 你应该返回如下子树: 2 …...
网站制作小常识/seo搜索引擎优化ppt
插上USB3.0的端口 在USB2.0的端口...
wordpress 效率/定向推广
ubuntu下安装好LAMP后默认情况没有安装mysql_pdo扩展,以下是安装步聚 1 安装pdo sudo pecl install pdo 出现以下错误是说明pdo已经加入了php的默认安装,不需要再安装了 [Some stuff excluded for brevity]make: *** [pdo_dbh.lo] Error 1 ERROR: make f…...
购物网站的搜索功能是怎么做的/做网站怎么优化
前端的主要任务: 1)信息展示; 2)用户交互(事件处理)。 1)移动端开发总体遵循MVC模式; 2)移动端UI包含:(1)UI组件(基本组件…...
内部网站的作用/东莞网络营销代运营
考虑到特定用户需求,我们发布了后台service采集摄像头/屏幕数据的demo,android需要5.0以上版本。 点击下载 使用说明: 安装SmartServicePublisherSDKDemo; [推送类型] 可选“推送屏幕”或“推送摄像头”; [推送屏幕] …...