Appearance
useUserMedia
Category
Export Size
698 B
Last Changed
5 days ago
Related
Streaming via mediaDevices.getUserMedia
Demo
Usage
tsx
import { useUserMedia } from '@reause/core'
import { useEffect, useRef } from 'react'
const { stream, start } = useUserMedia()
const videoRef = useRef<HTMLVideoElement>(null)
useEffect(() => {
// acquire the stream once mounted
start()
}, [])
useEffect(() => {
// preview on a video element
videoRef.current.srcObject = stream ?? null
}, [stream])Devices
tsx
import { useDevicesList, useUserMedia } from '@reause/core'
const {
videoInputs: cameras,
audioInputs: microphones,
} = useDevicesList({
requestPermissions: true,
})
const currentCamera = cameras[0]?.deviceId
const currentMicrophone = microphones[0]?.deviceId
const { stream } = useUserMedia({
constraints: {
video: { deviceId: currentCamera },
audio: { deviceId: currentMicrophone },
},
})Type Declarations
ts
export interface ConfigurableNavigator {
navigator?: Navigator;
}
export interface UseUserMediaOptions extends ConfigurableNavigator {
enabled?: boolean;
autoSwitch?: boolean;
constraints?: MediaStreamConstraints;
}
export interface UseUserMediaReturn {
isSupported: boolean;
stream: MediaStream | undefined;
start: () => Promise<MediaStream | undefined>;
stop: () => void;
restart: () => Promise<MediaStream | undefined>;
constraints: MediaStreamConstraints | undefined;
enabled: boolean;
autoSwitch: boolean;
}
export function useUserMedia(options?: UseUserMediaOptions): UseUserMediaReturn