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
trackinboundjitterbufferlatencyquality

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:

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;

Related features

See also