如何在无需允许浏览器麦克风权限的情况下从MediaDevices获取输出

时间:2019-04-19 17:54:02

标签: javascript web-audio-api mediadevices

我有一个页面,我需要使用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设备(嗯,我真的只想要输出设备)。

因此,就目前而言,我的用户必须设置其浏览器才能授予对麦克风的访问权限!!而且,一些用户对此很偏执。此外,在某些情况下,用户必须进入“站点设置”以授予麦克风访问权限,因为即使将浏览器配置为“询问”,当用户访问我的页面时,该弹出窗口也不总是“询问”(取决于浏览器和其他伏都教徒。

所以,这是我的问题:有什么方法可以只检索输出设备,从而使我的用户不必授予我的页面访问其麦克风的权限?谢谢!

注意:另一个问题:Sound analysis without getUserMedia非常相似,但是一年来没有收到一个有意义的答案(一个答案是“到处都是”)。我认为另一个问题范围更广,包含的细节太多,这使人们无法集中关注核心问题:如何仅选择输出设备

0 个答案:

没有答案