我正在开发使用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字段也将返回一个空列表。
答案 0 :(得分:1)
我已针对Chromium提交了issue 980281,以解决设备过滤问题。
如评论所述,将很难直接控制UVC摄像机,因为操作系统通常要求这些设备带有内核驱动程序,从而阻止Web浏览器。 Blink还明确禁止访问此类设备,作为安全/隐私措施,有利于使用Web平台媒体API。问题的作者正在寻找控制对比度和曝光等参数的能力。 extensions支持这些功能,以供Image Capture API中包含的媒体轨道可约束属性使用。但是,并非所有平台上的浏览器都支持所有这些功能。例如,Chromium在macOS上不支持很多限制,因为它受到可以通过AVFoundation控制的内容的约束。 issue 817805在Chromium错误跟踪器中对此进行了跟踪。