OBSERVERTC / Client Monitor

Transport quality detectors

Delay, loss, congestion and stalled media transport.

CongestionLegacy congestion detection; deprecated in favor of directional detectors.

Class

CongestionDetector

What it collects

Legacy RTT, packet loss and bandwidth-limitation measurements.

What triggers it

deprecated sensitivity medium; legacy RTT/loss/limitation heuristic

What resolves it

legacy congested flag and max-baseline bookkeeping; not interchangeable with directional detectors

Example

Rising RTT and loss contribute to the legacy congestion verdict.

Uplink CongestionDetects congestion on the sending side.

Class

UplinkCongestionDetector

What it collects

Browser bandwidth limitation, bandwidth estimates and sender pacing delay.

What triggers it

browser bandwidth-limited verdict AND severity≥0.65; severity = sqrt(BWE undershoot × pacer bloat); bloat saturates at 4×median

What resolves it

closes when browser stops reporting bandwidth limitation or send path stands down; decaying max and median baselines

Example

The browser reports bandwidth limitation while the send queue grows.

Downlink CongestionDetects congestion on the receiving side.

Class

DownlinkCongestionDetector

What it collects

Inbound video bitrate and video jitter-buffer growth.

What triggers it

inbound video; severity≥0.65 = sqrt(receive-bitrate undershoot × video jitter-buffer bloat), 4×median saturation

What resolves it

below half minSeverity (0.325 default), or no inbound video; separate baselines

Example

Receiving bitrate falls while buffered video delay rises.

Transport DelayDetects sustained high round-trip delay.

Class

TransportDelayDetector

What it collects

Current round-trip time from RTCP or ICE measurements.

What triggers it

detection-window mean current RTT≥300 ms

What resolves it

recovery-window RTT<200 ms or no measurement; RTCP/ICE source retained

Example

Average RTT stays above 300 ms across the detection window.

Transport LossDetects sustained packet loss.

Class

TransportLossDetector

What it collects

Available inbound and outbound mean packet-loss measurements.

What triggers it

max available inbound/outbound mean loss≥0.05 for 6000 ms

What resolves it

loss<0.01; hysteresis between thresholds

Example

Packet loss stays at or above five percent for six seconds.

Blocked Stun RequestsDetects STUN checks that receive no responses.

Class

BlockedStunRequestsDetector

What it collects

STUN request, consent-check and response activity on an established pair.

What triggers it

succeeded pair sends requests/consent checks but no responses for 10000 ms

What resolves it

response arrives/path unverified/no request evidence; separate 10000 ms request timeout; issue is blocked-stun-requests, event remains blocked-transport

Example

Consent requests continue, but no responses arrive during the timeout.

Blocked Outbound MediaDetects outgoing media without fresh receiver reports.

Class

BlockedOutboundMediaDetector

What it collects

Outgoing RTP, STUN responses and freshness of remote receiver reports.

What triggers it

actual outgoing RTP, STUN answers, fresh remote receiver reports stop for 10000 ms

What resolves it

reports resume, no sending or no usable path; absent RTCP is evidence with the other gates, not proof of a particular firewall

Example

Media is sent and STUN answers arrive, but fresh receiver reports stop.

Blocked Inbound MediaDetects missing incoming media despite sender activity; disabled by default.

Class

BlockedInboundMediaDetector

What it collects

Sender-report progress and incoming media activity.

What triggers it

default null; sender-report evidence advances while inbound media does not, for configured threshold

What resolves it

reception resumes/no sending or no usable path; enable only where evidence is meaningful

Example

Sender reports advance while no incoming media appears; use only where that evidence is meaningful.

Directional formulas and baseline update order: client-monitor-js/src/detectors/UplinkCongestionDetector.ts · update, client-monitor-js/src/detectors/DownlinkCongestionDetector.ts · update. The baseline is read before feeding the current observation; medians stop learning while an issue is open. These are not generic packet-loss thresholds.

Version coverage varies by reference. Source revisions · Markdown source