import { DeviceTier } from '../model/MeetingStartRequest';
export type NetworkProfile = 'good' | 'degraded' | 'poor' | 'critical';
export interface ResolvedConfig {
    videoEnabled: boolean;
    videoWidth: number;
    videoHeight: number;
    videoFrameRate: number;
    opusBitrate: number;
    opusPtime: number;
    opusFec: boolean;
    opusDtx: boolean;
    opusMaxPlaybackRate: number;
    opusComplexity: number;
}
export declare class MediaAdaptationManager {
    private readonly getPeerConnections;
    private readonly getVideoTrack;
    private readonly onProfileChange;
    private readonly deviceTier;
    private networkProfile;
    private handle;
    private tickCount;
    private badSamples;
    private goodSamples;
    constructor(getPeerConnections: () => RTCPeerConnection[], getVideoTrack: () => any | null, onProfileChange: (profile: NetworkProfile, config: ResolvedConfig) => void, deviceTier?: DeviceTier);
    start(): Promise<void>;
    stop(): void;
    applyToNewConnection(_pc: RTCPeerConnection): void;
    private tick;
    private switchProfile;
    private applyVideo;
    buildOpusFmtp(payloadType: string): string;
    private collectStats;
    private classify;
    private resolved;
    private rank;
    private stepUp;
    getCurrentProfile(): NetworkProfile;
    getCurrentResolved(): ResolvedConfig;
}
