import { Event } from '@skyway-sdk/common';
import type { LocalMediaStreamOptions } from './stream';
import { LocalAudioStream } from './stream/local/audio';
import { LocalCustomVideoStream, type ProcessedStream } from './stream/local/customVideo';
import { type DataStreamOptions, LocalDataStream } from './stream/local/data';
import { LocalVideoStream } from './stream/local/video';
export declare class StreamFactory {
    /**
     * @description [japanese] 一度参照した種類のデバイスの状態が変化した時に発火するイベント
     */
    readonly onDeviceChange: Event<{
        device: MediaDevice;
        state: 'added' | 'removed';
    }>;
    private _devices;
    /**@private */
    constructor();
    private _enumerateDevicesArray;
    private _enumerateDevicesWithAuth;
    /**
     * @description [japanese] デバイスの一覧を取得する
     */
    enumerateDevices(): Promise<MediaDevice[]>;
    /**
     * @description [japanese] 映像入力デバイスの一覧を取得する
     */
    enumerateInputVideoDevices(): Promise<MediaDevice[]>;
    /**
     * @description [japanese] 音声入力デバイスの一覧を取得する
     */
    enumerateInputAudioDevices(): Promise<MediaDevice[]>;
    /**
     * @description [japanese] 音声出力デバイスの一覧を取得する
     */
    enumerateOutputAudioDevices(): Promise<MediaDevice[]>;
    /**
     * @description [japanese] CameraのVideoStreamを作成する
     */
    createCameraVideoStream(options?: VideoMediaTrackConstraints & Partial<LocalMediaStreamOptions>): Promise<LocalVideoStream>;
    /**
     * @description [japanese] マイクのAudioStreamを作成する
     */
    createMicrophoneAudioStream(options?: AudioMediaTrackConstraints & Partial<LocalMediaStreamOptions>): Promise<LocalAudioStream>;
    /**
     * @description [japanese]
     * PCブラウザでのみ利用可能なAPI。
     * VideoStreamは常に取得される（AudioStreamのみ取得することはできない）
     * audioオプションを有効にするとAudioStreamを取得することができる。
     * audioオプションは一部のブラウザにしか対応しておらず、
     * それ以外の環境では有効にしても戻り値のaudioにはundefinedが返される。
     * 各ブラウザの最新のaudioオプション対応状況はMDNのAudio capture supportの項目をご確認ください。
     * https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getDisplayMedia#browser_compatibility
     */
    createDisplayStreams<T extends DisplayStreamOptions>(options?: T): Promise<{
        video: LocalVideoStream;
        audio: T extends {
            audio: infer U;
        } ? U extends false | undefined | null ? undefined : LocalAudioStream | undefined : undefined;
    }>;
    /**
     * @description [japanese] DataStreamを作成する
     */
    createDataStream(options?: DataStreamOptions): Promise<LocalDataStream>;
    /**
     * @description [japanese] CameraのVideoStreamとマイクのAudioStreamを作成する
     */
    createMicrophoneAudioAndCameraStream({ audio, video, }?: {
        audio?: AudioMediaTrackConstraints & Partial<LocalMediaStreamOptions>;
        video?: VideoMediaTrackConstraints & Partial<LocalMediaStreamOptions>;
    }): Promise<{
        audio: LocalAudioStream;
        video: LocalVideoStream;
    }>;
    /**
     * @description [japanese] CustomVideoStreamを作成する
     */
    createCustomVideoStream(processor: VideoStreamProcessor, options?: {
        stopTrackWhenDisabled?: boolean;
        constraints?: MediaTrackConstraints;
    }): Promise<LocalCustomVideoStream>;
}
export declare const SkyWayStreamFactory: StreamFactory;
/**@internal */
export declare class MediaDevice {
    id: string;
    label: string;
    kind: MediaDeviceKind;
    /**@private */
    constructor(info: MediaDeviceInfo);
}
/**
 * @description [japanese] ブラウザによって対応しているパラメータが異なるので、必要に応じて確認してください
 */
export declare type VideoMediaTrackConstraints = {
    aspectRatio?: ConstrainDouble;
    facingMode?: ConstrainDOMString;
    frameRate?: ConstrainDouble;
    height?: ConstrainULong;
    width?: ConstrainULong;
    deviceId?: ConstrainDOMString;
};
/**
 * @description [japanese] ブラウザによって対応しているパラメータが異なるので、必要に応じて確認してください
 */
export declare type AudioMediaTrackConstraints = {
    autoGainControl?: ConstrainBoolean;
    channelCount?: ConstrainULong;
    echoCancellation?: ConstrainBoolean;
    latency?: ConstrainDouble;
    noiseSuppression?: ConstrainBoolean;
    sampleRate?: ConstrainULong;
    sampleSize?: ConstrainULong;
    suppressLocalAudioPlayback?: ConstrainBoolean;
    deviceId?: ConstrainDOMString;
    /**
     * @description [english] Non-standard. Check browser support before using.
     */
    volume?: number;
};
export declare type DisplayMediaTrackConstraints = VideoMediaTrackConstraints & {
    /** @description [japanese] 選択画面で最初に表示するキャプチャー対象の指定*/
    displaySurface?: 'monitor' | 'window' | 'browser';
};
export declare type DisplayStreamOptions = {
    audio?: (AudioMediaTrackConstraints & Partial<Pick<LocalMediaStreamOptions, 'stopTrackWhenDisabled'>>) | boolean;
    video?: DisplayMediaTrackConstraints & VideoMediaTrackConstraints & Partial<Pick<LocalMediaStreamOptions, 'stopTrackWhenDisabled'>>;
};
interface VideoStreamProcessor {
    createProcessedStream(options?: {
        stopTrackWhenDisabled?: boolean;
        onUpdateTrack?: (track: MediaStreamTrack) => Promise<void>;
        constraints?: MediaTrackConstraints;
    }): Promise<ProcessedStream>;
}
export {};
//# sourceMappingURL=factory.d.ts.map