在 Android 模拟器中连接实感摄像头的 USB 直通

问题描述

我想将 Intel Realsense 摄像头 (D455) 连接到我的 android 虚拟设备,在 android 模拟器上运行,以便我可以使用 Realsense 摄像头调试我的 android APP。

this page上,似乎最新的android studio emulator支持USB passthrough,所以我尝试了以下命令:

./emulator -avd Nexus_6P_API_29 -qemu -usb -device usb-host,vendorid=0x8086,productid=0x0b5c

其中-avd Nexus_6P_API_29指定android虚拟设备的名称vendoridproductidlsusb获取

模拟器给出以下错误信息(显示 3 次):

qemu-system-x86_64: Warning: speed mismatch trying to attach usb device "Intel(R) RealSense(TM) Depth Ca" ( speed) to bus "usb-bus.0",port "1" (full speed)

似乎模拟器确实找到了设备,但存在“速度不匹配”问题。我在 this page 上找到了对该问题的很好解释,说 usb-bus 对应于 USB 1.0。由于实感摄像头支持usb-3.2,我觉得我应该用usb-3.0,所以我尝试了以下方法

./emulator -avd Nexus_6P_API_29 -qemu -usb -device nec-usb-xhci,id=xhci -device usb-host,productid=0x0b5c

为 usb-3.0 指定 nec-usb-xhci

但是我收到的错误消息是:

qemu-system-x86_64: Warning: speed mismatch trying to attach usb device "Intel(R) RealSense(TM) Depth Ca" ( speed) to bus "xhci.0",port "1" (full+high+super speed)

我注意到,相机的速度显示(速度)。 (即实际速度,通常应为(全速)/(高速)/(超速)之一,为空白。) 我猜速度不匹配问题与这个空白速度有关。有没有人有类似的经历?提前致谢!

解决方法

只有 EHCI 已经内置在 AVD 的内核中。

我在 XDA 上写了一个小指南,里面有一些更深入的信息。

您可以阅读更多there

如果您的设备可以处理 EHCI,您可以尝试:

    -qemu -usb -device usb-ehci,id=ehci -device usb-host,bus=ehci.0,vendorid=0x8086,productid=0x0b5c

否则,请在启用 XHCI 的情况下重新编译内核。 也许其他一些步骤也是必要的。比如给android.hardware.usb.host添加权限

更新:22.03.2021 我认为这是(曾经)模拟器 qemu 的速度报告问题。现在使用仿真器版本 30.5.3,这个问题得到了解决,它适用于我所有的 UVC 标准相机,在 EHCI 和 XHCI 上。内置的 Face Time 摄像头也可用作 USB 连接设备。但是,只有来自 PlayStore 的两个应用程序能够向我展示这些镜头。 USB Camera - Connect EasyCap or USB WebCam 非常流畅和漂亮的镜头。 UVC Camera / Usb Camera with driver from userspace 与休抖动。