我正在尝试使用 Camera2 api 预览连接到 Android 手机的外部 ZED 立体摄像头。
https://www.stereolabs.com/zed/
这台相机符合 UVC 标准,当我将它连接到在虚拟盒上运行的 android oreo 8.0 vm 时,我已经能够预览它。
我正在使用谷歌示例项目https://github.com/googlesamples/android-Camera2Basic中的代码。CameraManager 类提供了一个 getCameraIdList() ,它应该返回连接到设备的所有摄像头的 ID,例如正面、背面或外部(在这种情况下,它应该是我的 ZED cam 或任何其他外部网络摄像头) 相机。
当我在虚拟盒子上运行示例时,外部摄像头似乎被检测为后置摄像头。
CameraCharacteristics characteristics
= manager.getCameraCharacteristics(cameraId);
Integer facing = characteristics.get(CameraCharacteristics.LENS_FACING);
String[] cameras = new String[] {"FRONT", "BACK", "EXTERNAL"};
Log.v(TAG, "Camera faces " + cameras[facing]);
外部 ZED 摄像头始终显示为后置摄像头。当我尝试在将 ZED cam 连接到 USB C 接口的 Android 手机上运行 apk 时,它根本没有检测到网络摄像头。
事实上,当摄像头连接时,我在手机上运行了USB Device Info应用程序,它显示为视频设备
然后我运行了应用程序Camera2 Api Probe,它使用手机上的 camera2 api 探测摄像头及其所有支持的特性,它只列出了我手机中的前置和后置摄像头。它没有列出外部摄像头。
我用三星 A7 (2017)、一加和荣耀都运行了 Andoird Oreo 8.0 进行了尝试。然后没有人可以列出外置摄像头,但所有这些都显示 USB 设备已连接,并且视频设备名称为 ZED。
我不知道他们为什么不出现。如何使用 camera2 api 获取外部摄像头列表?
我最初尝试使用 JNI 绑定到使用 libuvc 的本机代码的项目,例如这个。但是帧速率似乎太慢了。但现在我专注于使用 camera2 api 获取预览。
仅供参考:我怀疑相机可能没有收到足够的电量。因此,我使用Tracend USB 3.0 集线器连接了相机,该集线器带有可以为连接的 USB 设备供电的外部电源。结果是一样的。
需要明确的是,在使用 vbox 模拟器时,外部设备被列为后置摄像头。使用 Genymotion 时,我必须使用它的相机小部件将连接的 ZED cam 设置为后置或前置摄像头,然后它会列出。