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<boolean>);
    get rtcStatistic(): Subject<IRtcPublishMonitorStatistic>;
    dispose(): void;
    private updateStatistic;
    private getCodecByType;
}
