【发布时间】:2016-08-04 18:34:44
【问题描述】:
我正在尝试从 Android ndk 访问 USB 网络摄像头。
Android 系统有 V4L 内核模块,所以我认为最好使用 V4L 库。它们捆绑在 ndk 中,因此将它们包含到我的项目中并不是什么大问题。
我的问题如下:
我需要打开 /dev/video4 并将 ioctl 发送到该文件描述符,但我没有访问 /dev/video4 的权限。我想到了三件事:
1) 为什么我缺少 /dev/video4 的权限?我的app使用了android.permission.CAMERA权限,所以运行app的用户应该在camera组,camera组对/dev/video4有r+w权限,为什么打不开呢?
2) 我试图从 java 端获取文件描述符,这可以通过 UsbManager 类来实现,但是文件描述符指向 /dev/bus/usb/001/004。有没有办法从 Java 端请求 /dev/video4 的权限?或者我可以包含一个用户空间 V4L 库并将指针传递给 /dev/bus/usb/001/004 中的通用 USB 设备吗?
3) OpenCV 的android 版本是否支持V4L?可以不用访问/dev/video4就可以预览摄像头吗?
以前有人试过这样的吗?
另外,我知道有一些库使用 libusb 和 libuvc 来连接相机(例如 https://github.com/saki4510t/UVCCamera),但是这个库非常不稳定并且不能提供令人满意的结果。
【问题讨论】:
标签: android opencv android-ndk v4l uvc