import Subject from '../../rx/Subject';
import ChannelState from '../channels/ChannelState';
import Dimension from '../../video/Dimension';
import EndPoint, { IStream, SubscribeStatus } from '../discovery/EndPoint';
import VideoTelemetry from '../../video/VideoTelemetry';
import { IRtcMonitorStatistic, IRtcStatistic } from '../../rtc/RtcConnectionMonitor';
import DisposableList from '../../lang/DisposableList';
import { BitsPerSecond, Millisecond } from '../../units/Units';
export type ChannelContextOptions = {
    targetLag?: number;
};
export default class ChannelContext {
    channelInitialization: Date;
    disposables: DisposableList;
    channelDisposables: DisposableList;
    rendererDisposables: DisposableList;
    videoElement: Subject<HTMLVideoElement | null>;
    state: Subject<ChannelState>;
    autoMuted: Subject<boolean>;
    autoPaused: Subject<boolean>;
    authorized: Subject<boolean>;
    online: Subject<boolean>;
    loading: Subject<boolean>;
    playing: Subject<boolean>;
    standby: Subject<boolean>;
    stopped: Subject<boolean>;
    targetLag: Subject<Millisecond>;
    lag: Subject<Millisecond | undefined>;
    bitrateLimit: Subject<BitsPerSecond>;
    resolution: Subject<Dimension>;
    failureCount: Subject<number>;
    endPoint: Subject<EndPoint | null>;
    stream: Subject<IStream | null>;
    rtcStatistics: Subject<IRtcMonitorStatistic | null>;
    videoTelemetry: VideoTelemetry | null;
    rtcAudioStatistic: IRtcStatistic | null;
    rtcVideoStatistic: IRtcStatistic | null;
    clearFailureCountTimeout: number;
    constructor(options?: ChannelContextOptions);
    get streamId(): string;
    applyStatus(status: SubscribeStatus): void;
    applySessionAndStreamPropertiesToVideoElement(): void;
    mapSubscribeStatusToChannelStatus(status: SubscribeStatus): ChannelState;
}
