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
connectioniceturnstunconfiguration

Configured ICE servers (feature)

Connection-level features recording the STUN/TURN servers and transport policy the application configured on each RTCPeerConnection.

Description

Connection-level features, extracted per RTCPeerConnection into features_connection.

These features capture what the application configured in RTCConfiguration.iceServers, read from the create event, so they reflect intent rather than outcome:

  • configuredIceServers - number of entries in iceServers.
  • configuredIceTransportPolicy - whether iceTransportPolicy === 'relay' (forced relay).
  • configuredIceServersStun - at least one stun: URL was configured.
  • configuredIceServersTurns - at least one turns: (TLS) URL was configured.
  • configuredIceServersTurnUdp / configuredIceServersTurnTcp - at least one turn: URL with transport=udp / transport=tcp.

Extracted by the open-source rtcstats-features package.

Why it matters

These features let you audit your own ICE configuration at scale, across every real session, not just what you think you shipped. Did a config change actually roll out? Are some clients missing TURN entirely (configuredIceServersTurns = false where you expected it)? Is iceTransportPolicy = relay forced somewhere it shouldn't be, inflating your TURN bill? Paired with the selected candidate pair, you can compare what was offered against what was actually used.

Common values

  • configuredIceServers: usually 1 to 3 (a STUN and one or two TURN entries).
  • configuredIceTransportPolicy: false for normal calls; true only where you deliberately force relay.
  • The STUN/TURN booleans should match your intended configuration for the client population.

SQL example

How many connections were configured with any TURN server:

SELECT
  COUNT(*) FILTER (
    WHERE connection.configured_ice_servers_turn_udp
       OR connection.configured_ice_servers_turn_tcp
       OR connection.configured_ice_servers_turns
  ) AS with_turn,
  COUNT(*) AS total
FROM features_connection AS connection;

Related features

See also