Next-Gen App & Browser Testing Cloud
Trusted by 2 Mn+ QAs & Devs to accelerate their release cycles

A practical guide to chrome://webrtc-internals: open it, read the getStats metrics, capture a dump, debug common call issues, and validate fixes across real browsers and devices.

Kavita Joshi
Author
June 10, 2026
The global WebRTC market was worth USD 9.56 billion in 2025 and is on track to reach USD 122.08 billion by 2034, according to Fortune Business Insights. WebRTC now ships in roughly 96% of browsers, per caniuse data on RTCPeerConnection, which means your video and audio calls run on hardware and networks you do not control.
When a call drops, freezes, or goes silent, you need numbers, not guesses. chrome://webrtc-internals is the built-in Chrome page that exposes those numbers - packet loss, jitter, round-trip time - for every live session. This guide shows how to open it, read it, capture a dump, debug the most common failures, and then validate your fix across real browsers and devices with TestMu AI.
Overview
chrome://webrtc-internals is Chrome's built-in page that shows live getStats() data - packet loss, jitter, round-trip time, and ICE candidates - for every active WebRTC call, so you can see exactly why a call connects, degrades, or fails.
How Do You Open chrome://webrtc-internals?
Open the tool first, then the call: type chrome://webrtc-internals in a new tab, start your WebRTC call in another tab, and expand the RTCPeerConnection section that appears. Edge uses edge://webrtc-internals and Firefox uses about:webrtc.
Which Metrics Matter Most?
How Does TestMu AI Help Test WebRTC Apps?
chrome://webrtc-internals only inspects one local session. TestMu AI's cross-browser cloud reproduces the same call on real browsers and devices, and the Agent Testing platform validates voice AI agents running over those calls across 20+ noisy, poor-connection environments.
chrome://webrtc-internals is a built-in Chrome diagnostics page that records every active WebRTC session in the browser. It visualizes the RTCPeerConnection API and live statistics - ICE candidates, codecs, packets, jitter, and round-trip time - so you can see exactly why a call connects, degrades, or fails.
Every graph on the page is a value pulled from the WebRTC getStats() API, defined by the W3C Identifiers for WebRTC's Statistics API specification. Chrome samples getStats() on a timer and draws each value as a live chart, which is why the page only shows data while a call is running.
It sits alongside the other Chrome diagnostics surfaces. If you already use the Chrome Developer Tools Network and Console panels, think of webrtc-internals as the same idea aimed specifically at real-time media. For remote sessions, you can pair it with Chrome remote debugging to inspect a call running on another device.
The page captures only the calls that are live while it is open, so the order matters: open the tool first, then start the call.
WebRTC is not Chrome-only, and neither is the tooling. Chrome has supported RTCPeerConnection since version 23, Edge since 79, Firefox since 22, and Safari since 11, which is how WebRTC reaches that 96% browser coverage. Each engine exposes its own internals page:
| Browser | Internals page | What you get |
|---|---|---|
| Chrome | chrome://webrtc-internals | Full getStats() graphs, event logs, and a Create Dump button for offline analysis. |
| Edge | edge://webrtc-internals | Identical to Chrome, since Edge is Chromium-based; useful for reproducing Edge-only issues. |
| Firefox | about:webrtc | RTCPeerConnection statistics, a connection log, and media context, with JSON export. |
| Safari | Web Inspector (no dedicated page) | Read getStats() manually through the JavaScript console; no built-in internals dashboard. |
Firefox's about:webrtc is the most polished alternative. Per the Firefox source documentation, it groups RTP stream, bandwidth, and frame statistics, and the Copy Stats Report button exports the whole session as JSON for a bug ticket. If you regularly compare engines, our guide on Edge vs Chrome and the cross-browser testing hub explain where their behavior diverges.
The page shows dozens of graphs, but a handful decide whether a call feels good or broken. The W3C statistics specification groups them into objects like inbound-rtp, outbound-rtp, and candidate-pair; these are the values worth watching first.
Read them together, not in isolation. High packet loss with a normal RTT points at a lossy last-mile link, while a high RTT with clean packet counts points at distance or an unnecessary relay. That pairing is what turns webrtc-internals from a wall of charts into a diagnosis.
Note: A clean call on your Chrome does not prove a clean call on a user's mid-range Android over 4G. TestMu AI lets you replay the same WebRTC session on a real device cloud and read these exact getStats values per device. Start testing free.
Live graphs vanish the moment the call ends, which is useless when a bug only reproduces on a colleague's machine. A dump solves that by saving the whole session to a file you can open later.
The dump is the artifact to ask for whenever someone reports a bad call you cannot reproduce. It contains the full timeline - when ICE connected, when bitrate dropped, when packets started disappearing - so you can pinpoint the failure without being in the room. Firefox users can produce the equivalent with the Copy Stats Report button on about:webrtc.
Most call complaints map to a small set of signatures in webrtc-internals. Use the symptom to know which graph to open, and the graph to know which fix to apply.
| Symptom | What to check | Likely fix |
|---|---|---|
| No audio or video at all | ICE connection state stuck at checking or failed; no nominated candidate-pair. | UDP is blocked or no reachable candidate exists. Add or fix a TURN server so media can relay. |
| One-way audio | Packets flowing in one direction only on inbound-rtp vs outbound-rtp. | A NAT or firewall is blocking one side. Force a relayed (TURN) path for symmetric flow. |
| Choppy or robotic audio | Climbing packetsLost paired with rising jitter. | Network congestion. Lower the audio bitrate and confirm forward error correction is on. |
| Frozen or blurry video | Falling framesPerSecond and bitrate; encoder downscaling resolution. | Bandwidth limit. Enable simulcast or cap send resolution so the encoder stops thrashing. |
| High latency | High currentRoundTripTime on a relayed candidate-pair. | The path is long or unnecessarily relayed. Deploy a TURN server closer to your users. |
Many of these only surface under poor network conditions, so reproduce them on purpose. Our walkthrough on how to test under different network conditions shows how to throttle bandwidth and inject loss so a clean office connection does not hide the bug your users hit on mobile data.
chrome://webrtc-internals is a single-session, single-machine tool. It tells you why the call on your desk misbehaved, but it cannot tell you whether the same call works on Safari on an old iPhone, a budget Android over a congested network, or Edge on a locked-down corporate laptop. WebRTC bugs love exactly those edges.
That is where the debugging session becomes a test matrix. With TestMu AI you reproduce the call on real hardware instead of one local browser:
The workflow is the same loop every time: capture a dump locally, identify the failing metric, reproduce it on the device and browser where users see it, ship the fix, and re-run to confirm packet loss and RTT are back in range.
You will not open webrtc-internals by hand before every release. The same metrics it charts come straight from getStats(), so you can assert on them inside an automated test. Running a loopback RTCPeerConnection on Chrome 148 and calling getStats() returns exactly the objects the page draws - here is a real capture from that run:
// Real getStats() output captured from a live RTCPeerConnection (Chrome 148)
{
candidatePair: { state: "succeeded", currentRoundTripTime: 0.001, bytesSent: 2535, bytesReceived: 1724 },
transport: { dtlsState: "connected", packetsSent: 33, packetsReceived: 21 },
dataChannel: { state: "open", messagesSent: 25, bytesSent: 165 }
}Wrap that read in a Selenium test on the TestMu AI cloud grid, and a quality regression fails the build instead of a support ticket. The capabilities below route the test to a real cloud browser; see the desired capabilities documentation for the full option list and the Selenium tutorial for setup.
const { Builder } = require("selenium-webdriver");
const capabilities = {
browserName: "Chrome",
browserVersion: "latest",
"LT:Options": {
platform: "Windows 11",
build: "WebRTC Quality Checks",
name: "Assert RTT and packet loss",
user: process.env.LT_USERNAME,
accessKey: process.env.LT_ACCESS_KEY,
},
};
const driver = new Builder()
.usingServer("https://hub.lambdatest.com/wd/hub")
.withCapabilities(capabilities)
.build();
await driver.get("https://www.testmuai.com/selenium-playground/");
// Pull live WebRTC stats from the page's RTCPeerConnection
const stats = await driver.executeAsyncScript(async (done) => {
const report = await window.pc.getStats();
let rtt = null, lost = null;
report.forEach((s) => {
if (s.type === "candidate-pair" && s.nominated) rtt = s.currentRoundTripTime;
if (s.type === "inbound-rtp") lost = s.packetsLost;
});
done({ rtt, lost });
});
if (stats.rtt > 0.2 || stats.lost > 50) {
throw new Error("WebRTC quality regression: " + JSON.stringify(stats));
}
await driver.quit();Now the metrics you used to eyeball in webrtc-internals become a pass/fail gate. Point the same assertion at different devices and networks to catch the call quality regressions that only appear off your own machine.
Start with one concrete habit: on your next test call, open chrome://webrtc-internals first, then watch currentRoundTripTime and packetsLost while you talk. Within a minute you will know whether a problem is latency, loss, or a bad ICE path - and you will have a dump to prove it.
Then close the loop where users actually are. Reproduce the call across browsers and devices on TestMu AI's real device cloud, automate the getStats() assertion with the getting started with automation guide, and make WebRTC quality a build gate instead of a guess. The browser tool finds the bug; the cloud confirms the fix holds everywhere.
Did you find this page helpful?
More Related Hubs
TestMu AI forEnterprise
Get access to solutions built on Enterprise
grade security, privacy, & compliance