import IDisposable from '../../lang/IDisposable';
import Subject from '../../rx/Subject';
import { DecodedFrameTimingInformation, RenderedFrameTimingInformation } from './FrameTimingInformation';
import { VideoCodec } from '../decode/bitstream/codec/VideoCodec';
import TransformMessageRouter from '../transformation/worker/MessageRouter';
export type FrameTimingInformationManagerContext = {
    codec: VideoCodec;
    streamId: string;
    videoElement: Subject<HTMLVideoElement | null>;
    decodedFrameTimingInformationSubject: Subject<DecodedFrameTimingInformation | null>;
    renderedFrameTimingInformationSubject: Subject<RenderedFrameTimingInformation | null>;
    isEnabledSubject: Subject<boolean>;
    receiver: RTCRtpReceiver;
    mid: string;
    trackId: string;
    transformFunctionNames: string[];
    transformMessageRouter: TransformMessageRouter;
};
export default class FrameTimingInformationManager implements IDisposable {
    private static readonly _transformName;
    private readonly _logger;
    private readonly _decodedFrameTimingInformationByRtpTimestamp;
    private readonly _videoElementDisposables;
    private readonly _disposables;
    private _currentPlaybackState;
    private _armedVideoFrameCallbackId;
    private _disposed;
    constructor(context: FrameTimingInformationManagerContext);
    dispose(): void;
    private initialize;
    private canProcessFrameTimingInformation;
    private setupFrameTimingInformationTransform;
    private handleFrameTimingMessage;
    private setupVideoElementHandling;
    private handleVideoFrameCallback;
    private setupVideoEventListeners;
    private _armVideoFrameCallback;
}
