The Problem with webrtc-internals Dumps

When a WebRTC call goes bad, Chrome already recorded everything at chrome://webrtc-internals. You can export a JSON dump, but it's dense, undocumented, and easy to misread. This field guide walks through each section, what to look at first, and the failure signatures that tell you where the call broke.

The Shape of a Dump

A dump has two top-level parts:

Read them in that order. Most people jump straight to the graphs and miss that the call never negotiated.

1. The getUserMedia Section: Did You Get the Media You Asked For?

Each entry shows requested constraints and the resolved track. Two quick checks:

Also note the device brand (microphone and webcam)—it sometimes sheds light on your problem.

2. The Connection Config: Is There a TURN Server?

In the peer connection block, look at the iceServers config. If there is no turn: entry, the call can only connect when both sides have a direct path. On real networks (corporate firewalls, symmetric NAT, mobile), that fails a meaningful fraction of the time. A missing or misconfigured TURN server is one of the most common production failures, and it's invisible unless you look here.

3. The Event Log: How Far Did Negotiation Get?

The event log is the timeline. Read it top to bottom and watch two state machines:

4. The Selected Candidate Pair: How Did the Call Connect (or Not)?

Filter the stats for candidate-pair and find the nominated/selected pair. The local and remote candidate types tell a story:

On the selected pair, currentRoundTripTime is your real network latency. Anything consistently above ~300ms will be felt as lag.

5. The RTP Stats: Where the Quality Actually Lives

This is the part most people mean when they say "read the dump." Look at inbound-rtp (media you received) and outbound-rtp (media you sent), per track. The metrics that matter:

6. The Graphs: Read the Shape Over Time

Every metric above is plotted over the call. The shape is the diagnosis:

Putting It Together

The method is always the same: confirm media exists (1-2), confirm negotiation and connection (3-4), then read RTP stats and graphs to separate network problems (loss, jitter, RTT) from media problems (qualityLimitationReason: cpu, resolution drops) from connectivity problems (ICE failed, all-relay). Most "bad call" tickets resolve to one of those three buckets.

If you'd rather not parse JSON by hand, rtcStats reads a webrtc-internals dump and surfaces the same findings automatically: flags the observations above, scores the call's experience, and explains in plain language. Upload the dump in the browser and get the read without the manual pass. Either way, now you know what the tool is looking at.

The open source piece of rtcStats enables you to systematically collect webrtc-internals-like dumps (called rtcstats files) in your WebRTC deployment, so every call is counted, logged, and analyzed.