音频输出设备阵列在 safari 上的长度为 0
Audio Output Device Array is of length 0 on safari
我正在开发一个利用 Amazon Chime 的视频会议应用程序。我关注了 Amazon Chime SDK JS 的 npm 页面并设法获得服务器响应并初始化了 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
数组的长度为零
在 Safari 中,而在其他浏览器中它不为零。
根据 Amazon Chime SDK FAQ,这是一个已知问题:Firefox 和 Safari 存在不允许它们在这些浏览器上列出音频输出设备的已知问题。虽然客户可以使用默认设备继续会议,但他们将无法在会议中使用 select 设备。
output/speaker 设备选择在 Firefox 和 Safari 中默认未启用。所以你必须更改默认设置:
以下步骤已在 macOS Catalina (v: 10.15.7) 上测试
a) Firefox: 这个问题在这里讨论: https://github.com/bigbluebutton/bigbluebutton/issues/12471
- 在url栏中输入about:config
- 在搜索栏中搜索 属性 media.setsinkid.enabled 并将其设置为 true
- 重新启动浏览器并测试(在浏览器https://webrtc.github.io/samples/src/content/devices/input-output/中打开以下link)。您现在应该会在 Audio Output Destination
的下拉列表中看到值
b) Safari(测试版本:14.1.2):
- 确保您在右上角看到“开发”选项卡(如果没有,则启用它“Safari > 首选项 > 高级”,然后选中“在菜单栏中显示开发菜单”在底部)
- 导航至“开发 > 实验性功能 > 允许扬声器设备选择”并确保选中“允许扬声器设备选择”
- 重新启动浏览器并在此处测试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
}
我正在开发一个利用 Amazon Chime 的视频会议应用程序。我关注了 Amazon Chime SDK JS 的 npm 页面并设法获得服务器响应并初始化了 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
数组的长度为零
在 Safari 中,而在其他浏览器中它不为零。
根据 Amazon Chime SDK FAQ,这是一个已知问题:Firefox 和 Safari 存在不允许它们在这些浏览器上列出音频输出设备的已知问题。虽然客户可以使用默认设备继续会议,但他们将无法在会议中使用 select 设备。
output/speaker 设备选择在 Firefox 和 Safari 中默认未启用。所以你必须更改默认设置:
以下步骤已在 macOS Catalina (v: 10.15.7) 上测试
a) Firefox: 这个问题在这里讨论: https://github.com/bigbluebutton/bigbluebutton/issues/12471
- 在url栏中输入about:config
- 在搜索栏中搜索 属性 media.setsinkid.enabled 并将其设置为 true
- 重新启动浏览器并测试(在浏览器https://webrtc.github.io/samples/src/content/devices/input-output/中打开以下link)。您现在应该会在 Audio Output Destination 的下拉列表中看到值
b) Safari(测试版本:14.1.2):
- 确保您在右上角看到“开发”选项卡(如果没有,则启用它“Safari > 首选项 > 高级”,然后选中“在菜单栏中显示开发菜单”在底部)
- 导航至“开发 > 实验性功能 > 允许扬声器设备选择”并确保选中“允许扬声器设备选择”
- 重新启动浏览器并在此处测试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
}