WebRTC视频QoS方法汇总
文章平均质量分 81
汇总WebRTC视频里面使用的QoS方法
CrystalShaw
向下扎根,向上结果,只要一步一个脚印的走,所经历的日子都不会白白度过的。
展开
-
WebRTC QoS方法十三.2(Jitter延时的计算)
一些报文在网络传输中,会存在丢包重传和延时的情况。渲染时需要进行适当缓存,等待丢失被重传的报文或者正在路上传输的报文。jitter延时计算就是确认需要缓存的时间。原创 2024-07-23 11:15:15 · 1205 阅读 · 0 评论 -
WebRTC QOS方法十三.1(TimestampExtrapolator接收时间预估)
虽然我们可通过时间戳的差值和采样率计算出发送端视频帧的发送节奏,但是由于网络延迟、抖动、丢包,仅知道视频发送端的发送节奏是明显不够的。我们还需要评估出视频接收端的视频帧的接收节奏,然后进行适当平滑,保证渲染的效果。WebRTC引入了卡尔曼滤波,通过视频时间戳和到达时间进行调整,提高后续视频帧到达时间估算的准确性和稳定性。TimestampExtrapolator就是实现视频帧的到达时间的估算。在实际的网络环境中,由于网络波动、设备性能差异等因素,接收到的视频帧时间戳往往包含噪声。原创 2024-07-19 14:18:36 · 754 阅读 · 0 评论 -
WebRTC QoS方法十三(视频渲染平滑)
视频渲染时间的确定需要考虑三方面的因素:网络抖动、网络延时、音视频同步网络抖动:视频帧在网络上传输,会受到网络抖动的影响,不能收到立刻播放,需要进行适当的平滑网络延时:一些报文在网络传输中,会存在丢包重传的情况。渲染时需要进行适当缓存,等待丢失被重传的报文音视频同步:音视频报文传送到接收端,也不能完全保证同时接收。需要做一些时间校准,保证音视频偏差不影响体验所以在计算视频渲染时间的时候,会结合这三方面的参数,计算一个合理值。原创 2024-07-18 17:48:23 · 1214 阅读 · 0 评论 -
WebRTC QoS方法(汇总篇)
目前总结出webrtc用于提升QOS的方法有:NACK、FEC、SVC、JitterBuffer、IDR Request、PACER、Sender Side BWE、VFR(动态帧率调整策略)。这几种方法在webrtc架构分布如下:具体实现原理如下:一、NACK与NACK对应的是ACK,ACK是到达通知技术。以TCP为例,他可靠因为接收方在收到数据后会给发送方返回一个“已收......原创 2018-05-24 12:18:03 · 19173 阅读 · 6 评论 -
WebRTC QoS方法一(NACK实现)
一、概念与NACK对应的是ACK,ACK是到达通知技术。以TCP为例,他可靠因为接收方在收到数据后会给发送方返回一个“已收到数据”的消息(ACK),告诉发送方“我已经收到了”,确保消息的可靠。NACK也是一种通知技术,只是触发通知的条件刚好的ACK相反,在未收到消息时,通知发送方“我未收到消息”,即通知未达。在rfc4585协议中定义可重传未到达数据的类型有二种:1)RTPFB:r...原创 2018-07-26 13:58:05 · 15472 阅读 · 2 评论 -
WebRTC QoS方法一.1(RTT时间获取及在NACK FEC应用)
一、概述RTT环路延时在webrtc上是一个比较重要的参数:NACK、FEC保护机制的选取、NACK缓存时间的配置、FEC冗余参数的配置都使用了该参数。二、RTT在保护机制的选取应用1、RTT延时在NACK和FEC保护机制选取上的影响参见:VCMNackFecMethod::ProtectionFactor2、RTT延时在FEC最大保护帧数上的影响参见:VCMNac...原创 2019-11-25 17:56:05 · 2818 阅读 · 1 评论 -
WebRTC QoS方法一.2(接收端NACK流程实现)
1、概述webrtc接收端触发发送NACK报文有两处:1、接收RTP报文,对序列号进行检测,发现有丢包,立即触发发送NACK报文。2、定时检查nack_list_队列,2、流程实现原创 2020-07-01 12:13:11 · 3326 阅读 · 3 评论 -
webrtc QOS方法一.3(发送端NACK实现)
1、RTCPReceiver::HandleNack 处理接收到的NACK报文2、RTPSender::OnReceivedNack 重发NACK反馈的RTP报文3、加入pace队列,按照高优先级重传原创 2021-07-28 11:45:29 · 940 阅读 · 0 评论 -
webrtc QOS方法二.1(FEC原理)
一、概述webrtc冗余打包方式有三种:Red(rfc2198)、Ulpfec(rfc5109)、Flexfec(草案)。其中Red和Ulpfec要成对使用。二、RedFEC简单将老报文打包到新包上。如下图所示,冗余度为1时,RFC2198打包情况:这种方法在音视频领域几乎不使用,因为冗余包只能保护特定一个报文,这种方法带宽占用量很大,恢复能力有限,性价比很低。只是早期的T38......原创 2018-10-26 18:02:29 · 14101 阅读 · 4 评论 -
webrtc QOS方法二.2(ulpfec rfc5109简介)
一、RTP报文结构1)概览2)RTPHeader for FEC Packets(RFC 3550)3)FEC Header for FEC PacketsFEC头部为10字节,包含内容如下:E flag:扩展位,供将来使用,当前设置为0。L flag:指示长偏移掩码是否使用,0表示偏移掩码为16位,1表示为48位。P/X/CC/M/PT recovery fi...原创 2019-11-07 11:41:11 · 4410 阅读 · 0 评论 -
webrtc QOS方法二.3(flexfec rfc8627简介)
WebRTC实现的冗余方式有三种:UlpFEC(rfc5109)、FlexFEC(rfc8627)、inbandFEC(opus音频使用)。UlpFEC和FlexFEC实现的原理都是,将一组M个报文进行异或,生成N(N就是FEC的冗余度)个FEC报文,打包出去。这组报文任意丢其中的N个,都可以通过这组(M-N)个报文+FEC冗余包恢复回来,增大FEC冗余报文的保护范围。例如下面示意图:D为媒体包,R为冗余包,该图所示的冗余度为2。1、发送端打包示意图 2、网络丢包示意图 3、报文恢复示意图 1、WebRTC原创 2022-07-11 16:22:57 · 2725 阅读 · 15 评论 -
webrtc QOS方法二.3(FEC冗余度配置)
一、概述webrtc的FEC冗余度配置整体思想是:1、接收端根据收到报文情况计算一个丢包率,通过RTCP_RR报文反馈给发送端。 接收端丢包率计算代码走读请参见:《webrtc代码走读十一(RTCP丢包率、环路延时计算)》2、发送端解析RTCP_RR报文,获取丢包率信息。然后使用一种算法,根据历史丢包率,预估未来一段窗口期的丢包率。3、发送端使用预估的丢包率,查表计算I...原创 2019-11-21 16:19:38 · 3984 阅读 · 1 评论 -
webrtc QOS方法三(SVC实现)
一、概念SVC(可适性视频编码或可分级视频编码)是传统H.264/MPEG-4 AVC编码的延伸,可提升更大的编码弹性,并具有时间可适性(Temporal Scalability)、空间可适性(Spatial Scalability)及质量可适性(SNR/Quality/Fidelity scalability)三大特性,使视频传输更能适应在异质的网络带宽。二、概述SVC以AVC视频编...原创 2018-07-25 11:46:58 · 11451 阅读 · 1 评论 -
webrtc QOS方法四(Sender Side BWE)
背景介绍BWE(Bandwidth Estimation)可能是WebRTC视频引擎中最关键的模块了。BWE模块决定视频通讯中可以发送多大码率视频不会使网络拥塞,防止视频通讯质量下降。早期的带宽评估算法比较简单,大多是基于丢包来估计,基本的策略是逐步增加发送的数据量,直到检测到丢包为止。为了让发送端获悉网络上的丢包信息,可以使用标准的RTCP的RR来发送周期性的报告。现代的带宽评估算法...原创 2018-10-09 14:34:54 · 12625 阅读 · 5 评论 -
webrtc QOS方法四.1(Sender Side BWE函数实现调用关系图)
原创 2020-12-23 10:17:20 · 1318 阅读 · 2 评论 -
WebRTC QoS方法四.2(拥塞算法学习)
一、网图简介现在我们接入网络的方式有三种:手机4G/5G、WIFI、网线。三种接入方式在网络中的位置如上图所示。引起网络质量差的原因也有很多,比方说4G/5G、WIFI信号弱、wifi信道竞争、云营商限速、跨运营商节点带宽竞争、终端设备应用程序抢占带宽等。其中跨运营商节点带宽竞争可以使用BGP网络解决,其他目前都没有一个完美的解决方案。二、拥塞算法思想拥塞算法实际上是解决不了上述所有的问题的,它的思想是假设我们所有设备都正常运行情况下,只是由于发送数据量不合理,导致路由缓冲区变大,网络延原创 2020-07-08 10:24:50 · 1972 阅读 · 2 评论 -
webrtc QOS方法四.3(probe探测算法学习)
一、概述发送端通过GCC算法,根据网络状态动态调节发送的码率。但是系统启动阶段初始码率应该设置成多大比较合适? GCC估计带宽,这个算法的特点是:快降慢升,网络质量差时能迅速响应衰减带宽;但是网络持续向好时,不能迅速增加对应带宽。所以我们需要一种快速探测算法,探测当前网络合适的带宽,保证音视频按照最佳码率值发送数据。二、实现原理1、实现思路1、发送端以一定的速度发送数据包,同时记录这些数据包的发送时间、序列号(全局唯一)、探测组的ID。2、发送端实时根据GCC反馈结果动态调.原创 2021-07-06 23:04:17 · 3263 阅读 · 2 评论 -
WebRTC QoS方法四.4(Transport-wide Congestion Control协议笔记)
一、协议链接https://tools.ietf.org/pdf/draft-holmer-rmcat-transport-wide-cc-extensions-01.pdf二、协议定义三、抓包示例四、参数说明version (V): 2 bits。固定是2。padding (P): 1 bit。feedback message type (FMT): 5 bits。TransportCC固定是15。payload type (PT): 8 bits。Transp..原创 2021-08-04 16:35:29 · 1494 阅读 · 0 评论 -
webrtc QOS方法四.5(gcc获取码率pacer、fec、编码器配置)
一、gcc获取码率后,码率分配函数调用栈信息如下:二、RtpTransportControllerSend::PostUpdates函数配置码率函数三、GoogCcNetworkController::GetPacingRates:pacing_factor_默认2.5。也就是说pacer发送报文的码率是探测码率的2.5倍。四、RtpVideoSender::OnBitrateUpdated:根据探测码率、当前帧率、丢包率、rtt环路延时、丢包模型,确定编码器的码率。...原创 2021-10-20 17:53:53 · 1308 阅读 · 4 评论 -
webrtc QOS方法五.1(帧率调整)
一、框架图二、帧率调控算法根据上图所示,发送端帧率调整算法有两个:1、视频采集帧率与编码器输入帧率之间的FrameDropper算法。2、编码器输入与编码器输出之间的MediaOptimization算法。三、webrtc的帧率如上框架图,webrtc的帧率从左到右,帧率是持递减状态的。摄像头的采集帧率是发送端帧率的极限值。1、摄像头采集帧率视频采集卡帧率...原创 2018-10-24 10:47:08 · 7774 阅读 · 2 评论 -
webrtc QOS方法五.2(发送端帧率调整原理及实现流程)
一、MediaOptimization类作用二、MediaOptimization类实现1)编码前实现原理 MediaOptimization在编码前,更新编码器的码率、帧率信息。 码率:会根据当前系统统计的编码后帧率、以及之前编码数据量与目标编码码率关系,评估当前合适的码率。 帧率:函数调用2)编码中函数调用关系 实...原创 2020-05-07 15:47:00 · 4605 阅读 · 1 评论 -
webrtc QOS方法六(花屏问题解决方法)
做过视频会议都清楚,当网络出现丢包异常后,经常会导致视频出现长时间花屏问题。严重降低用户体验。测试webrtc发现,视频无论在什么环境,都没有出现花屏现象。若出现丢包,通过掉帧方式解决该问题。最坏的情况就是视频出现卡顿,但是也不会出现花屏。我们都知道视频解码器只管数据解码,不会判断是否是花屏,这个丢包导致花屏问题,只能在调度侧解决,解码器是不处理该异常的。webrtc在收包送到解码器这块流程,...原创 2019-01-28 14:54:14 · 5715 阅读 · 9 评论 -
webrtc QOS方法七(摄像头采集帧率调整)
一、发现问题使用罗技C270摄像头,进行webrtc视频通话QOS测评时发现,在网络0延时,0丢包时,GetStats打印摄像头采集到的帧率一直持续在15-17fps,无法达到摄像头标注的30fps的采集能力。在17fps下视频通话,视频质量有轻微的顿挫感,流畅性不好。检查CPU占有率、编码解码时间,都没有异常。按理来说性能是可以达到30fps的实时通讯能力的。二、分析问题1、首先...原创 2019-02-22 14:25:37 · 4814 阅读 · 5 评论 -
webrtc QOS方法八(JitterBuffer)
一、前言网上看到很多webrtc的JitterBuffer处理流程,都是介绍VCMJitterBuffer类的实现流程,不过手里的这个2019年的版本,发现webrtc已经不用这个机制了。原因还不清楚。VCMJitterBuffer类的调用关系如下图,但是,VideoCodingModuleImpl、VideoReceiveStream、VideoStreamDecoder三个类,都没有调...原创 2019-09-12 14:05:10 · 5707 阅读 · 2 评论 -
webrtc QOS方法九(VideoFrame.ntp_time_ms含义)
webrtc远端视频渲染的时候,VideoFrame携带时间参数有三个:timestamp_rtp_、ntp_time_ms_、timestamp_us_。这里先描述一下ntp_time_ms_计算和传递过程。WebRTC视频接收端延迟包括三部分:缓冲区延迟JitterDelay,解码延迟DecodeDelay和渲染延迟RenderDelay。其中DecodeDelay和RenderDel...原创 2019-02-28 08:55:40 · 1882 阅读 · 2 评论 -
webrtc QOS方法十(pacer实现)
一、背景介绍若仅仅发送音频数据,是不需要PACER模块的,因为一帧音频数据本身不大,不会超过以太网的最大报文长度。一个RTP报文就可以搞定,按照打包时长的节奏发送就可以了。但视频数据不能按照音频数据的思路发送,因为一帧视频有可能需要分别封装在几个RTP报文,若这些视频帧的RTP报文一起发送到网络上,必然会导致网络瞬间拥塞。产生丢包抖动等异常。以25fps为例,若这帧视频的RTP报文,能够在40ms之内发送给接收端,接收端既可以正常工作,也缓冲了网络拥塞的压力。PACER就是实现把同一时刻生产的若干RTP原创 2021-03-09 11:35:30 · 4751 阅读 · 9 评论 -
webrtc QOS方法十一(音视频同步AVSyn实现)
一、背景介绍音视频同步效果直接影响用户体验,音视频同步机制也是webrtc的核心模块之一。音视频同步的基本思想是,在接收端渲染前,对齐当前要渲染的音视频采集时间,要处理好三大块事情:音视频采集绝对时间、音视频传输时间、音视频同步时间。二、实现原理1)采集时间2)传输时间戳3)音视频同步三、参考https://www.jianshu.com/p/3a4d24a71091https://my.oschina.net/u/4713941/blog/4974741..原创 2021-03-16 17:08:41 · 1979 阅读 · 0 评论 -
webrtc QOS方法十二(接收端IDR帧请求)
1、解码前长时间要不到帧,IDR帧请求webrtc的接收端根据时间控制I帧请求是在解码前要包里面实现的。在指定时间内没有要到包,就发送I帧请求。VideoReceiveStream2::StartNextDecodeRtpVp8RefFinder::ManageFrame组帧这里也不主动发送I帧请求,组帧的动作只有三个,缓存、丢弃、传输视频帧到frame_buffer_队列。解码在frame_buffer_队列要不到数据了,才发I帧请求的2、NACK空洞大于kMaxN..原创 2022-05-06 17:09:05 · 995 阅读 · 0 评论 -
webrtc QOS 丢包测试发现问题
一、组网环境二、预置参数或者1、Client1、Client2、信令服务器连接在一个以太网交换机上。保证Client1与Client2走P2P。2、在Client2上使用Network Emulator Client网损工具,配置固定丢包率为10%或者随机丢包率为10%3、创建视频连接,观察视频质量变化情况。三、预期结果在10%丢包率的网络下,视频质量无明显...原创 2019-01-29 10:00:19 · 2503 阅读 · 0 评论