WebRTC:Firefox 未检测到任何输出设备

问题描述 投票:0回答:2

我尝试在 Ubuntu 16.04 上的 Mozilla Firefox v50.1.0 中运行此脚本来检测音频设备。 [1]

navigator.mediaDevices.enumerateDevices()
.then(function(devices) {
  devices.forEach(function(device) {
    console.log(device.kind + ": " + device.label +
                " id = " + device.deviceId);
  });
})
.catch(function(err) {
  console.log(err.name + ": " + err.message);
});

它仅检测输入设备,但不检测输出。适用于 Chrome 和 Opera,但不适用于 Firefox。

顺便说一句,我需要手动将页面的域添加到 Firefox 的 about:config 中的 media.getusermedia.screensharing.allowed_domains 中,以弹出窗口提示允许共享我的设备。为什么这是必要的?

javascript firefox output webrtc device
2个回答
7
投票
输出设备(扬声器)的

枚举选择在Firefox中尚未实现。

更新:从 Firefox 63 开始,该功能位于首选项后面。如果您在 about:config 中打开

media.setsinkid.enabled
,则输出设备将包含在 enumerateDevices 中,类似于 Chrome 的做法(需要麦克风权限)。

但是,要求麦克风权限才能访问扬声器从来没有多大意义。这是一种权限升级,有效地使该功能在网络会议之外毫无用处。

现有 API 还存在指纹识别(跟踪)问题,因为在 Chrome 中仅使用一次麦克风后,它就会向网站公开有关用户系统的持续信息。

由于这些原因,

Firefox 和 Safari 从未添加过

setSinkId
。最新版本的规范添加了 selectAudioOutput 来解决这些问题,并且很可能会实现

顺便说一句,我需要手动添加我的页面的域名...

在 Firefox 中共享摄像头和麦克风没有域白名单要求。从来不是。一旦实现,也不会有输出设备。

您提到的域白名单仅用于

屏幕共享,即桌面共享。即使这一要求在 Firefox 52 中也已被删除,并被警告所取代。

屏幕共享设备未用

enumerateDevices

 枚举,所以可能不是您想要的,但无论如何我都会说明原因:

白名单(现在是警告)的原因是在网络上共享浏览器窗口所固有的安全风险。简而言之,这种共享允许站点查看它从其他域调用的站点的像素,从而绕过跨源保护。恶意网站可能会利用它从您登录的其他网站弹出您的私人信息,有效地像您一样浏览并捕获结果,从而窃取您的私人数据。

您可以在

我的博客中阅读更多相关信息。


0
投票
以防万一这对某人仍然有用,我只是通过添加这一行来修复它

await navigator.mediaDevices.getUserMedia({audio: true, video: false})


以上

const mediaDevices: MediaDeviceInfo[] = await navMediaDevices.enumerateDevices()

.

就像这样:

await navigator.mediaDevices.getUserMedia({audio: true, video: false}); const mediaDevices: MediaDeviceInfo[] = await navMediaDevices.enumerateDevices(); console.log("mediaDevices:", mediaDevices)
    
© www.soinside.com 2019 - 2024. All rights reserved.