node.js - Electron 禁用特定的摄像头设备访问或设置默认网络摄像头

标签 node.js camera device electron

我们正在使用 atom electron 在“kiosk”类型设置中运行应用程序,我们有 4 个网络摄像头设备连接到物理计算机,我们特别希望其中 1 个用于 electron 浏览器内部的 webrtc,然后是其他3 我们使用一些 C 代码来捕获静止帧。我们知道所需设备的 USB 路径或/dev/video{#}。

有没有办法在我们启动 Electron 窗口之前禁止 View 层访问 Node 中的 3 个网络摄像头?或者另一种选择是在我们启动 View 层之前设置默认摄像头,以便它默认为我们想要的网络摄像头。

在 View 层我们可以获取设备列表并查看它们是音频还是视频,但是我们无法获取它们的/dev/video# 或它们的 USB 路径来确定哪个是目标 webrtc cam,所以这还不是很有帮助。

任何帮助都很棒,我觉得不得不发布问题很奇怪,因为在过去的 12 年里,我一直能够通过搜索找到我需要的东西,但现在已经过了大约 3 个小时,所以是时候寻求帮助了。

最佳答案

我不认为 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)
);

关于node.js - Electron 禁用特定的摄像头设备访问或设置默认网络摄像头,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38532709/

相关文章:

android - 如何检测硬件键盘的存在?

node.js - 如何使用 node/adonis 替换查询中的值?

node.js - 将样式/类添加到 react-datepicker

node.js - Kubernetes + Azure + 环境变量

android - 在表面 View 中授予权限后相机未打开

iphone - 设置使用 iPhone 相机捕获的图像类型

ios - 在条形码扫描仪应用程序 (Swift 3) 中的相机 View 上添加对象

linux - 给定一个 block 设备文件,我如何列出所有相关部分?

Android Studio 看不到设备

node.js - 如何将 NPM 包迁移到组织 @scope