import { Room } from 'livekit-client'; import type { VoicePeer } from './VoiceClient.js'; import type { MediaSessionConfig } from './MediaSession.js'; /** Adapts SFU tracks to the same MediaStream callbacks as the mesh transport. */ export declare class SfuSession { private callbacks; private readonly maxPeers; private readonly room; private subscriptions; private streams; private lifecycle; private get closed(); private healthTimer?; private checkingHealth; private preferReliableRelay; private triedReliableRelay; private lossSamples; private firstFrames; private videoHealth; private subscriptionRetryAfter; private subscriptionRetries; private recovering?; private cancelDelay?; private connectArguments?; private camera?; private audioPublication?; private cameraPublication?; private activity; private readonly hostPause; private readonly hostResume; private readonly visibility; constructor(callbacks: { track(id: string, stream: MediaStream): void; peers(peers: VoicePeer[]): void; error(error: Error): void; muted?(): boolean; refresh?(): Promise; }, room?: Room, maxPeers?: number); private changed; /** Recover a receiving video whose decoder has stopped advancing. */ private checkVideoHealth; private restartSubscription; private reliableServers; private tryReliableRelay; private add; connect(config: MediaSessionConfig, stream: MediaStream, audioBitrate: number, videoBitrate: number, iceTransportPolicy?: RTCIceTransportPolicy): Promise; replaceAudioTrack(track: MediaStreamTrack, muted: boolean): Promise; setMuted(muted: boolean): Promise; reconnect(): Promise; replaceVideoTrack(track: MediaStreamTrack | null, bitrate: number): Promise; getStats(): Promise<{ peerId: string; report: RTCStatsReport; }[]>; close(): Promise; }