const STORAGE_KEY = 'vidconf-audio-output-device' /** * Поддержка выбора устройства аудиовывода — определяем по наличию * `setSinkId` в рантайме, НЕ по User-Agent: в iOS Safari метода нет вообще * (маршрутизация звука там целиком на стороне ОС), в Android Chrome есть. */ export function isAudioOutputSelectable(): boolean { return typeof HTMLMediaElement !== 'undefined' && 'setSinkId' in HTMLMediaElement.prototype } /** * Персист выбранного устройства вывода — отдельно от `usePersistentUserChoices` * LiveKit: их `LocalUserChoices` знает только про вход (микрофон/камера), * поля для аудиовыхода там нет. */ export function loadAudioOutputDeviceId(): string { try { return localStorage.getItem(STORAGE_KEY) ?? '' } catch { // localStorage недоступен (приватный режим/политики браузера) — без // сохранённого выбора, устройство по умолчанию. return '' } } export function saveAudioOutputDeviceId(deviceId: string): void { try { localStorage.setItem(STORAGE_KEY, deviceId) } catch { // Сохранение недоступно — выбор продержится до конца сессии в комнате. } }