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

Back
On this page6 sections
trackinboundjitterbufferlatencyquality

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:

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 jitterBufferEmittedCount to 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;

See also