我们正在使用原子电子在“自助服务终端”类型设置中运行应用程序,我们有4个网络摄像头设备连接到物理计算机,我们特别需要其中1个用于电子浏览器内部的webrtc,然后其他3我们使用一些C代码来捕获静止帧。我们知道我们想要的设备的USB路径或/ dev / video {#}。
在我们启动电子窗口之前,是否有办法禁止视图层访问节点中的3个网络摄像头?或者另一种选择是在我们启动视图图层之前设置默认摄像头,以便它默认为我们想要的网络摄像头。
在视图层中,我们可以获取设备列表并查看它们是音频还是视频,但我们无法获取其/ dev / video#或其USB路径来确定哪个是目标webrtc cam,所以这还不是很有帮助。
任何帮助都很棒,因为在过去的12年里我能够通过搜索找到我需要的东西,所以我觉得很奇怪。但是它已经花了大约3个小时的时间来寻求帮助。 / p>
答案 0 :(得分:2)
我不认为Chromium提供了一种检索媒体源USB路径的方法。您可能需要显示配置屏幕以允许用户第一次选择正确的摄像头(类似于此demo),然后使用源/设备ID作为此点的强制约束上。
另一种选择是根据设备标签找到正确的相机,但显然只有每个相机都有不同的标签才能使用。您可以通过在DevTools控制台中运行此代码段来获取所有设备标签和ID:
navigator.mediaDevices.enumerateDevices()
.then(devices => devices.forEach(
device => console.log(`kind: ${device.kind}: ${device.label} id=${device.deviceId}`)
))
.catch(err => console.log(err));
无论哪种方式,只要您拥有源/设备ID,就可以将其指定为强制约束,以确保只使用一个特定的摄像头:
navigator.webkitGetUserMedia(
{
audio: false,
video: {
mandatory: {
chromeMediaSourceId: 'the camera source id obtained earlier',
}
}
},
stream => console.dir(stream),
error => console.log(error)
);