OBSERVERTC / Client Monitor

Pipeline disruption detectors

Capture, encoding, delivery, decoding and playout failures.

Capture Source LostReports when a capture source ends.

Class

CaptureSourceLostDetector

What it collects

The capture source’s ended state.

What triggers it

sourceEnded capture flag; one-shot capture-source-lost

Reset and lifecycle behavior

one-shot, not a continuously resolved threshold episode

Example

A camera capture source ends during a call.

Silent Audio SourceDetects sustained silence from an active microphone.

Class

SilentAudioSourceDetector

What it collects

Microphone activity, capture state and RMS audio level.

What triggers it

live enabled unmuted microphone/device; RMS≤0.0001 for 60000 ms captured audio

What resolves it

RMS>0.0003 when raised; pause, screen share, lost input, ended source stand down

Example

An enabled, unmuted microphone remains near-silent for one minute.

Video Capture BottleneckDetects video capture producing fewer frames than expected.

Class

VideoCaptureBottleneckDetector

What it collects

Produced frame rate compared with expected capture frame rate.

What triggers it

1 − producedFps/expectedCaptureFps >0.2 over shared detection slice

What resolves it

recovery slice within threshold; settings changes, screen share, inactive tab/muted/paused source stand down

Example

A camera produces substantially fewer frames than its expected capture rate.

Encoder BottleneckDetects encoding that cannot keep up with captured video.

Class

EncoderBottleneckDetector

What it collects

Captured and encoded frame rates for the highest sending layer.

What triggers it

highest layer 1 − encodedFps/producedFps >0.3

What resolves it

recovery slice within threshold; source/layer/config-change gates

Example

Capture continues normally, but the highest layer encodes fewer frames.

RTP Sender StalledDetects encoded video that stops leaving as RTP packets.

Class

RtpSenderStalledDetector

What it collects

Encoded frames, outgoing RTP packet progress and stall duration.

What triggers it

frames encode but no RTP packets leave for 4000 ms

What resolves it

packets resume, stream disappears or guarded state; per-SSRC state

Example

Frames are encoded, but outgoing RTP packets stop for four seconds.

Dry Outbound TrackDetects an active outbound track that stops sending data.

Class

DryOutboundTrackDetector

What it collects

Byte deltas across active outbound layers and track lifecycle state.

What triggers it

active layer byte deltas sum to zero for 5000 ms

What resolves it

data resumes; pause/mute/end/encoder limitation/no active layer stand down

Example

An active sending track produces no outgoing bytes for five seconds.

Transport Demux StalledDetects incoming transport data that does not reach existing RTP streams.

Class

TransportDemuxStalledDetector

What it collects

Received transport bitrate and byte progress on existing inbound RTP streams.

What triggers it

transport receives ≥20000 bps while existing inbound RTP accounts for zero bytes, 4000 ms

What resolves it

RTP progress, missing transport or failed guards; per-transport state

Example

Transport data arrives, but none of the existing RTP streams advances.

Dry Inbound TrackDetects an inbound track that stops receiving data.

Class

DryInboundTrackDetector

What it collects

Incoming byte deltas and local or remote pause declarations.

What triggers it

incoming byte delta zero for 5000 ms

What resolves it

bytes resume, local/remote declared pause, ended track

Example

An inbound track receives no bytes for five seconds without a declared pause.

Frame Assembly StalledDetects incoming packets that stop producing complete video frames.

Class

FrameAssemblyStalledDetector

What it collects

Incoming packet progress, complete-frame counters and elapsed time.

What triggers it

packets arrive, framesReceived flat; ≥20 packets and ≥3000 ms

What resolves it

complete frame arrives or stand-down gates

Example

Packets keep arriving, but no complete video frame is assembled.

Decoder BottleneckDetects decoding that cannot keep up with incoming frames.

Class

DecoderBottleneckDetector

What it collects

Received and decoded frame supply over shared windows, with context gates.

What triggers it

received frame supply≥5 fps, decoding shortfall>0.1 over shared window

What resolves it

recovery window catches up; dropped-frame and foreground/context gates distinguish causes

Example

Complete frames arrive faster than the decoder can process them.

Decoder PerformanceDetects excessive time spent decoding video frames.

Class

DecoderPerformanceDetector

What it collects

Decode time, frame budget, received frames and interval packet loss.

What triggers it

decode time >0.8×frame budget, ≥10 received frames, interval loss≤0.02, 2 ticks

What resolves it

decode keeps up, insufficient frames, loss dominates, ended/background

Example

With enough frames and little loss, decoding takes most of the frame budget.

Stuck DecoderDetects a decoder that stops producing frames despite incoming media.

Class

StuckDecoderDetector

What it collects

Incoming bitrate, decoded-frame progress, PLI count and RTT.

What triggers it

no decoded frames with bitrate≥10000, ≥2 PLIs, elapsed≥max(4000 ms,15×RTT)

What resolves it

decoded frames return or source/context/foreground gates; records assembly evidence

Example

Media continues arriving and keyframes are requested, but decoding makes no progress.

Playout DiscrepancyDetects a gap between received and rendered video frames.

Class

PlayoutDiscrepancyDetector

What it collects

Received and rendered frame counts over shared windows.

What triggers it

received-vs-rendered frame skew≥0.25 with ≥10 frames in detection window

What resolves it

skew<0.1 or stand-down; despite prose mentioning decode-to-render, inspect actual operands

Example

Received frames accumulate while substantially fewer frames reach display.

Video Recovery FailedDetects stalled video that fails to recover after keyframe requests.

Class

VideoRecoveryFailedDetector

What it collects

Stalled video, keyframe requests and recovery duration.

What triggers it

stalled picture/keyframe recovery, ≥2 PLIs, ≥5000 ms

What resolves it

video recovery or guards; repair-loop diagnosis separate from perceptual freeze

Example

Repeated keyframe requests fail to restore a moving picture.

CPU PerformanceDetects high CPU utilization from software encoding or decoding.

Class

CpuPerformanceDetector

What it collects

Measurable software encode/decode utilization across the client window.

What triggers it

measurable software encode/decode utilization at least 0.5 across client detection window

What resolves it

recovery below 0.4; background/no CPU-backed work/no measurement stand down

Example

Software media processing keeps measured utilization above the detection threshold.

Sources: named files under client-monitor-js/src/detectors/Detectors.ts, plus the full algorithms in the detector implementation reference. Shared-window readiness and total-vs-delta choices are material to all capture/encoder/decoder comparisons.

Version coverage varies by reference. Source revisions · Markdown source