import { EncodedTransformMessage } from '../encodedtransformworker/EncodedTransform'; import { EncodedTransformMediaStreamMetrics } from '../encodedtransformworker/MediaMetricsEncodedTransform'; import Logger from '../logger/Logger'; import EncodedTransformManager from './EncodedTransformManager'; /** * Aggregated metrics from all encoded transform types, keyed by SSRC. * Reported periodically to observers for stats collection. */ export interface EncodedTransformMediaMetrics { /** * Outbound audio stream metrics. */ audioSendMetrics: Record; /** * Inbound audio stream metrics. */ audioReceiveMetrics: Record; /** * Outbound video stream metrics. */ videoSendMetrics: Record; /** * Inbound video stream metrics. */ videoReceiveMetrics: Record; } /** * Observer interface for receiving encoded transform media metrics. */ export interface EncodedTransformMediaMetricsObserver { /** * Called when new encoded transform media metrics become available. */ encodedTransformMediaMetricsDidReceive?(metrics: EncodedTransformMediaMetrics): void; /** * Called when the first packet is seen for a new SSRC via encoded transform. */ onFirstPacketReceived?(mediaType: 'audio' | 'video', direction: 'send' | 'receive', ssrc: number): void; } /** * Manages metrics collection for all media types (audio/video, sender/receiver). * Consolidates packet-level metrics from the Web Worker. */ export default class MediaMetricsTransformManager extends EncodedTransformManager { private audioSendMetrics; private audioReceiveMetrics; private videoSendMetrics; private videoReceiveMetrics; private observers; private metricsReportingScheduler; private readonly METRICS_REPORTING_INTERVAL_MS; constructor(worker: Worker, logger: Logger); /** * Start the metrics transform manager */ start(): Promise; /** * Get the transform names that this manager handles */ transformNames(): string[]; /** * Handle metrics messages from the Web Worker * Routes messages to the appropriate metrics property */ handleWorkerMessage(message: EncodedTransformMessage): void; /** * Add an observer to receive media metrics */ addObserver(observer: EncodedTransformMediaMetricsObserver): void; /** * Remove an observer */ removeObserver(observer: EncodedTransformMediaMetricsObserver): void; /** * Start periodic metrics reporting to observers */ private startMetricsReporting; /** * Report current metrics to all observers */ private reportMetrics; /** * Stop metrics transform and release resources */ stop(): Promise; }