WebRTC Metrics
A comprehensive overview of WebRTC statistics, derived calculations, extracted features, and observable signals, to better understand call quality, connectivity, and user experience in rtcStats
On this page6 sections
Freezes (feature)
Last updated Applies tortcstats-serverrtcstats.com
Track-level features counting inbound video freezes and their total duration (the single most user-visible video defect), plus frames dropped before rendering.
Description
Track-level features, extracted per inbound video track into features_track, from the last getStats.
freezeCount- cumulative number of video freezes.totalFreezesDuration- cumulative freeze duration (milliseconds).framesDropped- cumulative frames dropped before rendering.
Extracted by the open-source rtcstats-features package.
Why it matters
Freezes are the defect users actually complain about: the picture stops. freezeCount and totalFreezesDuration quantify that experience directly, which makes them the best single video-quality KPI for a population. Trended over time or split by codec, region, or client version, they turn "video feels bad lately" into a measurable regression you can bisect. framesDropped is a related early-warning signal: frames arriving but discarded before rendering, often a sign of a decode or timing problem before it becomes a visible freeze.
Typical values
- Good:
freezeCount = 0,totalFreezesDuration = 0for the vast majority of tracks. - Concerning: freezes accumulating on a meaningful share of sessions, or long
totalFreezesDurationrelative to track duration. - Normalise by track duration to compare fairly across calls of different lengths.
SQL example
Weekly freeze totals for inbound video:
SELECT
DATE_TRUNC('week', server.created_at) AS week,
SUM(track.freeze_count) AS freezes,
SUM(track.total_freezes_duration) / 1000.0 AS freeze_seconds
FROM "rtcstats-server" AS server
JOIN features_metadata AS metadata ON metadata.dump_id = server.id
JOIN features_connection AS connection ON connection.dump_id = metadata.id
JOIN features_track AS track ON track.connection_id = connection.id
WHERE connection.connected -- only connections that reached 'connected'
AND track.kind = 'video' -- 'audio' or 'video'
AND track.direction = 'inbound' -- 'inbound' or 'outbound'
GROUP BY week
ORDER BY week ASC;
Related features
- Frame counters - NACK/PLI/FIR recovery that precedes a freeze.
- Jitter buffer - buffering that absorbs (or fails to absorb) network jitter.
- Quality limitation - the outbound-side quality signal.
See also
- rtcstats-server feature extraction - the full feature reference.
- How to query rtcstats-server features - includes the freeze-trend recipe.
- MDN: RTCInboundRtpStreamStats->freezeCount