【发布时间】:2014-07-31 09:18:48
【问题描述】:
我目前正在为 Android nexus 5 手机编写应用程序。该应用程序使用本机运行的 gstreamer 来访问已插入设备的 USB 网络摄像头。为了访问网络摄像头,我需要网络摄像头的设备节点位置。通常它是 /dev/video3 但有时它会改变值,即 /dev/video4
目前我必须手动设置设备节点位置才能使其正常工作。我希望使该过程自动化。特别是考虑到用户可以断开并重新连接网络摄像头的情况。
到目前为止,我可以从 Java 中确定 vendorID、productID,然后使用 JNI 将此信息传递给我的 C 代码。
我使用以下方法检测 USB 设备信息:
if (UsbManager.ACTION_USB_DEVICE_ATTACHED.equals(action))
{
deviceFound = (UsbDevice)intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
Log.i("TAG", "USB DEVICE ATTACHED");
deviceFound.getDeviceName();
deviceFound.getVendorId();
deviceFound.getProductId();
}
getDeviceName 返回一个包含“/dev/bus/usb/001/002”的字符串。如果我尝试使用它使用 gstreamer 访问我的网络摄像头,我会收到以下错误“获取设备'/dev/bus/usb/001/002'的功能时出错:它不是 v4l2 驱动程序”
我假设 /dev/bus/usb/002/001 在这种情况下与 /dev/video3 不太一样。几个问题:
1) 我可以使用 /dev/bus/usb/001/002 获取正确的设备节点,即 /dev/video3 吗?
2) 有没有办法以编程方式在给定 USB 设备的供应商和产品标识符的情况下直接获取设备节点 (/dev/video*)?
谢谢。
【问题讨论】:
标签: android java-native-interface usb webcam gstreamer