从本机代码读取Android摄像头设备,无需root

从本机代码读取Android摄像头设备,无需root,android,permissions,camera,v4l2,Android,Permissions,Camera,V4l2,我正在开发一个Android应用程序,该应用程序使用/dev/videoN中的Video for Linux 2 API获取相机帧,其中N是从0开始的整数,例如/dev/video1、/dev/video2等。出于性能原因,我在C/C++中这样做;我无法在Java中进行足够快的相机帧处理。我遇到的问题是,默认情况下,/dev/viden设备具有所有者和组只读/写的Unix文件权限,因此我需要这样做 chmoda+rxw/dev/video1 允许我的程序能够读取/dev/video1。这仅在根设

我正在开发一个Android应用程序,该应用程序使用/dev/videoN中的Video for Linux 2 API获取相机帧,其中N是从0开始的整数,例如/dev/video1、/dev/video2等。出于性能原因,我在C/C++中这样做;我无法在Java中进行足够快的相机帧处理。我遇到的问题是,默认情况下,/dev/viden设备具有所有者和组只读/写的Unix文件权限,因此我需要这样做

chmoda+rxw/dev/video1

允许我的程序能够读取/dev/video1。这仅在根设备上可行

有没有办法允许本机代码在非根安卓设备上访问/dev/videoN?我试图给我的应用程序安卓权限来访问摄像头硬件(在AndroidManifest.xml中),但在这种情况下没有效果,默认情况下,我仍然没有Unix权限读取/dev/videoN


(在运行Android 4.4的Nexus 7上,/dev/videoN属于Unix组“camera”,但默认情况下,具有camera权限的应用程序似乎不在该组中)

我认为您需要JNI胶水才能通过java代码访问camera。您可以使用本机代码进行帧处理。

我试图避免JNI开销,因为相机帧速率对这种开销很敏感。您是否能够解决此问题?从本机代码访问设备?