AIAI 学习 · 专题库

RTC 与网络

改善 RTC 的延迟与稳定性

用 getStats 的差分指标解释弱网、抖动缓冲与隐藏丢包。

资料复核:2026-09-082 份直接来源含操作步骤与记录模板
先做什么

先看统计量的定义和单位,再看曲线。累计计数、区间平均与瞬时数值不能混用;丢包少也可能因缓冲不断增加而听起来很慢。

理解这条链路

周期 getStats同流差分丢包与缓冲听感事件条件归因单项调整
参考流程:根据公开能力整理的操作顺序;分支、重试和回退以正文说明为准,不代表厂商内部实现。

区间指标如何计算

以同一 stats.id/SSRC 连续采样,区间平均缓冲延迟=ΔjitterBufferDelay/ΔjitterBufferEmittedCount,秒转毫秒乘 1000。分母为零、重连后计数重置或负增量时标为无效窗口;缺失指标留空,不填零。同时看 concealedSamples 与真实播放事件,了解丢包被隐藏的情况。

调整必须有对照

降低缓冲可能降低延迟但增加断音;增加冗余可能改善丢包但占用带宽;重传在高 RTT 下可能来不及。一次只改一个参数或策略,保留相同损伤条件下的原音、统计和接收侧试听,确认改善没有转移成另一种问题。

按这个顺序操作

  1. 固定采样周期,保存原始 getStats 和媒体流标识。
  2. 分别计算丢包、缓冲、隐藏样本与往返时间,不合成无来源 MOS。
  3. 对随机丢包、突发丢包、抖动、限带宽和正常网络分组测试。
  4. 找到与用户听感对应的变化后,再设置基于基线的告警阈值。

可直接复用的记录模板

delay_ms = 1000 * (delay_now - delay_prev) / (emitted_now - emitted_prev)
前提:同一 stats 对象;增量有效;emitted 增量 > 0
记录:stats_id / timestamp / ssrc / jitter / packetsLost / packetsReceived
jitterBufferDelay / jitterBufferEmittedCount / concealedSamples / totalSamplesReceived
missing 与 reset 必须单独标注。

做到什么程度才算通过

  • 累计量经过正确差分。
  • 重连和分母为零不会产生错误曲线。
  • 网络 jitter 不被写成口到耳延迟。
  • 调整收益有试听与同条件对照。
当前证据的限制

本轮没有采集当前浏览器通话 getStats 或执行弱网注入;字段可用性依浏览器和版本而异。

本轮确认的事实与来源

以下为公开资料支持的具体结论;操作流程和验收建议属于工程推导。仓库说明或厂商效果表述不等于独立实测。

[1] W3C · WebRTC Stats

W3C 规范说明 jitterBufferDelay 是累积驻留时间,除以 jitterBufferEmittedCount 得到平均缓冲延迟;区间测量应对同一对象计算增量。

资料日期:2025-09-25 · 复核:2026-09-08

阅读原始来源 ↗
[2] IETF RFC 3550 · RTP/RTCP

RTP/RTCP 的 interarrival jitter 是到达间隔波动的统计,不是单向网络延迟或端到端音频延迟。

资料日期:2003-07 · 复核:2026-09-08

阅读原始来源 ↗

这次更新了什么

合并 RTC 性能与监控专题;取消丢包 5%、RTT 400ms 等通用告警线,改用现场基线。

合并前的内容入口

以下旧地址仍可访问,并会带你来到本篇。完整重构前材料已留存本地备份。

  • rtc-hub/rtc-performance-optimization.html
  • rtc-hub/rtc-quality-assurance.html

接着解决下一个问题