【问题标题】:WebUSB filter by deviceClass and deviceSubClassWebUSB 按 deviceClass 和 deviceSubClass 过滤
【发布时间】:2019-07-02 02:47:06
【问题描述】:

我正在开发一个使用 WebUSB 的 UVC 实用程序,但我无法让它仅列出网络摄像头。我应该能够添加基于 deviceClass 和 deviceSubClass 的过滤器,但它返回一个空列表。

这是一个网络摄像头设备...

0: USBDevice
configuration: USBConfiguration {configurationName: null, configurationValue: 1, interfaces: Array(5)}
configurations: [USBConfiguration]
deviceClass: 239
deviceProtocol: 1
deviceSubclass: 2
deviceVersionMajor: 1
deviceVersionMinor: 1
deviceVersionSubminor: 3
manufacturerName: "Microsoft"
opened: false
productId: 1906
productName: "Microsoft® LifeCam Studio(TM)"
serialNumber: ""
usbVersionMajor: 2
usbVersionMinor: 0
usbVersionSubminor: 0
vendorId: 1118

您可以看到 deviceClass 是 239 (0xEF),而 deviceSubClass 是 2,所以我应该能够根据这些条件进行过滤,但我没有得到任何结果。

https://www.xmos.com/download/AN00127:-USB-Video-Class-Device(2.0.2rc1).pdf

对于视频类设备,必须设置‘bDeviceClass’、‘bDeviceSubClass’和‘bDeviceProtocol’ 字段分别为 0xEF、0x02 和 0x01。

const opts = {
  filters: [{
    classCode: 239, // 0xEF
    subclassCode: 2, // 0x02
  }]
}
const device = await navigator.usb.requestDevice(opts)

没有过滤器,我可以看到所有的 USB 设备

我也尝试过添加protocolCode,但这也不起作用,我认为没有必要。即使只传递 classCode 字段也会返回一个空列表。

WebUSB API spec

【问题讨论】:

  • 您在哪个平台上运行?您会发现,在大多数平台上,操作系统会阻止浏览器直接声明 UVC USB 接口,因为默认类驱动程序已经声明了它。访问 chrome://usb-internals 查看浏览器检测到的设备类代码。
  • 我在 Chrome / MacOS 上。如果我不指定过滤器,我可以获得设备,但这不是一个理想的 UX 流程,因为出现了所有其他 USB 垃圾。类代码和子类代码与 chrome://usb-internals 上的信息匹配
  • 这是一个愚蠢的差事。 Chrome 阻止通过 USB 访问网络摄像头...stackoverflow.com/questions/54289929/…
  • 这是真的(很抱歉在我之前的问题中没有提到这一点)但是作为 WebUSB 规范的编辑和 Chrome 中实现的作者,我想知道你想要什么用例将此相机与 WebUSB 一起使用。也许有一个现有的 Web API(或对其进行改进)可以实现您所寻找的。​​span>
  • 我只想控制相机设置,例如对比、曝光等。有一个 Vaporware Web API (developer.mozilla.org/en-US/docs/Web/API/MediaDevices/…),我多年来一直在尝试使用,但我认为实现速度很慢,所以我试图通过 USB/UVC 访问这些东西。跨度>

标签: javascript webusb


【解决方案1】:

我已向 Chromium 提交 issue 980281 以解决设备过滤问题。

正如 cmets 中所讨论的,很难直接控制 UVC 相机,因为操作系统通常要求这些设备带有内核驱动程序,从而阻止 Web 浏览器。 Blink 还明确阻止对此类设备的访问,作为一种安全/隐私措施,有利于使用网络平台媒体 API。

问题的作者正在寻找控制对比度和曝光等参数的能力。 extensions 支持图像捕获 API 中包含的媒体轨道可约束属性。但是,并非所有平台上的浏览器都支持所有这些功能。例如,Chromium 不支持 macOS 上的许多约束,因为它受到可以通过 AVFoundation 控制的内容的约束。这由 Chromium 错误跟踪器中的 issue 817805 跟踪。

【讨论】:

猜你喜欢
  • 2018-07-31
  • 1970-01-01
  • 2023-03-14
  • 1970-01-01
  • 1970-01-01
  • 2016-04-15
  • 1970-01-01
  • 1970-01-01
  • 2014-02-12
相关资源
最近更新 更多