@observertc/client-monitor-js
Version:
ObserveRTC Client Integration Javascript Library
124 lines (123 loc) • 4.11 kB
TypeScript
import { Logger } from "./utils/logger";
export type AppliedClientMonitorConfig<AppData extends Record<string, unknown> = Record<string, unknown>> = {
clientId?: string;
callId?: string;
bufferingEventsForSamples?: boolean;
collectingPeriodInMs: number;
samplingPeriodInMs?: number;
integrateNavigatorMediaDevices: boolean | MediaDevices;
addClientJointEventOnCreated?: boolean;
addClientLeftEventOnClose?: boolean;
videoFreezesDetector: Record<string, never> | null;
dryInboundTrackDetector: {
thresholdInMs: number;
} | null;
dryOutboundTrackDetector: {
thresholdInMs: number;
} | null;
playoutDiscrepancyDetector: {
lowSkewThreshold: number;
highSkewThreshold: number;
} | null;
syntheticSamplesDetector: {
createEvent?: boolean;
minSynthesizedSamplesDuration: number;
} | null;
audioDesyncDetector: {
fractionalCorrectionAlertOnThreshold: number;
fractionalCorrectionAlertOffThreshold: number;
} | null;
congestionDetector: {
sensitivity: 'low' | 'medium' | 'high';
} | null;
cpuPerformanceDetector: {
incomingDecodedFramesRatioThresholds: {
alertOn: number;
alertOff: number;
minReceivedFrames: number;
};
durationOfCollectingStatsThreshold: {
lowWatermark: number;
highWatermark: number;
};
encoderCpuLimitationShareThreshold?: number;
encodeTimeBudgetRatio?: number;
} | null;
audioConcealmentDetector: {
onThreshold: number;
offThreshold: number;
windowInMs: number;
minSamplesInWindow: number;
} | null;
jitterBufferStressDetector: {
targetDelayThresholdInMs: number;
timeStretchThreshold: number;
minConsecutiveTicks: number;
} | null;
decoderPerformanceDetector: {
decodeTimeBudgetRatio: number;
dropRatioThreshold: number;
minFramesReceived: number;
quietLossThreshold: number;
minConsecutiveTicks: number;
} | null;
videoRecoveryDetector: {
windowInMs: number;
pliRateAlertOn: number;
pliRateAlertOff: number;
recoveryFailedThresholdInMs: number;
recoveryFailedMinPliCount: number;
} | null;
sourceEncoderBottleneckDetector: {
captureFpsRatioThreshold: number;
minSourceFps: number;
encodeFpsRatioThreshold: number;
encodeTimeBudgetRatio: number;
cpuLimitationShareThreshold: number;
minConsecutiveTicks: number;
} | null;
simulcastLayerDetector: {
createEvent?: boolean;
} | null;
captureFailureDetector: {
silenceThresholdInMs: number;
silenceRmsThreshold: number;
createEvent?: boolean;
} | null;
codecChangeDetector: {
createEvent?: boolean;
} | null;
videoResolutionChangeDetector: {
createEvent?: boolean;
} | null;
stuckDecoderDetector: {
thresholdInMs: number;
rttMultiplier: number;
minStuckTicks: number;
minBitrate: number;
minPliCount: number;
} | null;
statsGapDetector: {
gapRatioThreshold: number;
minGapInMs: number;
createEvent?: boolean;
} | null;
longPcConnectionEstablishmentDetector: {
createEvent?: boolean;
thresholdInMs: number;
} | null;
iceConnectivityDetector: {
disconnectedThresholdInMs: number;
transportStallThresholdInMs: number;
createEvent?: boolean;
pathSwitchWindowInMs: number;
pathSwitchThreshold: number;
iceRestartRecommendationThresholdInMs: number;
iceRestartRecommendationCooldownInMs: number;
} | null;
appData: AppData;
};
export type ClientMonitorConfig<AppData extends Record<string, unknown> = Record<string, unknown>> = Partial<AppliedClientMonitorConfig<AppData>> & {
logger?: Logger;
};
export type ClientMonitorSourceType = 'mediasoup-device' | 'RTCPeerConnection' | 'mediasoup-transport';