OBSERVERTC / Observer

Server detectors

Correlate evidence across clients or calls with explicit registration.

Server detectors compare evidence across participants or calls. They help answer questions a browser alone cannot answer, such as whether one publisher is failing for several receivers. Register the detectors relevant to your service; they do not run automatically on a new Observer.

ScopeClassesEvidence / purpose
CallAudioEchoDetectorsustained correlation between one participant’s outgoing audio and another participant’s voice
CallCallConcurrentIssueDetectoractive issue prevalence and onset bursts within one call
CallIssueFanOutDetectorsame publisher-associated failure appears across receivers
CallPublisherFaultCorroborationDetectorpublisher-side issues corroborated by receiver degradation/issues
CallTrackDeliveryMismatchDetectorpublisher/receiver delivery disagreement with resolved track links
CallUnconsumedTrackDetectoroutbound track has no known consumer after configured grace; requires a resolver
ObserverObserverConcurrentIssueDetectorsame issue spans independent calls / synchronized onsets
ObserverSfuCongestionDetectorcorrelated infrastructure/SFU degradation, consumes client issues
ObserverClientPopulationIssueDetectorgroup client issues by browser/OS/location or supported axis
ObserverTurnServerHealthDetectorgroup current client findings around relays
ObserverTurnServerOutageDetectordetect relay outage patterns across clients
One-shot validationSimulcastReceiverValidatorwhether receivers select layers independently
One-shot validationRemoteTrackResolverValidatorwhether remote publisher/subscriber linkage can be established
One-shot validationCodecConsistencyValidatorcross-end codec consistency / deployment behavior

Exact configs/defaults, state and triggers for all server detector classes are in the detector reference. Configurations and defaults are defined in each detector constructor. See Validators for one-shot structural checks.

Source references

Registration scope

  • observer.addObserverDetector(...) registers observer-wide analysis.
  • observer.addCallDetector(...) registers a factory for future calls.
  • call.addDetector(...) registers on an existing call.

Constructor configurations belong to each detector. Do not assume a default enabled set or a shared DetectorsConfig module.

Investigate suspected audio echo

Register audio-echo-detector on a call or as a factory for future calls:

observer.addCallDetector('audio-echo-detector');
// For a call that already exists:
// call.addDetector('audio-echo-detector');

The detector raises AUDIO_ECHO_SUSPECTED when outgoing audio follows the loudest other participant in enough active buckets and their dB levels correlate. minFollowRatio and minCorrelation gate the evidence. Its payload identifies the suspected echoing and source tracks/clients, capture-device label when available, and whether a loopback-audio-input issue is open. Ambiguous direction can be explicitly flagged.

This is evidence of suspected echo, not a confirmed acoustic diagnosis. Sampling granularity limits detection of faint or intermittent echo. Receiver-derived publisher audio levels need a RemoteTrackResolver; without usable levels, those tracks are not evaluated. Inspect the payload and capture configuration before deciding on remediation.

Source: AudioEchoDetector implementation and limitations.

Version coverage varies by reference. Source revisions · Markdown source