Compare commits

...

1 Commits

Author SHA1 Message Date
Ovgodd 4ed1680223 🐛(frontend) omit the default speaker id sent to LiveKit
Fix Firefox setSinkId('default') errors by omitting 'default'; only set real device IDs.
2026-10-01 10:16:35 +02:00
4 changed files with 18 additions and 1 deletions
+1
View File
@@ -15,6 +15,7 @@ and this project adheres to
### Fixed
- 🐛(frontend) omit the default speaker id sent to LiveKit
- 🐛(frontend) enforce recording-mode permissions on the checkboxes
- 🔒️(agents) fix util-linux CVEs reported by Cyberwatch
@@ -8,6 +8,10 @@ const IGNORED_EXCEPTION_PATTERNS = [
// the close reason is already logged by the SDK.
// See: https://github.com/livekit/client-sdk-js/issues/2062
/^Event captured as exception with keys: isTrusted$/,
// LiveKit logs a rejected setSinkId on remote audio attach and already
// swallows it. capture_console_errors turns that log into an exception
// and stringifies the real error as [object Object].
/^Failed to set sink id on remote audio track/,
]
const shouldIgnoreException = (value: unknown): boolean =>
@@ -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
}