OBSERVERTC / Client Monitor
Pipeline disruption detectors
Capture, encoding, delivery, decoding and playout failures.
Capture Source LostReports when a capture source ends.
Class
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
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
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
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
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
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
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
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
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
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
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
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
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
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.