import { BrowserPermission } from './BrowserPermission';
import { Tracer } from '../stats';
/**
 * Tells if the browser supports audio output change on 'audio' elements,
 * see https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/setSinkId.
 */
export declare const checkIfAudioOutputChangeSupported: () => boolean;
/**
 * Keeps track of the browser permission to use microphone. This permission also
 * affects an ability to enumerate audio devices.
 */
export declare const getAudioBrowserPermission: (...args: (Tracer | undefined)[]) => BrowserPermission;
/**
 * Keeps track of the browser permission to use camera. This permission also
 * affects an ability to enumerate video devices.
 */
export declare const getVideoBrowserPermission: (...args: (Tracer | undefined)[]) => BrowserPermission;
/**
 * Prompts the user for a permission to use audio devices (if not already granted
 * and was not prompted before) and lists the available 'audioinput' devices,
 * if devices are added/removed the list is updated, and if the permission is revoked,
 * the observable errors.
 */
export declare const getAudioDevices: (...args: (Tracer | undefined)[]) => import("rxjs").Observable<MediaDeviceInfo[]>;
/**
 * Prompts the user for a permission to use video devices (if not already granted
 * and was not prompted before) and lists the available 'videoinput' devices,
 * if devices are added/removed the list is updated, and if the permission is revoked,
 * the observable errors.
 */
export declare const getVideoDevices: (...args: (Tracer | undefined)[]) => import("rxjs").Observable<MediaDeviceInfo[]>;
/**
 * Prompts the user for a permission to use video devices (if not already granted
 * and was not prompted before) and lists the available 'audiooutput' devices,
 * if devices are added/removed the list is updated, and if the permission is revoked,
 * the observable errors.
 */
export declare const getAudioOutputDevices: (...args: (Tracer | undefined)[]) => import("rxjs").Observable<MediaDeviceInfo[]>;
/**
 * Returns an audio media stream that fulfills the given constraints.
 * If no constraints are provided, it uses the browser's default ones.
 *
 * @param trackConstraints the constraints to use when requesting the stream.
 * @param tracer the tracer to use for tracing the stream creation.
 * @returns a new `MediaStream` fulfilling the given constraints.
 */
export declare const getAudioStream: (trackConstraints?: MediaTrackConstraints, tracer?: Tracer) => Promise<MediaStream>;
/**
 * Returns a video media stream that fulfills the given constraints.
 * If no constraints are provided, it uses the browser's default ones.
 *
 * @param trackConstraints the constraints to use when requesting the stream.
 * @param tracer the tracer to use for tracing the stream creation.
 * @returns a new `MediaStream` fulfilling the given constraints.
 */
export declare const getVideoStream: (trackConstraints?: MediaTrackConstraints, tracer?: Tracer) => Promise<MediaStream>;
/**
 * Prompts the user for a permission to share a screen.
 * If the user grants the permission, a screen sharing stream is returned. Throws otherwise.
 *
 * The callers of this API are responsible to handle the possible errors.
 *
 * @param options any additional options to pass to the [`getDisplayMedia`](https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getDisplayMedia) API.
 * @param tracer the tracer to use for tracing the stream creation.
 */
export declare const getScreenShareStream: (options?: DisplayMediaStreamOptions, tracer?: Tracer | undefined) => Promise<MediaStream>;
export declare const deviceIds$: import("rxjs").Observable<MediaDeviceInfo[]> | undefined;
/**
 * Resolves `default` device id into the real device id. Some browsers (notably,
 * Chromium-based) report device with id `default` among audio input and output
 * devices. Since not every browser does that, we never want `default` id to be
 * used within our SDK. This function tries to find the real id for the `default`
 * device.
 */
export declare function resolveDeviceId(deviceId: string | undefined, kind: MediaDeviceKind): string | undefined;
