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
Lifetime averages (feature)
Connection-level features summarising the whole connection in three numbers: average STUN round-trip time and average inbound and outbound bitrate.
Description
Connection-level features, extracted per RTCPeerConnection into features_connection.
These three features compress the entire connection into lifetime averages, computed from the last getStats ratios:
averageStunRoundTripTime- average STUN RTT over the connection's lifetime.averageOutboundBitrate- average outbound bitrate (bits/s).averageInboundBitrate- average inbound bitrate (bits/s).
Extracted by the open-source rtcstats-features package.
Why it matters
Per-connection lifetime averages are the cheapest way to characterise call quality across a large population. averageStunRoundTripTime is your network-latency proxy: trend it by region or over time to catch degradation. The two bitrate averages tell you how much media actually flowed each way; unusually low values flag starved connections, and the asymmetry between them is often meaningful (e.g. a receive-heavy viewer vs a send-heavy presenter). Because they are single numbers per connection, they aggregate cleanly into dashboards.
Typical values
averageStunRoundTripTime: good < 100 ms; concerning 100 to 300 ms; poor > 300 ms (highly network-dependent).- Bitrates: interpret against your own codec/resolution targets. The useful signal is the distribution and its change over time, not an absolute threshold.
SQL example
Median STUN RTT and average bitrates by week:
SELECT
DATE_TRUNC('week', server.created_at) AS week,
PERCENTILE_CONT(0.50) WITHIN GROUP (ORDER BY connection.average_stun_round_trip_time) AS median_rtt,
AVG(connection.average_inbound_bitrate) AS avg_in_bps,
AVG(connection.average_outbound_bitrate) AS avg_out_bps
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
WHERE connection.connected -- steady-state averages only mean something once media flowed
GROUP BY week
ORDER BY week ASC;
Related features
- Connection setup time - setup cost, before these steady-state averages.
- Quality limitation - why outbound bitrate was constrained.
- Selected candidate pair - the path these averages were measured over.
See also
- rtcstats-server feature extraction - the full feature reference.
- How to query rtcstats-server features - SQL recipes.
- MDN: RTCIceCandidatePairStats->currentRoundTripTime