我有一个页面,我需要使用 JavaScript [或 jQuery] 快速将一些音频发送到扬声器(在课堂上被听到)和一些其他音频到蓝牙设备(给老师的消息)。我只想输出音频。我不需要访问任何输入:不是麦克风、网络摄像头,也不是任何有隐私问题的东西。我只想播放声音并同步到不同的设备。
目前,一切都很好,我可以使用 enumerateDevices 方法获取 MediaDevices [输入和输出] 的列表。这是一个javascript代码示例:
async function routeAudioOutput() {
const devices = await navigator.mediaDevices.enumerateDevices();
const audioDevices = devices.filter(device => device.kind === 'audiooutput');
audioDevices.forEach(function(element) {
console.log("ALL DEVICES: ");
console.log(element);
});
}
这将检索媒体设备列表,但它需要将浏览器配置为允许访问麦克风。等等:什么?!?!是的,如果您尝试在浏览器上运行上述代码,您可能不会获得设备标签,并且您将无法使用 audioDevices 向它们发送声音,例如,像这样:
async function playClassroomSoundAsync() {
var audio = new Audio('notification.wav');
var selectedSinkId = $('#soundDeviceDropdownlist').children("option:selected").val();
await audio.setSinkId(selectedSinkId).then(() => {
console.log("Success, audio output device attached, will play sound on deviceId="+selectedSinkId);
audio.play();
});
};
我的明显猜测是因为 enumerateDevices 返回 INPUT 和 OUTPUT 设备(嗯,我真的只想要输出设备)。
所以,现在,我的用户必须设置他们的浏览器来授予对他们麦克风的访问权限!一些用户对此感到偏执,这是理所当然的。此外,在某些情况下,用户必须转到“站点设置”才能授予麦克风访问权限,因为即使浏览器配置为“询问”,当用户访问我的页面时,该弹出窗口并不总是“询问”(取决于浏览器和其他巫术)。
所以,这是我的问题:有没有办法只检索输出设备,这样我的用户就不必授予我的页面访问他们的麦克风的权限?谢谢!!
注意:另一个问题:没有 getUserMedia的声音分析非常相似,但在一年多的时间里没有收到一个有意义的答案(一个答案是“到处都是”)。我认为另一个问题更广泛,包含太多细节,使人们从中心问题分心:如何仅选择输出设备