|
export function get_devices(): Promise<MediaDeviceInfo[]> { |
|
return navigator.mediaDevices.enumerateDevices(); |
|
} |
|
|
|
export function handle_error(error: string): void { |
|
throw new Error(error); |
|
} |
|
|
|
export function set_local_stream( |
|
local_stream: MediaStream | null, |
|
video_source: HTMLVideoElement |
|
): void { |
|
video_source.srcObject = local_stream; |
|
video_source.muted = true; |
|
video_source.play(); |
|
} |
|
|
|
export async function get_video_stream( |
|
include_audio: boolean, |
|
video_source: HTMLVideoElement, |
|
device_id?: string |
|
): Promise<MediaStream> { |
|
const size = { |
|
width: { ideal: 1920 }, |
|
height: { ideal: 1440 } |
|
}; |
|
|
|
const constraints = { |
|
video: device_id ? { deviceId: { exact: device_id }, ...size } : size, |
|
audio: include_audio |
|
}; |
|
|
|
return navigator.mediaDevices |
|
.getUserMedia(constraints) |
|
.then((local_stream: MediaStream) => { |
|
set_local_stream(local_stream, video_source); |
|
return local_stream; |
|
}); |
|
} |
|
|
|
export function set_available_devices( |
|
devices: MediaDeviceInfo[] |
|
): MediaDeviceInfo[] { |
|
const cameras = devices.filter( |
|
(device: MediaDeviceInfo) => device.kind === "videoinput" |
|
); |
|
|
|
return cameras; |
|
} |
|
|