问题描述
我一直在使用 PyUSB 和 libusb 来处理我的 USB 设备。在底层,PyUSB 使用 libusb-1.0.24.dylib
访问所有 USB 设备。这很好用,但我在使用它来查看我的网络摄像头时遇到了问题。事实上,我什至无法为我的网络摄像头获取 USB 描述符,这让我感到惊讶。
我有一台配备 T2 芯片的 Macbook Pro 2019。当我在系统信息中查找我的 USB 设备时,我知道所有内部 USB 设备似乎都在 T2 芯片后面:
深入研究 ioreg
命令,我可以清楚地看到这些设备是 USB 并且是可见的:
% ioreg -c IoUSBDevice -r
[...]
+-o FaceTime HD Camera (Built-in)@80200000 <class AppleUSBDevice,id 0x1000005$
| {
| "kUSBSerialNumberString" = "CC2948501XLHNW1BM"
| "bDeviceClass" = 239
| "bDeviceSubClass" = 2
| "iSerialNumber" = 3
当我尝试使用 PyUSB 获取我的 USB 设备列表时,它似乎无法识别 T2 芯片上的任何内容:
import usb.core
import usb.util
for bus in usb.busses():
for device in bus.devices:
if device != None:
usbDevice = usb.core.find(idvendor=device.idvendor,idProduct=device.idProduct)
print(usbDevice)
因此我得到了一些设备:我看到一些位于 T2 芯片后面的 HID 设备,但没有看到我的网络摄像头。同样,我使用了 py-libusb 中的示例代码,它也不会从 T2 芯片返回任何内容,除了 HID 设备。
我不认为 T2 芯片挡住了摄像头:首先 OpenCV2 找到我的网络摄像头没有问题,如果我使用 Parallels Desktop 并将摄像头分配给 Windows,我可以在 Windows 上运行 PyUSB 代码和查看我的网络摄像头 USB 描述符。所以看起来这真的是mac和T2芯片上的libusb。
我尝试请求我的相机的确切 idvendor 和 idProduct,但仍然没有返回。我尝试使用 print(usb.busses())
进行挖掘,但除了某个位置外,我找不到任何地方都很空。
我知道网络摄像头是由系统提供的 UVC 驱动程序拍摄的,我不需要自己编程,但这不是重点。谁能告诉我这是怎么回事:为什么我看不到 USB 描述符?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)