import { AudioOrVideoType, DeviceManagerConfig, DeviceState, InitMediaConfig, UseUserMediaStartConfig } from "./types";
import TypedEmitter from "typed-emitter";
import { TrackType } from "./ScreenShareManager";
export type DeviceManagerEvents = {
    managerStarted: (event: {
        trackType: TrackType;
        videoConstraints: MediaTrackConstraints | undefined;
        audioConstraints: MediaTrackConstraints | undefined;
    }, state: DeviceManagerState) => void;
    managerInitialized: (event: {
        audio?: DeviceState;
        video?: DeviceState;
    }, state: DeviceManagerState) => void;
    devicesStarted: (event: {
        audio?: DeviceState & {
            restarting: boolean;
            constraints?: string | boolean;
        };
        video?: DeviceState & {
            restarting: boolean;
            constraints?: string | boolean;
        };
    }, state: DeviceManagerState) => void;
    deviceReady: (event: {
        trackType: TrackType;
        stream: MediaStream;
    }, state: DeviceManagerState) => void;
    devicesReady: (event: {
        video: DeviceState & {
            restarted: boolean;
        };
        audio: DeviceState & {
            restarted: boolean;
        };
    }, state: DeviceManagerState) => void;
    deviceStopped: (event: {
        trackType: TrackType;
    }, state: DeviceManagerState) => void;
    deviceEnabled: (event: {
        trackType: TrackType;
    }, state: DeviceManagerState) => void;
    deviceDisabled: (event: {
        trackType: TrackType;
    }, state: DeviceManagerState) => void;
    error: (event: any, state: DeviceManagerState) => void;
};
export type DeviceManagerState = {
    video: DeviceState;
    audio: DeviceState;
};
export type DeviceManagerStatus = "uninitialized" | "initializing" | "initialized" | "error";
declare const DeviceManager_base: new () => TypedEmitter<DeviceManagerEvents>;
export declare class DeviceManager extends DeviceManager_base {
    private readonly defaultAudioConstraints;
    private readonly defaultVideoConstraints;
    private readonly defaultStorageConfig;
    private audioConstraints;
    private videoConstraints;
    private storageConfig;
    private status;
    video: DeviceState;
    audio: DeviceState;
    constructor(defaultConfig?: DeviceManagerConfig);
    private createStorageConfig;
    private getVideoConstraints;
    private getAudioConstraints;
    getStatus(): DeviceManagerStatus;
    init(config?: InitMediaConfig): Promise<"initialized" | "error">;
    private setupOnEndedCallback;
    private onTrackEnded;
    private getLastVideoDevice;
    private saveLastVideoDevice;
    private saveLastAudioDevice;
    private getLastAudioDevice;
    start({ audioDeviceId, videoDeviceId }: UseUserMediaStartConfig): Promise<void>;
    stop(type: AudioOrVideoType): Promise<void>;
    setEnable(type: AudioOrVideoType, value: boolean): void;
    setConfig(config?: DeviceManagerConfig): void;
}
export {};
//# sourceMappingURL=DeviceManager.d.ts.map