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
Jitter buffer (feature)
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