import IDisposable from '../lang/IDisposable'; import Subject from '../rx/Subject'; import ReadOnlySubject from '../rx/ReadOnlySubject'; import IPeerConnection from './IPeerConnection'; export interface IRtcPublishMonitorStatistic { [kind: string]: IRtcPublishStatistic; } export interface ILegacyRTCStatsReport { result: () => ILegacyRTCStatsReportItem[]; } export interface ILegacyRTCStatsReportItem extends RTCStatsReport { type: string; names: () => string[]; stat: (name: string) => number; } export interface IRtcPublishStatistic { lastPacketSentTimestamp?: number; ssrc: string; mediaType: string; timestamp: number; bitrate?: number; bytesSent: number; packetsSent: number; retransmittedBytesSent?: number; firCount?: number; frameHeight?: number; frameWidth?: number; framesEncoded?: number; framesSent?: number; headerBytesSent?: number; hugeFramesSent?: number; pliCount?: number; qpSum?: number; totalEncodeTime?: number; totalEncodedBytesTarget?: number; codec: string; fps?: number; roundTripTime: number; } export default class RtcPublishMonitor implements IDisposable { private readonly _logger; private readonly _estimatedRoundTripTime; private readonly _estimatedVideoCodec; private readonly _estimatedAudioCodec; private readonly _rtcStatistic; private readonly _disposables; private _peerConnection; private _isMonitorRunning; private _updateTimeout; private _monitorGeneration; private _availableTracks; constructor(peerConnection: IPeerConnection, estimatedRoundTripTime: number, isForeground: ReadOnlySubject); get rtcStatistic(): Subject; dispose(): void; private updateStatistic; private getCodecByType; }