【问题标题】:Preview USB Webcamera on Android via ndk and V4L通过 ndk 和 V4L 在 Android 上预览 USB 网络摄像头
【发布时间】: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


    【解决方案1】:

    拥有 CAMERA 权限实际上并不意味着您属于任何特定的 Linux 用户组。这只是意味着您拥有 Android 操作系统权限检查的权限。

    一般来说,应用程序不能直接访问内核驱动程序接口。这是一个很大的安全问题,因为驱动程序通常没有针对恶意应用程序进行强化。

    目前唯一可以与无根设备一起使用的解决方案是 UVCCamera 项目或其他类似项目,它们在 Android 公共 USB API 之上构建了一个完整的 UVC 接口。

    此外,一些 Android 设备确实通过标准摄像头 API 支持网络摄像头,但这还不是基准 Android 中的一项功能。

    【讨论】:

    • 您好,我在使用 UVC 库时遇到了同样的问题,但是当我将 apk 发送给客户端然后他的相机没有显示任何内容时,它在我的设备上工作正常,请帮助..
    【解决方案2】:

    我来到这里是因为我得出了和你一样的结论。我没有进一步的建议可提供。这么多年过去了,你还有什么发现吗?

    我只能补充以下内容:

    • SELinux 进一步限制了对 /dev/videoX 文件描述符的访问。
    • android.permission.CAMERA 并没有像您认为的那样做。所有这些权限/功能设置,在清单中,都允许访问应用程序框架服务,与 Linux 组权限或 SELinux 无关。
    • Camera2 框架仅枚举前后摄像头,因此不适用于 USB 摄像头,至少不能开箱即用。
    • 虽然 Android 中存在 V4L2 驱动程序,但默认情况下没有“uvcvideo”驱动程序。您必须构建一个自定义内核。
    • 您指出的 UVCCamera 项目使用了 UsbManager(带有用户空间 uvc 解析器)。这就是它克服权限问题的方式。这似乎是唯一的方法,但这种实现很脆弱,并且似乎有批量模式的问题。

    很遗憾,我们不能只使用 V4L2 + uvcvideo 驱动程序。

    【讨论】:

    • 嗨。 afaik android 权限将应用程序的用户添加到某个 linux 组,并且应用程序继承了该组权限,但你是对的,我读过报告说,即使是添加正确组的自定义内核也不授予打开 /dev 的权限/视频X。 uvcvideo 驱动程序似乎存在于三星 Galaxy S5 上,如果使用 root 权限实现对 /dev/videoX 的访问(code.google.com/p/android/issues/detail?id=159529 除外),它工作得非常好。这就是我现在正在做的事情。
    猜你喜欢
    • 1970-01-01
    • 2011-10-06
    • 2011-11-24
    • 2013-12-12
    • 1970-01-01
    • 2012-08-16
    • 1970-01-01
    • 2012-09-21
    • 2021-02-20
    相关资源
    最近更新 更多