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
Jitter buffer (feature)
Last updated Applies tortcstats-serverrtcstats.com
Track-level features describing the receive jitter buffer (delays, emitted-frame count, processing and assembly time) that absorbs network jitter before playback.
Description
Track-level features, extracted per inbound track into features_track, from the last getStats.
The receive jitter buffer smooths out uneven packet arrival before media is played. These features summarise it:
jitterBufferDelay- cumulative jitter buffer delay.jitterBufferTargetDelay/jitterBufferMinimumDelay- cumulative target and minimum target delay.jitterBufferEmittedCount- frames/samples emitted from the buffer (the divisor for averages).averageJitterBufferDelay- average delay per emitted frame.totalProcessingDelay,totalAssemblyTime- cumulative processing and multi-packet frame-assembly time.
Extracted by the open-source rtcstats-features package.
Why it matters
The jitter buffer is the trade-off between latency and smoothness: a larger buffer hides more network jitter but adds delay users feel as lag. averageJitterBufferDelay (or jitterBufferDelay / jitterBufferEmittedCount) quantifies that added latency across your population: rising values mean the network forced deeper buffering. totalProcessingDelay and totalAssemblyTime expose where receive-side time is spent, useful when diagnosing decode or reassembly bottlenecks distinct from network jitter.
Common values
- Always divide cumulative fields by
jitterBufferEmittedCountto get a per-frame average; raw cumulative values grow with call length. - Higher average jitter buffer delay indicates a jittery path; interpret alongside RTT and freezes.
SQL example
Average jitter buffer delay per emitted frame, by week:
SELECT
DATE_TRUNC('week', server.created_at) AS week,
SUM(track.jitter_buffer_delay) / NULLIF(SUM(track.jitter_buffer_emitted_count), 0) AS avg_delay
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.direction = 'inbound' -- 'inbound' or 'outbound'
AND track.jitter_buffer_emitted_count IS NOT NULL
GROUP BY week
ORDER BY week ASC;
Related features
- Freezes - what happens when the buffer can't keep up.
- Frame counters - the loss-recovery activity behind buffering.
- Lifetime averages - connection RTT, the source of jitter.
See also
- rtcstats-server feature extraction - the full feature reference.
- How to query rtcstats-server features - SQL recipes.
- MDN: RTCInboundRtpStreamStats->jitterBufferDelay