有一段时间没更新了。。。深表遗憾啊!最近接手了一个新的项目,基本上都是从头开始写源代码,所以进度慢效率也一般。新项目的第一个模块就是关于usb采集视频数据的,目前基本完成了对本模块的代码编写。在此总结一下心路历程(默认你对ndk linux命令 和 jni有一定的认识)。
http://blog.youkuaiyun.com/mirkerson/article/details/50764314#reply 这个是我刚接触usb相机对我有极大帮助的文章,里面也有相应的源码。对相机的操作是通过底层的C实现的,ndk-build编译成库,Android通过jni进行调用,主要说一下在此期间遇到的一些问题吧
1 .怎么跑起来的?
下载好的源码是在Android Studiod上面的运行的,本人习惯了eclipse所以直接将代码改成了自己需要的(看个人的习惯),同时 我连接设备是通过无线的方式(这么高大上你竟然不知道。。。),保证电脑和设备在同一个网段,在电脑cmd下运行 adb connect 设备的IP 回车即可(期间出现过一个问题 死后连不上 后来是你的设备开发者选项开了吗?) 连接成功之后 cmd下接着运行 adb shell 回车进入设备 ,接着执行cd /dev 到dev目录下执行ls -l 插上相机会出现videoX(X代表一个数字,如果前面有一个类似的设备那么X就是1,这个数字很重要,因为它代表的是哪一个相机),usb相机作为一种即插即用的设备,需要赋予权限的。如果直接运行程序,安装什么的都是顺利的,会报一个 Permit…什么的错误,熟悉linux系统的应该知道是权限问题,所以在命令行执行 chmod 777 /dev/videoX 就可以了。
如果报一个busy什么的,应该是你选择的相机资源被占用了,你应该选择你信插上的相机,根据刚才的相机数字修改代码CameraPreview里面的private int cameraId=X; 现在应该是可以跑起来的(可能我运气好吧,手上的相机支持 V4L2_PIX_FMT_YUYV格式吧),如果还是无法运行,报一个VIDIOC_S_FMT的错误,接着往下看吧。。。
2 .相机的格式支持
接下来的操作涉及的是底层c和ndk-build这块(java代码少 ,我也没有遇到java这块的问题)。出现上述的问题是因为c代码写好了支持的帧格式是 V4L2_PIX_FMT_YUYV ,而你的相机刚好不支持,所以会报错。c里面的那些函数不懂的话可以自行百度,网上有人说的很清楚。解决这个问题首先需要了解你的相机支持什