From 0823d6802dd6bd0ebb597acb283a1ffccb58d235 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A9lix=20Zapata?= Date: Tue, 28 Mar 2023 11:47:53 +0200 Subject: [PATCH] fix(useDevicesList): show devices for Firefox (#2798) --- packages/core/useDevicesList/index.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/packages/core/useDevicesList/index.ts b/packages/core/useDevicesList/index.ts index 0f4b64cb48f..bcab6470220 100644 --- a/packages/core/useDevicesList/index.ts +++ b/packages/core/useDevicesList/index.ts @@ -58,6 +58,7 @@ export function useDevicesList(options: UseDevicesListOptions = {}): UseDevicesL const audioOutputs = computed(() => devices.value.filter(i => i.kind === 'audiooutput')) const isSupported = useSupported(() => navigator && navigator.mediaDevices && navigator.mediaDevices.enumerateDevices) const permissionGranted = ref(false) + let stream: MediaStream | null async function update() { if (!isSupported.value) @@ -65,6 +66,10 @@ export function useDevicesList(options: UseDevicesListOptions = {}): UseDevicesL devices.value = await navigator!.mediaDevices.enumerateDevices() onUpdated?.(devices.value) + if (stream) { + stream.getTracks().forEach(t => t.stop()) + stream = null + } } async function ensurePermissions() { @@ -77,8 +82,7 @@ export function useDevicesList(options: UseDevicesListOptions = {}): UseDevicesL const { state, query } = usePermission('camera', { controls: true }) await query() if (state.value !== 'granted') { - const stream = await navigator!.mediaDevices.getUserMedia(constraints) - stream.getTracks().forEach(t => t.stop()) + stream = await navigator!.mediaDevices.getUserMedia(constraints) update() permissionGranted.value = true }