Массив устройств вывода звука имеет длину 0 в safari

Я работаю над приложением для видеоконференцсвязи, которое использует Amazon Chime. Я следил за страницей npm Amazon Chime SDK JS и мне удалось получить ответ сервера и инициализировать meetingSession. Однако проблема заключается в том, что когда я пытаюсь получить массив устройств вывода звука, это массив нулевой длины в Safari, тогда как в браузерах, таких как Chrome и Firefox, он работает нормально, и я получаю массив ненулевой длины. Как мне решить эту проблему?

Вот что я кодировал до сих пор:

import {
  ConsoleLogger,
  DefaultDeviceController,
  DefaultMeetingSession,
  LogLevel,
  MeetingSessionConfiguration
} from 'amazon-chime-sdk-js';
 
const logger = new ConsoleLogger('MyLogger', LogLevel.INFO);
const deviceController = new DefaultDeviceController(logger);
 
// You need responses from server-side Chime API. See below for details.
const meetingResponse = /* Server response */;
const attendeeResponse = /* Server response */;
const configuration = new MeetingSessionConfiguration(meetingResponse, attendeeResponse);

const meetingSession = new DefaultMeetingSession(
  configuration,
  logger,
  deviceController
);

const audioInputDevices = await meetingSession.audioVideo.listAudioInputDevices();
const audioOutputDevices = await meetingSession.audioVideo.listAudioOutputDevices();
const videoInputDevices = await meetingSession.audioVideo.listVideoInputDevices();

/* Rest of the code... */

Когда я регистрирую длины вышеуказанных массивов в консоли, длина audioOutputDevices array равен нулю в Safari, тогда как в других браузерах он не равен нулю.

2 ответа

Решение

Согласно Amazon Chime SDK FAQ,это известная проблема: в Firefox и Safari есть известные проблемы, не позволяющие им отображать устройства вывода звука в этих браузерах. Хотя клиенты могут продолжить собрание, используя устройство по умолчанию, они не смогут выбирать устройства в собраниях.

Выбор устройства вывода / динамика не включен по умолчанию в Firefox и Safari. Поэтому вам нужно изменить настройки по умолчанию:

Следующие шаги протестированы на macOS Catalina (v: 10.15.7).

а) Firefox: эта проблема обсуждается здесь: https://github.com/bigbluebutton/bigbluebutton/issues/12471

  1. В строке URL введите about:config
  2. Найдите на панели поиска свойство media.setsinkid.enabled и установите для него значение true.
  3. Перезапустите браузер и проверьте его (откройте в браузере следующую ссылку ). Теперь вы должны увидеть значения в раскрывающемся списке «Назначение аудиовыхода».

б) Safari (проверено на версии 14.1.2):

  1. Убедитесь, что вы видите вкладку «Разработка» в правом верхнем углу (если нет, включите ее « Safari> Настройки> Дополнительно », а затем установите флажок «Показать меню разработки в строке меню» внизу).
  2. Перейдите в « Разработка»> «Экспериментальные функции»> «Разрешить выбор устройства с громкоговорителями » и убедитесь, что установлен флажок « Разрешить выбор устройства с громкоговорителями ».
  3. Перезапустите браузер и протестируйте здесь https://webrtc.github.io/samples/src/content/devices/input-output/https://webrtc.github.io/samples/src/content/devices/input-output/

Если вы хотите проинформировать пользователя, у вас может быть что-то вроде ниже (псевдокод):

      ioDevices = await navigator.mediaDevices.enumerateDevices();
let outputDeviceSelectable = false;
for (let device: ioDevices) {
    if (device.kind == "audiooutput") {
        outputDeviceSelectable = true;
        break;
    }
}
if (outputDeviceSelectable == false) {
    show a pop up to the user to change the default settings
}
Другие вопросы по тегам