【音视频第12天】GCC论文阅读(3)

音视频中一些常见的知识点 ICE Candidate 通过包含 IP、端口、类型、优先级等信息,使通信双方能够在复杂网络环境(尤其是 NAT 后)中找到可互通的路径,是 P2P 实时通信(如 WebRTC)的核心机制之一。 阅读详情

A Google Congestion Control Algorithm for Real-Time Communication draft-alvestrand-rmcat-congestion-03论文理解
看中文的GCC算法一脸懵。看一看英文版的,找一找感觉。

Abstract

本文档介绍了适用于webRTC两种拥塞控制算法。一种是 基于时延(delay-based) 一种是基于损失(loss-based)。

1. Introduction

带宽变化很大,但是呢,媒体的编码方法不能改了。不能依靠编码来解决带宽变化拥塞问题。
拥塞的时候,其他程序也不会减小带宽,来让网络不拥塞,所以只能改自己不能依靠别人了。不能依靠别的程序解决拥塞的问题。
编码输出对丢包是很敏感的,然而,要有实时性,丢的包也不会去重传了。网络拥塞的时候会丢包,因为实时性,不让重传。

1.1 Mathematical notation conventions

X_hat 变量X的真实值的估计值 - 通常在变量名的顶部用符号标记。

X(i) 数组X的第i个值-通常用下标i标记。

E{X} 随机变量X的期望值

2. System model

  • RTP数据包 - 包含流媒体数据的RTP数据包。

  • 数据包组Packet group -连续RTP包的集合,由组出发时间和组到达时间(absolute send time)【abs-send-time】唯一标识。这些包可以是视频包、音频包或音频和视频包的混合

  • 传入媒体流 - 由RTP数据包组成的帧流。
    在这里插入图片描述

  • RTP发送方 - 发送RTP流。RTP发送方负责生成RTP时间戳以及abs-send-time头扩展

  • RTP接收方 - 接收RTP流,并记录RTP报文的到达时间。

  • 【接收端】RTCP sender at RTP receiver–发送RR(接收方报告receiver report)、REMB消息、传输层RTCP反馈报文(transport wide feedback packet)。

  • 【发送端】RTCP receiver at RTP sender - 负责接收RR报文、REMB报文、传输层RTCP反馈报文(transport wide feedback packet)。并将接收信息通知到本方控制器。

  • 【发送端】RTCP receiver at RTP receiver - 接收SR报文 sender reports

  • 基于丢包的控制器 - 进行丢失率测量、RTT时间测量和(接收)REMB消息,并计算发送端的目标发送比特率。

  • 基于延迟的控制器 - 可以部署在RTP接收端记录RTP报文的到达时间或部署在RTP发送端从接收端的反馈报文中获取数据包的到达时间,【就是为了获得到达时间,要么就从接收端里的RTP记录到达时间,接收端算,要么就从发送端收到的RR里面找一下,发送端算】计算最大比特率并传递给基于丢包的控制器。

2.1 question

  1. REMB是啥,有什么作用
  2. transport wide feedback packet是什么有什么作用
  3. RR报文和SR报文里面有什么有什么作用

3.Feedback and extensions

有两种方法来实现提出的算法,一种是两个控制器都在发送端运行,另一种是delay-based控制器在接收端运行,loss-based控制器在发送端运行。
在这里插入图片描述

