RTC 与网络
改善 RTC 的延迟与稳定性
用 getStats 的差分指标解释弱网、抖动缓冲与隐藏丢包。
先做什么
先看统计量的定义和单位,再看曲线。累计计数、区间平均与瞬时数值不能混用;丢包少也可能因缓冲不断增加而听起来很慢。
理解这条链路
周期 getStats同流差分丢包与缓冲听感事件条件归因单项调整
区间指标如何计算
以同一 stats.id/SSRC 连续采样,区间平均缓冲延迟=ΔjitterBufferDelay/ΔjitterBufferEmittedCount,秒转毫秒乘 1000。分母为零、重连后计数重置或负增量时标为无效窗口;缺失指标留空,不填零。同时看 concealedSamples 与真实播放事件,了解丢包被隐藏的情况。
调整必须有对照
降低缓冲可能降低延迟但增加断音;增加冗余可能改善丢包但占用带宽;重传在高 RTT 下可能来不及。一次只改一个参数或策略,保留相同损伤条件下的原音、统计和接收侧试听,确认改善没有转移成另一种问题。
按这个顺序操作
- 固定采样周期,保存原始 getStats 和媒体流标识。
- 分别计算丢包、缓冲、隐藏样本与往返时间,不合成无来源 MOS。
- 对随机丢包、突发丢包、抖动、限带宽和正常网络分组测试。
- 找到与用户听感对应的变化后,再设置基于基线的告警阈值。
可直接复用的记录模板
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