--- category: Sensors related: useDevicesList, usePermission --- # useUserMedia Reactive [`mediaDevices.getUserMedia`](https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getUserMedia) streaming. ## Usage ```vue ``` ### Devices ```ts import { useDevicesList, useUserMedia } from '@vueuse/core'; import { computed, reactive } from 'vue'; const { videoInputs: cameras, audioInputs: microphones } = useDevicesList({ requestPermissions: true, }); const currentCamera = computed(() => cameras.value[0]?.deviceId); const currentMicrophone = computed(() => microphones.value[0]?.deviceId); const { stream } = useUserMedia({ constraints: reactive({ video: { deviceId: currentCamera }, audio: { deviceId: currentMicrophone }, }), }); ``` ## Type Declarations ```ts export interface UseUserMediaOptions extends ConfigurableNavigator { /** * If the stream is enabled * @default false */ enabled?: MaybeRef; /** * Recreate stream when deviceIds or constraints changed * * @default true */ autoSwitch?: MaybeRef; /** * MediaStreamConstraints to be applied to the requested MediaStream * If provided, the constraints will override videoDeviceId and audioDeviceId * * @default {} */ constraints?: MaybeRef; } /** * Reactive `mediaDevices.getUserMedia` streaming * * @see https://vueuse.org/useUserMedia * @param options */ export declare function useUserMedia(options?: UseUserMediaOptions): { isSupported: ComputedRef; stream: Ref; start: () => Promise; stop: () => void; restart: () => Promise; constraints: Ref< | MediaStreamConstraints | { audio?: | boolean | { advanced?: | { aspectRatio?: | number | { exact?: number | undefined; ideal?: number | undefined; max?: number | undefined; min?: number | undefined; } | undefined; autoGainControl?: | boolean | { exact?: boolean | undefined; ideal?: boolean | undefined; } | undefined; backgroundBlur?: | boolean | { exact?: boolean | undefined; ideal?: boolean | undefined; } | undefined; channelCount?: | number | { exact?: number | undefined; ideal?: number | undefined; max?: number | undefined; min?: number | undefined; } | undefined; deviceId?: | string | string[] | { exact?: string | string[] | undefined; ideal?: string | string[] | undefined; } | undefined; displaySurface?: | string | string[] | { exact?: string | string[] | undefined; ideal?: string | string[] | undefined; } | undefined; echoCancellation?: | boolean | { exact?: boolean | undefined; ideal?: boolean | undefined; } | undefined; facingMode?: | string | string[] | { exact?: string | string[] | undefined; ideal?: string | string[] | undefined; } | undefined; frameRate?: | number | { exact?: number | undefined; ideal?: number | undefined; max?: number | undefined; min?: number | undefined; } | undefined; groupId?: | string | string[] | { exact?: string | string[] | undefined; ideal?: string | string[] | undefined; } | undefined; height?: | number | { exact?: number | undefined; ideal?: number | undefined; max?: number | undefined; min?: number | undefined; } | undefined; noiseSuppression?: | boolean | { exact?: boolean | undefined; ideal?: boolean | undefined; } | undefined; sampleRate?: | number | { exact?: number | undefined; ideal?: number | undefined; max?: number | undefined; min?: number | undefined; } | undefined; sampleSize?: | number | { exact?: number | undefined; ideal?: number | undefined; max?: number | undefined; min?: number | undefined; } | undefined; width?: | number | { exact?: number | undefined; ideal?: number | undefined; max?: number | undefined; min?: number | undefined; } | undefined; }[] | undefined; aspectRatio?: | number | { exact?: number | undefined; ideal?: number | undefined; max?: number | undefined; min?: number | undefined; } | undefined; autoGainControl?: | boolean | { exact?: boolean | undefined; ideal?: boolean | undefined; } | undefined; backgroundBlur?: | boolean | { exact?: boolean | undefined; ideal?: boolean | undefined; } | undefined; channelCount?: | number | { exact?: number | undefined; ideal?: number | undefined; max?: number | undefined; min?: number | undefined; } | undefined; deviceId?: | string | string[] | { exact?: string | string[] | undefined; ideal?: string | string[] | undefined; } | undefined; displaySurface?: | string | string[] | { exact?: string | string[] | undefined; ideal?: string | string[] | undefined; } | undefined; echoCancellation?: | boolean | { exact?: boolean | undefined; ideal?: boolean | undefined; } | undefined; facingMode?: | string | string[] | { exact?: string | string[] | undefined; ideal?: string | string[] | undefined; } | undefined; frameRate?: | number | { exact?: number | undefined; ideal?: number | undefined; max?: number | undefined; min?: number | undefined; } | undefined; groupId?: | string | string[] | { exact?: string | string[] | undefined; ideal?: string | string[] | undefined; } | undefined; height?: | number | { exact?: number | undefined; ideal?: number | undefined; max?: number | undefined; min?: number | undefined; } | undefined; noiseSuppression?: | boolean | { exact?: boolean | undefined; ideal?: boolean | undefined; } | undefined; sampleRate?: | number | { exact?: number | undefined; ideal?: number | undefined; max?: number | undefined; min?: number | undefined; } | undefined; sampleSize?: | number | { exact?: number | undefined; ideal?: number | undefined; max?: number | undefined; min?: number | undefined; } | undefined; width?: | number | { exact?: number | undefined; ideal?: number | undefined; max?: number | undefined; min?: number | undefined; } | undefined; } | undefined; peerIdentity?: string | undefined; preferCurrentTab?: boolean | undefined; video?: | boolean | { advanced?: | { aspectRatio?: | number | { exact?: number | undefined; ideal?: number | undefined; max?: number | undefined; min?: number | undefined; } | undefined; autoGainControl?: | boolean | { exact?: boolean | undefined; ideal?: boolean | undefined; } | undefined; backgroundBlur?: | boolean | { exact?: boolean | undefined; ideal?: boolean | undefined; } | undefined; channelCount?: | number | { exact?: number | undefined; ideal?: number | undefined; max?: number | undefined; min?: number | undefined; } | undefined; deviceId?: | string | string[] | { exact?: string | string[] | undefined; ideal?: string | string[] | undefined; } | undefined; displaySurface?: | string | string[] | { exact?: string | string[] | undefined; ideal?: string | string[] | undefined; } | undefined; echoCancellation?: | boolean | { exact?: boolean | undefined; ideal?: boolean | undefined; } | undefined; facingMode?: | string | string[] | { exact?: string | string[] | undefined; ideal?: string | string[] | undefined; } | undefined; frameRate?: | number | { exact?: number | undefined; ideal?: number | undefined; max?: number | undefined; min?: number | undefined; } | undefined; groupId?: | string | string[] | { exact?: string | string[] | undefined; ideal?: string | string[] | undefined; } | undefined; height?: | number | { exact?: number | undefined; ideal?: number | undefined; max?: number | undefined; min?: number | undefined; } | undefined; noiseSuppression?: | boolean | { exact?: boolean | undefined; ideal?: boolean | undefined; } | undefined; sampleRate?: | number | { exact?: number | undefined; ideal?: number | undefined; max?: number | undefined; min?: number | undefined; } | undefined; sampleSize?: | number | { exact?: number | undefined; ideal?: number | undefined; max?: number | undefined; min?: number | undefined; } | undefined; width?: | number | { exact?: number | undefined; ideal?: number | undefined; max?: number | undefined; min?: number | undefined; } | undefined; }[] | undefined; aspectRatio?: | number | { exact?: number | undefined; ideal?: number | undefined; max?: number | undefined; min?: number | undefined; } | undefined; autoGainControl?: | boolean | { exact?: boolean | undefined; ideal?: boolean | undefined; } | undefined; backgroundBlur?: | boolean | { exact?: boolean | undefined; ideal?: boolean | undefined; } | undefined; channelCount?: | number | { exact?: number | undefined; ideal?: number | undefined; max?: number | undefined; min?: number | undefined; } | undefined; deviceId?: | string | string[] | { exact?: string | string[] | undefined; ideal?: string | string[] | undefined; } | undefined; displaySurface?: | string | string[] | { exact?: string | string[] | undefined; ideal?: string | string[] | undefined; } | undefined; echoCancellation?: | boolean | { exact?: boolean | undefined; ideal?: boolean | undefined; } | undefined; facingMode?: | string | string[] | { exact?: string | string[] | undefined; ideal?: string | string[] | undefined; } | undefined; frameRate?: | number | { exact?: number | undefined; ideal?: number | undefined; max?: number | undefined; min?: number | undefined; } | undefined; groupId?: | string | string[] | { exact?: string | string[] | undefined; ideal?: string | string[] | undefined; } | undefined; height?: | number | { exact?: number | undefined; ideal?: number | undefined; max?: number | undefined; min?: number | undefined; } | undefined; noiseSuppression?: | boolean | { exact?: boolean | undefined; ideal?: boolean | undefined; } | undefined; sampleRate?: | number | { exact?: number | undefined; ideal?: number | undefined; max?: number | undefined; min?: number | undefined; } | undefined; sampleSize?: | number | { exact?: number | undefined; ideal?: number | undefined; max?: number | undefined; min?: number | undefined; } | undefined; width?: | number | { exact?: number | undefined; ideal?: number | undefined; max?: number | undefined; min?: number | undefined; } | undefined; } | undefined; } | undefined, | MaybeRef | { audio?: | boolean | { advanced?: | { aspectRatio?: | number | { exact?: number | undefined; ideal?: number | undefined; max?: number | undefined; min?: number | undefined; } | undefined; autoGainControl?: | boolean | { exact?: boolean | undefined; ideal?: boolean | undefined; } | undefined; backgroundBlur?: | boolean | { exact?: boolean | undefined; ideal?: boolean | undefined; } | undefined; channelCount?: | number | { exact?: number | undefined; ideal?: number | undefined; max?: number | undefined; min?: number | undefined; } | undefined; deviceId?: | string | string[] | { exact?: string | string[] | undefined; ideal?: string | string[] | undefined; } | undefined; displaySurface?: | string | string[] | { exact?: string | string[] | undefined; ideal?: string | string[] | undefined; } | undefined; echoCancellation?: | boolean | { exact?: boolean | undefined; ideal?: boolean | undefined; } | undefined; facingMode?: | string | string[] | { exact?: string | string[] | undefined; ideal?: string | string[] | undefined; } | undefined; frameRate?: | number | { exact?: number | undefined; ideal?: number | undefined; max?: number | undefined; min?: number | undefined; } | undefined; groupId?: | string | string[] | { exact?: string | string[] | undefined; ideal?: string | string[] | undefined; } | undefined; height?: | number | { exact?: number | undefined; ideal?: number | undefined; max?: number | undefined; min?: number | undefined; } | undefined; noiseSuppression?: | boolean | { exact?: boolean | undefined; ideal?: boolean | undefined; } | undefined; sampleRate?: | number | { exact?: number | undefined; ideal?: number | undefined; max?: number | undefined; min?: number | undefined; } | undefined; sampleSize?: | number | { exact?: number | undefined; ideal?: number | undefined; max?: number | undefined; min?: number | undefined; } | undefined; width?: | number | { exact?: number | undefined; ideal?: number | undefined; max?: number | undefined; min?: number | undefined; } | undefined; }[] | undefined; aspectRatio?: | number | { exact?: number | undefined; ideal?: number | undefined; max?: number | undefined; min?: number | undefined; } | undefined; autoGainControl?: | boolean | { exact?: boolean | undefined; ideal?: boolean | undefined; } | undefined; backgroundBlur?: | boolean | { exact?: boolean | undefined; ideal?: boolean | undefined; } | undefined; channelCount?: | number | { exact?: number | undefined; ideal?: number | undefined; max?: number | undefined; min?: number | undefined; } | undefined; deviceId?: | string | string[] | { exact?: string | string[] | undefined; ideal?: string | string[] | undefined; } | undefined; displaySurface?: | string | string[] | { exact?: string | string[] | undefined; ideal?: string | string[] | undefined; } | undefined; echoCancellation?: | boolean | { exact?: boolean | undefined; ideal?: boolean | undefined; } | undefined; facingMode?: | string | string[] | { exact?: string | string[] | undefined; ideal?: string | string[] | undefined; } | undefined; frameRate?: | number | { exact?: number | undefined; ideal?: number | undefined; max?: number | undefined; min?: number | undefined; } | undefined; groupId?: | string | string[] | { exact?: string | string[] | undefined; ideal?: string | string[] | undefined; } | undefined; height?: | number | { exact?: number | undefined; ideal?: number | undefined; max?: number | undefined; min?: number | undefined; } | undefined; noiseSuppression?: | boolean | { exact?: boolean | undefined; ideal?: boolean | undefined; } | undefined; sampleRate?: | number | { exact?: number | undefined; ideal?: number | undefined; max?: number | undefined; min?: number | undefined; } | undefined; sampleSize?: | number | { exact?: number | undefined; ideal?: number | undefined; max?: number | undefined; min?: number | undefined; } | undefined; width?: | number | { exact?: number | undefined; ideal?: number | undefined; max?: number | undefined; min?: number | undefined; } | undefined; } | undefined; peerIdentity?: string | undefined; preferCurrentTab?: boolean | undefined; video?: | boolean | { advanced?: | { aspectRatio?: | number | { exact?: number | undefined; ideal?: number | undefined; max?: number | undefined; min?: number | undefined; } | undefined; autoGainControl?: | boolean | { exact?: boolean | undefined; ideal?: boolean | undefined; } | undefined; backgroundBlur?: | boolean | { exact?: boolean | undefined; ideal?: boolean | undefined; } | undefined; channelCount?: | number | { exact?: number | undefined; ideal?: number | undefined; max?: number | undefined; min?: number | undefined; } | undefined; deviceId?: | string | string[] | { exact?: string | string[] | undefined; ideal?: string | string[] | undefined; } | undefined; displaySurface?: | string | string[] | { exact?: string | string[] | undefined; ideal?: string | string[] | undefined; } | undefined; echoCancellation?: | boolean | { exact?: boolean | undefined; ideal?: boolean | undefined; } | undefined; facingMode?: | string | string[] | { exact?: string | string[] | undefined; ideal?: string | string[] | undefined; } | undefined; frameRate?: | number | { exact?: number | undefined; ideal?: number | undefined; max?: number | undefined; min?: number | undefined; } | undefined; groupId?: | string | string[] | { exact?: string | string[] | undefined; ideal?: string | string[] | undefined; } | undefined; height?: | number | { exact?: number | undefined; ideal?: number | undefined; max?: number | undefined; min?: number | undefined; } | undefined; noiseSuppression?: | boolean | { exact?: boolean | undefined; ideal?: boolean | undefined; } | undefined; sampleRate?: | number | { exact?: number | undefined; ideal?: number | undefined; max?: number | undefined; min?: number | undefined; } | undefined; sampleSize?: | number | { exact?: number | undefined; ideal?: number | undefined; max?: number | undefined; min?: number | undefined; } | undefined; width?: | number | { exact?: number | undefined; ideal?: number | undefined; max?: number | undefined; min?: number | undefined; } | undefined; }[] | undefined; aspectRatio?: | number | { exact?: number | undefined; ideal?: number | undefined; max?: number | undefined; min?: number | undefined; } | undefined; autoGainControl?: | boolean | { exact?: boolean | undefined; ideal?: boolean | undefined; } | undefined; backgroundBlur?: | boolean | { exact?: boolean | undefined; ideal?: boolean | undefined; } | undefined; channelCount?: | number | { exact?: number | undefined; ideal?: number | undefined; max?: number | undefined; min?: number | undefined; } | undefined; deviceId?: | string | string[] | { exact?: string | string[] | undefined; ideal?: string | string[] | undefined; } | undefined; displaySurface?: | string | string[] | { exact?: string | string[] | undefined; ideal?: string | string[] | undefined; } | undefined; echoCancellation?: | boolean | { exact?: boolean | undefined; ideal?: boolean | undefined; } | undefined; facingMode?: | string | string[] | { exact?: string | string[] | undefined; ideal?: string | string[] | undefined; } | undefined; frameRate?: | number | { exact?: number | undefined; ideal?: number | undefined; max?: number | undefined; min?: number | undefined; } | undefined; groupId?: | string | string[] | { exact?: string | string[] | undefined; ideal?: string | string[] | undefined; } | undefined; height?: | number | { exact?: number | undefined; ideal?: number | undefined; max?: number | undefined; min?: number | undefined; } | undefined; noiseSuppression?: | boolean | { exact?: boolean | undefined; ideal?: boolean | undefined; } | undefined; sampleRate?: | number | { exact?: number | undefined; ideal?: number | undefined; max?: number | undefined; min?: number | undefined; } | undefined; sampleSize?: | number | { exact?: number | undefined; ideal?: number | undefined; max?: number | undefined; min?: number | undefined; } | undefined; width?: | number | { exact?: number | undefined; ideal?: number | undefined; max?: number | undefined; min?: number | undefined; } | undefined; } | undefined; } | undefined >; enabled: | Ref | ShallowRef | WritableComputedRef | ShallowRef | ShallowRef; autoSwitch: | Ref | ShallowRef | WritableComputedRef | ShallowRef | ShallowRef; }; export type UseUserMediaReturn = ReturnType; ```