---
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;
```