🐛(frontend) omit the default speaker id sent to LiveKit

Firefox rejects setSinkId('default') when a remote audio track
is attached. Omit that id and only send a real device id.
This commit is contained in:
Ovgodd
2026-10-01 10:16:35 +02:00
committed by aleb_the_flash
parent 3773e43d93
commit b0bb5bc61b
3 changed files with 14 additions and 1 deletions
+1
View File
@@ -26,6 +26,7 @@ and this project adheres to
- 🔒️(frontend) upgrade tiff to fix CVE-2026-4775
- 🔒️(backend) bind accepted lobby entries to the current username
- 🔒️(backend) sign lobby participant id
- 🐛(frontend) omit the default speaker id sent to LiveKit
## [1.34.0] - 2026-10-07
@@ -45,6 +45,7 @@ import { userStore } from '@/stores/user'
import { WatchMediaDeviceErrors } from './WatchMediaDeviceErrors'
import { MeetDevtools } from '@/features/devtools'
import { VOICE_AUDIO_CONSTRAINTS } from '@/features/rooms/livekit/utils/constants'
import { resolveAudioOutputDeviceId } from '@/features/rooms/utils/resolveAudioOutputDeviceId'
export const Conference = ({
roomId,
@@ -120,7 +121,7 @@ export const Conference = ({
...VOICE_AUDIO_CONSTRAINTS,
},
audioOutput: {
deviceId: userConfig.audioOutputDeviceId ?? undefined,
deviceId: resolveAudioOutputDeviceId(userConfig.audioOutputDeviceId),
},
}
// do not rely on the userConfig object directly as its reference may change on every render
@@ -0,0 +1,11 @@
/**
* `'default'` means "use the system output". Firefox has no device with that
* id, so LiveKit's setSinkId('default') rejects on every remote audio attach.
* Omit it and the browser keeps the OS default, which is the same result.
*/
export const resolveAudioOutputDeviceId = (
deviceId: string | undefined
): string | undefined => {
if (!deviceId || deviceId === 'default') return undefined
return deviceId
}