第 11 部分导论 · 看不见的通话怎么调试

WebRTC 的问题往往在线上、在别人的网络里、还无法复现——这让「可观测性」成了刚需。这一章讲清 WebRTC 可观测性的两大支柱:getStats(实时指标快照)与 RtcEventLog(事后逐事件回放),以及它们各自回答什么问题。

作者 David更新于 第 100 篇(共 112 篇)

第 11 部分导论 · 看不见的通话怎么调试

引擎(第 0~9 部分)和地基(第 10 部分)都齐了。但真实产品里最头疼的事往往是:用户说“卡了”“听不清”,而你什么都看不见。这一部分讲 WebRTC 怎么让“看不见的通话”变得可观测、可调试。

为什么 WebRTC 特别难调试

WebRTC 的 bug 有三个特点,让传统调试手段几乎失效:

  • 在线上、在别人的网络里 —— 问题常出在用户的弱网、NAT、防火墙环境,你的开发机上一切正常。你没法 attach 调试器到用户的浏览器。
  • 无法复现 —— 网络状况瞬息万变,“刚才那 3 秒卡顿”可能永远不会以同样的方式再来一次。断点调试对“一次性、时序相关”的问题无能为力。
  • 跨越十几个子系统 —— 一次“卡顿”可能源于带宽估计过低、丢包重传、jitter buffer 拉长、编码器降质……问题在哪个环节?光看现象说不清。

所以 WebRTC 不能靠“打断点、看日志”这类传统手段,必须内建可观测性——让引擎在运行时自己吐出足够的数据,事后能重建“当时到底发生了什么”。这不是可选功能,是实时通信产品的生存必需。

两大支柱:快照 vs 回放

WebRTC 的可观测性由两套互补的机制支撑,回答不同的问题:

图表加载中…
支柱是什么回答的问题本部分
getStats / RTCStatsReport某一刻的指标快照(W3C 标准)“现在怎么样?”第 2~3 章
RtcEventLog逐事件的二进制日志“刚才发生了什么?”第 4~5 章

getStats 是“快照”——它给你此刻的一组数字(当前码率、丢包率、RTT、分辨率、jitter),适合做实时监控、仪表盘、质量告警。RtcEventLog 是“录像”——它把通话期间的每个关键事件(收发的 RTP 头、RTCP、ICE 事件、带宽估计变化)逐条记下来,事后能逐帧回放**、画成图,重建问题现场。** 两者互补:

一个是“体温计”(随时读个数),一个是“黑匣子”(出事了调出来还原)。真实排障中两者常配合:先用 stats 发现异常,再用 event log 定位根因。

这一部分怎么安排

小结与下一章

WebRTC 的 bug 常在线上、在别人的网络、无法复现、跨十几个子系统,传统“打断点”手段失效,所以它内建可观测性。两大支柱互补:getStats/RTCStatsReport 是“快照 / 体温计”,给此刻的标准指标,适合实时监控;RtcEventLog 是“录像 / 黑匣子”,逐事件记录、事后可视化回放,适合深挖具体问题。先发现异常、再定位根因,两者配合。

先看第一支柱——getStats 的数据模型。👉 getStats 与 RTCStatsReport。

参考资料

  • [1] libwebrtc 源码.api/stats/、rtc_event_log/rtc_event_log.h。
  • [2] WebRTC 官方 g3doc/rtc_event_log.md。
  • [3] W3C「Identifiers for WebRTC's Statistics API」(getStats 标准)。

本页目录