feat(room): выбор устройства аудиовывода в настройках
Третий селект в DeviceSettingsDialog (динамики/наушники/bluetooth) рядом с уже существующими микрофоном и камерой — на useMediaDeviceSelect(kind: 'audiooutput'). Выбор персистится отдельно от usePersistentUserChoices (LocalUserChoices LiveKit про аудиовыход не знает) и применяется заново при следующем подключении через RoomOptions.audioOutput. Поддержка определяется по наличию setSinkId в рантайме, не по User-Agent: там, где браузер не умеет переключать вывод (iOS Safari), список скрыт, вместо него — подсказка, что маршрутизация звука на стороне системы.
This commit is contained in:
@@ -17,6 +17,7 @@ import { RoomStage } from '@/components/room/RoomStage'
|
||||
import { RoomToolbar } from '@/components/room/RoomToolbar'
|
||||
import { ChatPanel } from '@/components/room/ChatPanel'
|
||||
import { DeviceSettingsDialog } from '@/components/room/DeviceSettingsDialog'
|
||||
import { loadAudioOutputDeviceId } from '@/lib/audioOutputDevice'
|
||||
|
||||
interface RoomJoinState {
|
||||
livekitUrl: string
|
||||
@@ -163,6 +164,12 @@ export function RoomPage() {
|
||||
() => ({
|
||||
audioCaptureDefaults: { deviceId: userChoices.audioDeviceId || undefined },
|
||||
videoCaptureDefaults: { deviceId: userChoices.videoDeviceId || undefined },
|
||||
// Аудиовыход (колонки/наушники/bluetooth) — отдельный персист, не через
|
||||
// usePersistentUserChoices: LocalUserChoices LiveKit про него не знает
|
||||
// (см. lib/audioOutputDevice.ts). Читаем один раз при монтировании —
|
||||
// как и с audio/videoDeviceId, смена применяется через DeviceSettingsDialog
|
||||
// (setActiveMediaDevice), а не пересозданием roomOptions.
|
||||
audioOutput: { deviceId: loadAudioOutputDeviceId() || undefined },
|
||||
}),
|
||||
[userChoices],
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user