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
Freezes (feature)
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