第一种:RTP receiver会记录到达时间和每个收到的包的传输层序列号(transport-wide sequence number,这些东西用transport-wide feedback message会定期发给发送端。【反馈的时间:时间每接收一次视频帧就反馈一次,如果只有音频或多流,至少每30毫秒一次反馈一次。如果反馈开销需要被限制,这个间隔可以增加到100ms。】发送方从反馈报文中获取RTP数据包的 {(传输层)序列号,到达时间} 信息,并与每个RTP数据包的发送时间建立映射(Map),再将这些时间戳提供给基于延迟的控制器。它还将根据反馈消息中的(传输层)序列号计算丢包率。

也就是接收端把RTP包到达时间和序列号记录一下,发给发送端。发送端根据发送时间和序列号对一下,抛给发送端的delay控制器,这样可以看出时延来,顺便算出丢包来。但是好像没有说loss控制器的什么事。

第二种:接收端的delay-based控制器,用来监控和处理到达时间和包的大小。发送方的abs-send-time RTP报头让接收者可以计算数据包组之间的延迟变化。从delay-based controller输出的是一个比特率,它将用REMB feedback message为载体,把这个比特率传给回发送方。RTCP-RR报文为载体把丢包率传给发送端。发送端 收到的REMB消息中的比特率和RR报文的丢包率被输入loss-based控制器,该控制器输出一个最终的目标比特率。当检测到拥塞时建议尽快发送REMB消息,或者至少每秒一次。

也就是接收端把RTP包到达时间和包的大小和发送时间对一下,计算不同的两个包的延迟变化,把这个延迟变化抛给delay控制器,输出来一个初级比特率,初级比特率放在REMB中,丢包率放在RR中,一起传给发送端。发送端把收到这俩率抛给loss控制器,算出来了一个最终的目标比特率。

4. Delay-based control

基于延迟的控制算法可以进一步分解为三部分:到达时间过滤器(an arrival-time filter)、过度使用检测器(an over-use detector)和速率控制器(a rate controller)
在这里插入图片描述

4.1 Arrival-time model

本节介绍了一个自适应滤波器(an adaptive filter),它根据接收数据包的时间,持续更新网络参数的估计值。
到达间隔时间inter-arrival time, t(i) - t(i-1):表示两个包或者两组包的到达时间不同. t(i)是对应于组中最后一个包被接收的时间。

出发间隔时间inter-departure time,T(i) - T(i-1):作为两个包或两组的出发时间的不同。其中T(i)是当前包组中最后一个包的出发时间戳

包组间延迟变化inter-group delay variation,d(i):d(i) = t(i) - t(i-1) - (T(i) - T(i-1))

在接收端,我们观察一组一组的传入数据包,其中一组包定义如下:
在burst_time间隔内发送的包序列组成一个小组。burst_time的建议值为5ms。此外,如果其inter-arrival time小于burst_time并且d(i)<0的数据包也被认为是当前组的一部分。 将这些数据包纳入组内的原因是为了更好地处理由"因与拥堵无关的原因,数据包排队"引起的延迟瞬变。任何无序接收的数据包都被Arrival-time model忽略。
t(i) - t(i-1) > T(i) - T(i-1) 网络有拥塞
由于在一条容量为C的路径上发送一组大小为L的数据包的时间ts大致为 ts = L/C
我们可以将包组之间的延迟变化建模为:
w(i)是随机过程W的一个样本,它是链路容量C(i)、当前交叉流量和当前发送比特率的一个函数。 C被建模为常数,因为我们希望它比这个模型的其他参数变化更慢。 我们将W建模为一个白高斯过程。 如果我们over-use信道,我们希望w(i)的平均值增加,如果网络路径上的队列被清空,w(i)的平均值将减少;否则w(i)的平均值将为零。噪声项v(i)表示网络抖动和模型未捕获的其它影响延迟的因素。

4.2. Arrival-time filter

根据卡尔曼滤波,根据之前的θ和延迟来估计现在的θ,从而判断网络的拥塞

在这里插入图片描述

4.3. Over-use detector

包组间延迟变化的估计值m(i)作为到达时间滤波器的输出
在这里插入图片描述

阈值gamma对算法的整体动态性和性能有显著影响。特别是,已经证明,如果gamma使用固定的阈值,则由该算法控制的流可以被并发TCP流(抢占而导致被)饿死。通过将阈值gamma增加到足够大的值,可以避免这种饿死。原因是,通过使用较大的gamma值,可以容忍较大的队列延迟,而在较小的gamma下,Over-use detector会对偏移估计值m(i)的微小增加迅速做出反应,产生一个over-use信号,减少基于延迟的可用带宽估计值A_hat,发的东西就少了,然后越来越小就会被饿死。【gamma很小,m很快就超过gamma,判断网络是过度使用的,可用带宽很小】因此,有必要动态地调整阈值gamma_1,以便在最常见的情况下获得良好的性能,例如在与基于损耗的流量竞争时。
在这里插入图片描述
通过这个设置,可以在并发TCP流的情况下增加阈值,防止饥饿以及强制协议内部公平。当m超过阈值的时候,就会over-use,A_hat会减小,如果gamma增大,m就不会超阈值了。当m小于阈值的时候,就会under-use,A_hat会增大,如果此时gamma减小,m就不会超阈值了。建议将gamma限制在[6, 600]范围内,因为太小的gamma会导致检测器变得过于敏感。

4.4. Rate control

速率控制分为两部分,一部分控制基于延迟的带宽估计,另一部分控制基于loss的带宽估计。这两种方法都旨在只要没有检测到拥塞,就要增加可用带宽A_hat的估计值,最终确保我们既能匹配信道的可用带宽也能对信道的过载状态进行检测。
一旦检测到over-use,基于delay-based控制器的可用带宽估计值就会减少。通过这种方法,我们得到了一个递归的和自适应的可用带宽估计。

如果没有检测到拥塞,A_hat一直增加。检测到拥塞,A_hat就会减少

在本文档中,我们假设速率控制子系统周期性地执行,并且这个周期是常数。
速率控制子系统有三种状态:增加、减少和保持。“增加”为未检测到拥塞时的状态;“减少”是检测到拥堵的状态,“保持”状态是为了在进入“增加”状态前耗尽已建立的(缓存)队列。
【信号触发】状态迁移规则表(空白表示“停留在【之前的】状态”):
在这里插入图片描述
在这里插入图片描述
【我的想法】:这个地方感觉很奇怪,传统的理解,如果当前检测under-use的话,估计的带宽应该增加increase才对,但是这里并没有,而是一直hold 。我的理解是对under-use放宽要求了,因为m是两个包到达延迟的差,不可能m一直小,也就是发包越来越快,早晚会有一个静止不动的情况,早晚不会under-use,会回到normal的状态。但是如果是over-use的状态,会更over-use,不会回到hold的状态。

子系统启动时的初始状态是increase状态,直到探测器子系统检测到over-use或under-use为止。在每次更新时,基于延迟的可用带宽估计会根据当前状态采用乘法或加法的方式增加带宽估计值。

如果当前带宽估计远未收敛,则系统会使用乘法增加估计带宽,而如果更接近收敛,则系统会使用加法增加估计带宽。如果当前传入的比特率R_hat(i)接近之前处于下降状态时传入的比特率的平均值,则可以认为是接近收敛。

所谓“接近”,在这里被定义为距离该平均值在三个标准差之内。

我们建议使用0.95作为指数平滑系数来测量输入的 比特率 的平均值和标准差,因为我们认为它可以覆盖在 减少 状态下的多个场景。

当无法获得这些统计数据的有效估计值时,我们假设我们还没有接近收敛,因此仍处于乘法增长状态。如果R_hat(i)增加到平均最大比特率的三个标准偏差以上,我们认为当前拥塞等级已经改变,此时我们重置平均最大比特率并回到乘法增加状态。
R_hat(i)是基于delay-based的控制器在T秒窗口内测量的传入比特率:
在这N(i)是过去T秒内接收的数据包数量,L(j)是数据包j的有效载荷大小。建议使用0.5到1秒之间的窗口。

在乘法增加过程中,估计值最多增加8%每秒。
在这里插入图片描述
在加法增加过程中,每过 response_time响应时间t2 的间隔时间,这个估计值 A_hat(i-1) 会增加大约半个数据包的大小。response_time间隔估计为往返时间加上100 ms作为over-use估计器和检测器反应时间的估计。
在这里插入图片描述

我们假设帧率是30的时候:

bits_per_frame = A_hat(i-1) / 30 每一帧的比特率
packets_per_frame = ceil(bits_per_frame / (1200 * 8)) (相当于bytes_per_frame/mtu)  
avg_packet_size_bits = bits_per_frame / packets_per_frame

因为这个算法依赖 over-use 来判断当前的可用带宽估计值,我们必须确保我们的估计值不会远离发送端实际的发送码率。所以,如果发送端无法产生这个拥塞控制器要求的 bitrate,我们需要将可用带宽估计值限制到一个范围:A_hat(i) < 1.5 * R_hat(i)。
当探测到over-use,这个系统会转换为 Decrease 状态,可用带宽会降低到:A_hat(i) = alpha * R_hat(i)。alpha在范围[0.8 0.95]之间,建议为0.85。
在这里插入图片描述

当检测器向速率控制子系统发出under use 的信号时,我们知道网络路径中的队列正在被清空,我们的可用带宽估计值A_hat低于实际可用带宽。根据该信号,速率控制子系统将进入hold状态,接收方可用带宽估计值将保持不变,同时等待队列稳定在较低级别,这是一种控制低延迟的方法。延迟的减小可能是由于在over-use后带宽估计值减小,也有可能由于一些交叉网络的连接减少了。建议每个response_time 间隔都要更新一个 A_hat(i)

4.5 参数设定

+------------+-------------------------------------+----------------+
   | Parameter  | Description                         | RECOMMENDED    |
   |            |                                     | Value          |
   +------------+-------------------------------------+----------------+
   | burst_time | Time limit in milliseconds between  | 5 ms           |
   |            | packet bursts which identifies a    |                |
   |            | group                               |                |
   | Q          | State noise covariance matrix       | diag(Q(i)) =   |
   |            |                                     | [10^-13        |
   |            |                                     | 10^-3]^T       |
   | E(0)       | Initial value of the  system error  | diag(E(0)) =   |
   |            | covariance                          | [100 0.1]^T    |
   | chi        | Coefficient used  for the measured  | [0.1, 0.001]   |
   |            | noise variance                      |                |
   | gamma_1(0) | Initial value for the adaptive      | 12.5 ms        |
   |            | threshold                           |                |
   | gamma_2    | Time required to trigger an overuse | 10 ms          |
   |            | signal                              |                |
   | K_u        | Coefficient for the adaptive        | 0.01           |
   |            | threshold                           |                |
   | K_d        | Coefficient for the adaptive        | 0.00018        |
   |            | threshold                           |                |
   | T          | Time window for measuring the       | [0.5, 1] s     |
   |            | received bitrate                    |                |
   | alpha      | Decrease rate factor                | 0.85           |
   +------------+-------------------------------------+----------------+

5. Loss-based control

在发送端
拥塞控制器的第二部分基于从基于延迟的控制器接收到的往返时间、数据包丢失和可用带宽估计A_hat做出决策。
基于延迟的控制器产生的可用带宽估计值A_hat只有在路径上的队列足够大时才可靠。如果队列长度很短,则 over-use 状态只能通过丢包得知,这样 delay-based controller 便不可用了。
丢包率控制器应该在收到每个反馈信息(收到 rtcp)的时候运行一次。

  • 如果丢包率控制在 2-10%,则 As_hat(i) 保持不变。
  • 如果丢包率超过 10%,则我们计算 As_hat(i) = As_hat(i-1)(1-0.5p)。其中p是丢包率。
  • 如果丢包率小于 2%,则 As_hat(i) 应该增加,As_hat(i) = 1.05*As_hat(i-1)。
    这个新的带宽预测值的下界是 TFRC,这是一种 TCP 友好的速率控制公式(这个公式产生的带宽相对与 TCP 来说相当公平,且速率较为平稳)。上界是A_hat(i)。上界和下界的公式如下:
                                      8*s
  As_hat(i) >= ---------------------------------------------------------
               R*sqrt(2*b*p/3) + (t_RTO*(3*sqrt(3*b*p/8)*p*(1+32*p^2)))

  As_hat(i) <= A_hat(i)

公式中的 b 表示单个 tcp 的确认的包的数量。t_RTO 是TCP的重传超时时间,单位是秒,我们在这里设它为 4*R。s 是 平均每个包的字节数。R 是 rtt 时间,单位是秒。(我们将上述公式的分子乘8,用于将字节数转换为比特数)

简而言之:loss-based 的估计值不会大于 delay-based 估计值,也不会小于 TFRC 计算公式。(除非 delay-based 的估计值小于 TFRC)
一开始当传输通道 over-use,它应该只有很小的丢包率,这时我们由于发现丢包率没有达到 10%,所以并不会降低发送码率。于是,信道由于不断堆积,很快就会超过10%的丢包率(由于前面的数据包已经将队列填满,后续的数据包到来的速度又大于队列消耗的速度)。如果这个丢包率的产生和拥塞无关(那么它将上升到10%的丢包率),那么我们不应该对它进行处理。

如果传输通道由于over-use而有少量的丢包,如果发送方不调整他的比特率,这个丢包量很快就会增加来激励丢包阈值。因此,很快就会达到10%以上的阈值,我们应该调整As_hat(i)。但是,如果丢包率没有增加,那么这些丢包可能与自己造成的拥塞无关,因此我们不应该对它们做出处理。

6.Interoperability Considerations

如果发送方实现了这些算法,而接收方实现,建议发送方关注接收方的RTCP报告,并使用丢包率和rtt作为基于损失的控制器的输入。基于延迟的控制器就禁止使用了。

7. 跟同事交流

基于loss的和基于delay的都是通过控制发送的编码每次传几个包,来控制发送的带宽,然后控制拥塞。超过的包就直接丢掉了,发了也没有用,接收端会直接丢掉。

8. 一些想法

感觉读这种文献很好,可以从本质帮忙理清思路,而不是学一些很浅的东西。但是有一个问题,翻译太耗费时间了,因此下一次再学习相关的东西的时候就需要先搜索一下市面上的有没有已经翻译好的版本,两个结合来看。

【gcc】RtpTransportControllerSend学习笔记 3:gcc 算法 gcc 阅读详情

相关推荐

【AI生成】 LoRa无中心自组网实现方案

LoRa技术是一种低功耗广域网通信技术,它采用了扩频频率调制技术,能够实现远距离的传输。LoRa在物联网中具有重要的应用价值,可以支持大规模的设备连接并且具有较低的成本。同时,LoRa具有高度的抗干扰能力和适应性,能够在复杂的环境中实现稳定的通信。通过使用无中心自组网实现方案,可以进一步提高LoRa网络的灵活性和可靠性,实现设备之间的智能互联。LoRa无中心自组网实现方案将为物联网应用提供更加便捷和高效的通信解决方案。LoRa无中心自组网实现方案一、无中心自组网概念及优势。

qq_31310977的博客 2090

GCC读书笔记

       本文档摘自《GCC中文手册》,对其中重要内容进行了记录,忽略了一些我认为不是非常重要的地方。gcc编译C,g++编译C++。       总体选项-x 通常来说,编译器使用编译的方式是根据文件的后缀名来判断,如果不想使用默认后缀名识别的方式,可以使用这个参数制定文档命名的方式。如果想取消,则使用-x none.-c 编译,编译完文件为.o。-S 编译,不进行汇编-

李永亮的专栏 860

深入解析组合逻辑环(combinational loop)的成因与解决方案

本文深入解析了数字电路设计中组合逻辑环(combinational loop)的成因与危害。通过边沿检测和中断轮询(round_robin)仲裁器等实例,揭示了代码如何意外形成环路,并对比了插入触发器、重构逻辑以及状态机思维三种核心解决方案,帮助硬件工程师从根本上避免这一常见设计陷阱,确保电路稳定可靠。

weixin_28278377的博客 314

A Google Congestion Control Algorithm for Real-Time Communication

翻译:A Google Congestion Control Algorithm for Real-Time Communication

黑板报 1196

2025年春科研论文写作指导(如何写好科研论文)研究生网课期末考试

希望能帮助到大家

beijieweiyu的博客 5791

我用 AI Agent 全自动跑 COMSOL 仿真:从建模到后处理,踩了 10+ 个深坑

本文探讨了利用AI通过COMSOL Java API实现AI芯片液冷冷板全流程自动化仿真的实践。针对700W高功耗AI芯片的散热需求,构建了包含4颗Chiplet和微通道冷板的三维液冷模型。通过严格设计的Prompt工程,AI Agent成功完成了从几何建模到结果验证的全过程,最终实现了芯片最高温度54°C的良好散热效果。文章重点分享了10个关键问题的解决经验,包括流体连通性验证、网格顺序控制、离散阶数选择、收敛判据优化等,并建立了包含流场/热场/网格独立性的三重验证体系。实践表明,AI可高效处理重复性工作

sjjsjjsjjsjjsjj的博客 980

WebRTC GCC 拥塞控制算法(TCC-GCC)

网络传输中链路的带宽是有限的,为避免往链路发送过载的数据量导致网络拥塞,我们需要进行带宽预估,结合预估带宽作出调整避免网络拥塞。 在《WebRTC GCC 拥塞控制算法(REMB-GCC)》中我们总结了 REMB-GCC 拥塞控制算法,并在文末提到 Google 已经推出 TCC-GCC 取代 REMB-GCC。TCC-GCC 的原理也是基于延时梯度和丢包率进行带宽预估并避免网络拥塞,不同之处在于逻辑都在发送端进行计算,接收端只是反馈包的接收状态(是否收到,以及与上一个包的接收时间差)。

椛茶的博客 5928

模型优化系列——模型剪枝/量化概述

模型优化目的:通过减少模型大小,提高推理速度等使模型成功部署在各个硬件中并实时有效运作。

qq_61210574的博客 1293

WEBRTC带宽估计A Google Congestion Control Algorithm for Real-Time Communication on the  World Wide Web

[Docs] [txt|pdf|xml|html] [Tracker] [Email] [Diff1] [Diff2] [Nits] [IPR]Versions: 00010203draft-alvestrand-rmcat-congestion Network Working Group H. Lund...

zp704393004的专栏 1716

SAP UI5 OData V4 操作结果访问:从 getObject 到返回值上下文与 $$inheritExpandSelect

SAP UI5 OData V4 操作结果获取指南 摘要:在 SAP UI5 OData V4 模型中,操作结果需通过绑定上下文获取而非直接从 invoke() 返回。本文详解核心要点: 数据获取路径 使用 invoke() 发起请求后,通过 getBoundContext().getObject() 获取结果 特定场景下 invoke() 可能返回返回值上下文(如草稿切换) 关键实践技巧 使用 $$inheritExpandSelect 继承字段选择,避免二次读取 对象页应用中,通过替换绑定上下文实现无缝

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 314

OpenClaw Skill 开发全攻略|2026 最新机制 + 文件处理实操,看完直接落地开发

很多新手刚接触时,会把 Skill 想得很复杂,其实大可不必。OpenClaw 中的每个 Skill,本质就是一套“能力描述 + 执行逻辑”的组合包,简单说就是“告诉 AI 你能做什么、怎么做,它就会调用你”,核心特征可以总结为这几点,好记又实用:核心载体:以文件夹为单位,不管多简单的 Skill,文件夹里都必须有 SKILL.md 文件——这是 AI 识别技能的唯一依据,少了它,再完善的代码也没用;

haolove527的专栏 7027

GCC源代码阅读

获取GCC源代码 阅读源代码的第一步是获取源代码,巧妇难为无米之炊嘛! 使用以下任意方法均可获得gcc源代码: svn checkout svn://gcc.gnu.org/svn/gcc/trunk SomeLocalDir (摘自http://gcc.gnu.org/svn.html) git clone git://gcc.gnu.org/git/gcc.git(摘自http...

weiyinchao88 531

STM32实战开发(76):STM32开发无线传感器网络(WSN)完整实现

本文介绍了如何基于STM32开发无线传感器网络,包括硬件选择、通信协议、系统设计和编程实现。通过STM32的强大性能和低功耗特性,我们能够构建高效、可靠的无线传感器网络。无论是Zigbee、LoRa、Wi-Fi还是BLE协议,STM32都能够与多种通信模块进行兼容,满足不同应用的需求。希望这篇文章能帮助您了解无线传感器网络的构建流程,并为您的项目提供有价值的参考。

2201_76125393的博客 1059

【音视频】 WebRTC GCC 拥塞控制算法

GCC(Google Congestion Control)是 Google 为实时音视频通信(RTC)设计的拥塞控制算法,是 WebRTC 框架默认的拥塞控制方案。其核心目标是在避免网络拥塞的前提下,最大化利用网络带宽,同时保证音视频传输的低延迟和低丢包率 —— 这对实时场景(如视频会议、直播)至关重要。

Antonio915的博客 1903

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

【音视频第11天】GCC论文阅读(2)

本文档介绍了适用于webRTC两种拥塞控制算法。一种是== 基于时延(delay-based)== 一种是== 基于损失(loss-based)==。

Magic_o的博客 1387

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

【音视频第10天】GCC论文阅读(1)

本文档介绍了适用于webRTC两种拥塞控制算法。一种是== 基于时延(delay-based)== 一种是== 基于损失(loss-based)==。

Magic_o的博客 981

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

实时音视频通信(RTC)中必须要了解的三种关键算法

1、背景 RTC(Real-time Communications),实时通信,是一个正在兴起的风口行业,特别是近两年电商、教育等行业直播的普及以及各种设备之间的音视频通话场景。从技术角度来说,RTC并不是一个新兴技术,从智能手机流行以来,RTC就已经出现在一对一的音视频通话场景中,最初的技术方案也比较直观,当设备通过服务端建立通话连接后,两个设备以点对点的方式直接通信,具体实现方式就是把编码压缩过的音视频数据包通过UDP协议封包后发送给接收方,接收方收到UDP数据包后,就可以进行拆包,解码并播...

HaaS技术社区的博客 7323

【Linux】基于Mplayer开源多媒体库的音视频播放器

文章目录 项目概况 项目需求 搭建环境 技术描述 概要设计 条件准备和主界面构架 点名系统 相册 视频 音乐 项目总结 项目概况 本次项目是基于Linux环境的交叉编译arm-linux-gcc,在GEC6818arm开发板上运行,创建多条链表分别存储遍历到当前目录下子目录中的音乐、视频和图片文件名,通过读取触摸设备文件的点击事件进行判断,选择对相册切换以及音视频的快进/快退、上下首切换、音量...

zhong_senvi的博客 2万+

流媒体学习之路(WebRTC)——Pacer与GCC(5)

Pacer(Packet Pacing)的作用是在传输数据时能平滑的发送出去,减少对网络冲击和抖动的产生,提高通信质量。在一次数据传输中,如果所有包几乎同时发送,网络就可能会遭遇到冲击,这就可能导致网络拥塞,数据包丢失等问题。为了避免这样的问题,需要通过一个定时器均匀分散发送数据包。特别是在音视频传输中,PACER更是非常重要的一部分。因为音视频的传输对于网络的稳定性和实时性要求非常高,任何形式的网络抖动或者丢包都会造成音视频的卡顿,延迟等问题。

qw225967的博客 2594

【音视频第1天】常见的术语含义等

在WebRTC中,ARQ(Automatic Repeat Request)和Nack(Negative Acknowledge)也被用于数据传输过程中检测和纠正错误。发送方发送数据包,接收方收到并检验数据包,若数据包出现错误,则向发送方发送Nack请求重传该数据包。发送方收到Nack后,会重新发送该数据包,直到接收方接收到正确的数据包为止。ARQ和Nack解决的问题也是数据传输过程中的错误。在WebRTC中,数据传输过程中数据包可能会出现错误,比如数据包被丢失、数据包内容损坏等。

Magic_o的博客 1457

为什么要在 Ubuntu 22.04 上手动安装 GCC 12.2?系统自带版本不够用吗?

本文探讨了在Ubuntu 22.04上手动安装GCC 12.2的必要性。系统自带的GCC 11.3虽稳定,但在追求极致性能优化、完整支持C++20等新语言特性、构建环境可控及解决ABI兼容性问题时,手动编译安装新版GCC能提供更优的解决方案。文章详细分析了性能提升、新特性支持及环境隔离等核心优势,并提供了实战安装指南。

rgv23456789的博客 402

弱网优化,GCC 动态带宽评估算法(内附详细公式)

通过上次的《RTC 系统音视频传输弱网对抗技术概览》,我们知道 RTC 的三大核心指标为实时性、清晰度、流畅度。在整个通话过程中核心表现达标,才能给用户一个基本的良好体验。关注【融云全球互联网通信云】了解更多 然而音视频数据在网络中传输时,网络是变化多端和不可预知的,比如地铁、公交、 家里、公司公用 WiFi,以及不同时间段流量高峰等造成的网络变化都不一样,这些都会造成网络的抖动、带宽容量动态变化等,最终影响音视频的体验。 因此,我们需要对网络带宽变化进行有效的动态探测和评估,保证音视频链路上发送的音视

weixin_44764152的博客 2549

Android12编译kernel4.9解决:scripts/gcc-wrapper.py, line 79, in run_gcc(一百六十八)

本篇目的:Android12之解决scripts/gcc-wrapper.py", line 79, in run_gcc报错。

Android系统攻城狮 747

实时音视频通信(RTC)音视频实时的几种算法

从技术角度来说,RTC并不是一个新兴技术,从智能手机流行以来,RTC就已经出现在一对一的音视频通话场景中,最初的技术方案也比较直观,当设备通过服务端建立通话连接后,两个设备以点对点的方式直接通信,具体实现方式就是把编码压缩过的音视频数据包通过UDP协议封包后发送给接收方,接收方收到UDP数据包后,就可以进行拆包,解码并播放,这种方式的特点就是简单粗暴,不需要关心网络情况,后果是有可能出现丢包,特别是网络情况发生变化时,会出现听不到声音,画面卡顿等情况,所以整体用户体验会比较差。抖动现象是怎么产生的呢?

hey5178的博客 420

语音数字信号处理——GCC-PHAT计算回声时延

从结果上来看其实会偶尔存在误差,这是由于fft的精度问题,在实际使用中受到环境噪声影响可能误差会更大。其实这种方法最好结合频带分割,对于低频、中频、高频给予不同的权重,而这种权重可以根据能量分布来进行计算。本文中将不过多展示了。

专注音视频底层算法与工程实现,深入解析数字信号处理。深入研究WebRTC 3A、多麦声源定位、vad、语音识别等技术 1万+

ESP32-S3轻量级RTP音视频通信方案

RTP(实时传输协议)是物联网音视频通信的核心传输标准,其原理基于时间戳同步、序列号防乱序与UDP低延迟特性,技术价值在于资源受限设备上实现可预测的端到端延迟。在嵌入式AIoT领域,开发者亟需兼顾弱网鲁棒性与MCU级内存约束的实时音视频栈,典型应用场景包括可视门禁、智能监控与远程交互终端。ESP32-S3凭借双核处理能力、硬件加速外设及丰富SRAM资源,成为部署轻量RTP方案的理想平台;结合MJPEG软编码与Opus音频处理,可在300KB内存占用内构建完整双向链路,精准匹配边缘设备工程边界。

solidity8miner的博客 698
上一篇: 【音视频第11天】GCC论文阅读(2)
下一篇: 【音视频第13天】另外一种拥塞控制算法-TransportCC
Magic_o
博客等级 码龄8年 65粉丝 162原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值