/// import { EventEmitter } from 'events'; import { DiagnosticError } from './errors'; import { SubsetRequired, TimeMeasurement, VideoResolution } from './types'; export declare interface VideoInputTest { /** * This event is emitted with a test report when the test ends. * @param event [[VideoInputTest.Events.End]] * @param report Summary of the test. * @private */ emit(event: VideoInputTest.Events.End, report: VideoInputTest.Report): boolean; /** * This event is emitted with a [[DiagnosticError]] when the test encounters * an error, fatal or not. * @param event [[VideoInputTest.Events.Error]] * @param error The [[DiagnosticError]] that was encountered. * @private */ emit(event: VideoInputTest.Events.Error, error: DiagnosticError): boolean; /** * Raised upon completion of the test. * @param event [[VideoInputTest.Events.End]] * @param listener A callback that expects the following parameters: * An [[VideoInputTest.Report]] that summarizes the test. * @returns This [[VideoInputTest]] instance. * @event */ on(event: VideoInputTest.Events.End, listener: (report: VideoInputTest.Report) => any): this; /** * Raised by the test when encountering an error with a parameter of type * [[DiagnosticError]]. * @param event [[VideoInputTest.Events.Error]] * @param listener A callback that expects the following parameters: * A [[DiagnosticError]] that the test encountered. * @returns This [[VideoInputTest]] instance. * @event */ on(event: VideoInputTest.Events.Error, listener: (error: DiagnosticError) => any): this; } /** * [[VideoInputTest]] class that parses options and starts a video input device * test. * * Please see [[testVideoInputDevice]] for details and recommended practices. */ export declare class VideoInputTest extends EventEmitter { /** * The name of the test. */ static readonly testName: string; /** * Default options for the test. */ private static defaultOptions; /** * Timestamp of when the test was ended. */ private _endTime; /** * An array of any errors that occur during the run time of the test. */ private readonly _errors; /** * Options to be used throughout the runtime of the test. */ private _options; /** * The promise returned by the `HTMLMediaElement` after playing the stream * captured by `getUserMedia`. */ private _playPromise; /** * Timestamp of when the test was started. */ private _startTime; /** * Timer ID of the test duration timeout. */ private _timeoutId; /** * The `MediaStream` resulting from calling `getUserMedia`. */ private _userMediaStream; /** * Constructor for a [[VideoInputTest]] object. * @param options Options to be used during the runtime of the test. */ constructor(options?: VideoInputTest.Options); /** * Stops the test. Emits a report upon the end of the test. */ stop(): void; /** * Clean up the test. */ private _cleanup; /** * Helper function that should be called when an error occurs, recoverable * or not. * @param error */ private _onError; /** * Warning event handler. * @param warning */ private _onWarning; /** * Entry point of the test. */ private _startTest; } export declare namespace VideoInputTest { /** * Possible events that a [[VideoInputTest]] might emit. See [[VideoInputTest.on]]. */ enum Events { End = "end", Error = "error" } interface Report { /** * The device ID used to get a MediaStream from using getUserMedia. */ deviceId: string | undefined; /** * Any errors that occurred during the test. */ errors: DiagnosticError[]; /** * Resolution of the captured video frames in pixels. */ resolution: VideoResolution; /** * The name of the test. */ testName: string; /** * Time measurements of test run time. */ testTiming?: TimeMeasurement; } interface Options { /** * Whether or not to log debug statements to the console. * @private */ debug?: boolean; /** * The device ID to try to get a MediaStream from using `getUserMedia`. */ deviceId?: string; /** * Duration of time to run the test in milliseconds. If not specified, then * the [[VideoInputTest]] will keep running until [[VideoInputTest.stop]] is * called. * * @default Infinity */ duration?: number; /** * The video element used to render the device feed. If not provided, then * the video feed is not rendered. */ element?: HTMLVideoElement; /** * Used to mock calls to `getUserMedia`. * @private */ getUserMedia?: typeof navigator.mediaDevices.getUserMedia; /** * The device's capture resolution in pixels. If not specified, then the * default capture resolution is used. */ resolution?: VideoResolution; } /** * Option typing after initialization, so we can have type guarantees. * @private */ type InternalOptions = SubsetRequired; } /** * This test examines video input capabilities. It serves to help diagnose * potential video device issues that would prevent video from being shared in * a WebRTC call. * * --- * * This test will use `getUserMedia` to try and capture a video stream from the * user. If this succeeds and an `HTMLMediaElement` is passed to the test within * the test options, then the stream will be bound to the element and should be * displayed. * * --- * * When the test ends, all of the tracks within the captured `MediaStream` are * ended and the `srcObject` of the `HTMLMediaElement` is set to `null`. */ export declare function testVideoInputDevice(options?: VideoInputTest.Options): VideoInputTest;