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
Offer/answer timing (feature)
Where the signaling handshake spends time: how long setLocalDescription and setRemoteDescription took, and the role each played.
Description
Connection-level features, extracted per RTCPeerConnection into features_connection.
These features break the offer/answer handshake into its two SDP-applying calls, with a duration and a role for each:
setLocalDescriptionDelay- milliseconds the firstsetLocalDescriptioncall took.setLocalDescriptionRole- whether that local description was anofferor ananswer.setRemoteDescriptionDelay- milliseconds the firstsetRemoteDescriptioncall took.setRemoteDescriptionRole- whether that remote description was anofferor ananswer.
Extracted by the open-source rtcstats-features package into your own database.
Why it matters
The role fields tell you which side of the call you are looking at: a setLocalDescriptionRole of offer is the caller, an answer is the callee. Splitting by role lets you compare setup cost from each end. The delay fields show where the handshake actually spends time inside the browser: an unusually slow setLocalDescription often means an expensive codec probe or a large SDP, while a slow setRemoteDescription can point at munged or oversized remote SDP. Read alongside signalingDelay, these separate the in-browser cost from the network round-trip.
Typical values
- Both delays are usually a few milliseconds to low tens of milliseconds; hundreds of milliseconds is worth investigating.
- Roles are
offeroranswer, and are opposite between the two peers of a call.
SQL example
Median SDP-apply time split by caller vs callee:
SELECT
connection.set_local_description_role AS role, -- 'offer' (caller) or 'answer' (callee)
PERCENTILE_CONT(0.50) WITHIN GROUP (ORDER BY connection.set_local_description_delay) AS p50_sld_ms,
PERCENTILE_CONT(0.50) WITHIN GROUP (ORDER BY connection.set_remote_description_delay) AS p50_srd_ms,
COUNT(*) AS connections
FROM features_connection AS connection
WHERE connection.set_local_description_role IS NOT NULL
GROUP BY connection.set_local_description_role;
Related features
- Connection API failures - the same SDP calls when they fail instead of timing.
- Connection session metadata -
signalingDelay, the full offer/answer round-trip these delays sit inside.
See also
- rtcstats-server feature extraction - the full feature reference. These features are extracted by rtcstats-server and live in the open-source
rtcstats-featurespackage.