Interface DeviceControllerFacade

[[DeviceControllerFacade]] keeps track of the devices being used for audio input (e.g. microphone), video input (e.g. camera), audio output (e.g. speakers). The list functions return MediaDeviceInfo objects. Once any list function is called, changes in device availability are broadcast to any registered [[DeviceChangeObserver]].

Calling a start function will request permission for the device indicated by the device id, media stream or track constraint. For audio input, supply null to will generate an empty audio stream. Calling stop to stop the input stream. Make sure to choose the audio input before joining the session (even if it is the default device) so that you can offer the user options if the device cannot be selected before a connection is made.

Note that in certain situations such as private tabs, the browser may initially decline to provide device labels for when enumerating devices. If this is the case, the internal device label trigger function is called to try to coax the browser in to providing the labels. The default behavior of the function is to make a microphone and camera access request which, if successful, will unlock the labels. You may want to override this behavior to provide a custom UX such as a prompt explaining why microphone and camera access is being asked for by supplying your own function to setDeviceLabelTrigger(). To disable the device label trigger, supply a function that returns a rejected promise instead. For reference, the default implementation calls getUserMedia for audio and video and returns the promise to the stream so that the stream can be cleaned up once the labels are detected.

(): Promise<MediaStream> => {
return navigator.mediaDevices.getUserMedia({ audio: true, video: true });
}
interface DeviceControllerFacade {
    addDeviceChangeObserver(observer: DeviceChangeObserver): void;
    chooseAudioOutput(deviceId: string): Promise<void>;
    chooseVideoInputQuality(
        width: number,
        height: number,
        frameRate: number,
    ): void;
    createAnalyserNodeForAudioInput(): RemovableAnalyserNode;
    getVideoInputQualitySettings(): VideoQualitySettings;
    listAudioInputDevices(forceUpdate?: boolean): Promise<MediaDeviceInfo[]>;
    listAudioOutputDevices(forceUpdate?: boolean): Promise<MediaDeviceInfo[]>;
    listVideoInputDevices(forceUpdate?: boolean): Promise<MediaDeviceInfo[]>;
    mixIntoAudioInput(stream: MediaStream): MediaStreamAudioSourceNode;
    removeDeviceChangeObserver(observer: DeviceChangeObserver): void;
    setDeviceLabelTrigger(trigger: () => Promise<MediaStream>): void;
    startAudioInput(device: AudioInputDevice): Promise<MediaStream>;
    startVideoInput(device: VideoInputDevice): Promise<MediaStream>;
    startVideoPreviewForVideoInput(element: HTMLVideoElement): void;
    stopAudioInput(): Promise<void>;
    stopVideoInput(): Promise<void>;
    stopVideoPreviewForVideoInput(element: HTMLVideoElement): void;
}

Hierarchy (View Summary)

Methods

  • Sets the video input quality parameters to request when enabling video. These settings take effect the next time a video input device is chosen. The default is 960x540 @ 15 fps.

    Parameters

    • width: number
    • height: number
    • frameRate: number

    Returns void

  • Lists currently available audio input devices. If forceUpdate is set to true, the deviceInfoCache will be updated from browser.

    Parameters

    • OptionalforceUpdate: boolean

    Returns Promise<MediaDeviceInfo[]>

  • Lists currently available audio output devices. If forceUpdate is set to true, the deviceInfoCache will be updated from browser.

    Parameters

    • OptionalforceUpdate: boolean

    Returns Promise<MediaDeviceInfo[]>

  • Lists currently available video input devices. If forceUpdate is set to true, the deviceInfoCache will be updated from browser.

    Parameters

    • OptionalforceUpdate: boolean

    Returns Promise<MediaDeviceInfo[]>

  • Mixes the audio from the given media stream into the main audio input stream.

    Parameters

    • stream: MediaStream

    Returns MediaStreamAudioSourceNode

  • Sets the device label trigger to use in the case where media device labels are not present due to privacy restrictions in the browser. See above for an explanation of how this works.

    Parameters

    • trigger: () => Promise<MediaStream>

    Returns void

  • Selects an audio input device to use. The constraint may be a device id, MediaTrackConstraint, MediaStream (containing audio track), or null to generate a dummy audio stream. It may also be an AudioTransformDevice to customize the constraints used or to apply Web Audio transforms.

    The promise will resolve indicating success or it will throw an appropriate error indicating the failure.

    Parameters

    Returns Promise<MediaStream>

  • Starts a video preview of the currently selected video and binds it a video element to be displayed before a meeting begins. Make sure to call [[stopVideoPreviewForVideoInput]] when the preview is no longer necessary so that the stream can be released and turn off the camera if it is not being used anymore.

    Parameters

    • element: HTMLVideoElement

    Returns void

  • Stop the current audio input. This needs to be called to clear out to stop the current audio input resources such as audio stream from microphone.

    Returns Promise<void>

  • Stop the current video input. This needs to be called to clear out to stop the current video input resources such as video stream from camera.

    Returns Promise<void>

  • Stops the stream for a previously bound video preview and unbinds it from the video element.

    Parameters

    • element: HTMLVideoElement

    Returns void