终于搞定android驱动USB摄像头了!
2016-02-29 11:30
691 查看
2014-01-14 18:15 13642人阅读 评论(72) 收藏 举报
分类:
android(18)
多亏了stackoverflow看到的一篇帖子,其中有几句关键的话,然后顺藤摸瓜解决了问题。
V4L2_PIX_FMT_H264
帖子大意:
讨论的前提是你的USB摄像头是UVC兼容的(如今大部分摄像头兼容)
默认Android不提供访问外部摄像头的API,所以你要考虑写一个内核到Android应用层通信的中间件。
当你给设备接入了USB摄像头,首先要检查一下几点:
1)你的设备是否支持USB-OTG?
2)是否在/dev目录创建了设备?如果创建了就那么一切就很简单了。shell 执行 ls -l /dev/v*,你将会看到video0或者video1。
3)如果/dev没有创建设备,你需要写一个固件(UVC)跟硬件通信!
(帖子地址:http://stackoverflow.com/questio ... android-application)
读到这里,再次给我的MK802接上USB摄像头,然后打开adb shell,执行ls -l /dev/v*,看到了 /dev/video0设备!
拔掉摄像头,再执行,video0消失,再连接,video0出现,这说明mk802支持我的摄像头!
到此,已经明确,下一步我需要写一个android应用层到内核通信的中间件,我对这个也不了解,于是在google狂搜“android usb camera”
终于功夫不负有心,找到了一个android usb摄像头的应用例子
http://brain.cc.kogakuin.ac.jp/research/usb-e.html
从中找了一个SimpleWebCamra.apk,下载了赶紧装上,发现不能运行,logcat报一个错,提示没有权限访问video0设备。
这是为什么?我的系统已经root了呀!难道我的apk也要获得root权限?又在网上查资料,试了半天,还是不行。
后来忽然灵机一动,android也是linux呀,我能不能把video0设备设置成没权限?问了问朋友,执行了一个命令:
chmod 777 /dev/video0
再次运行apk终于跑起来了!(后来经测试,设置成 chmod 0666 /dev/vidoe0 也可以,但是我也不懂0666的含义。。)
但是问题又来了,程序进去以后,报错
VIDIOC_DQBUF error 22, Invalid argument
于是想,必须要活的SimpleWebCamea的源码了!经过苦苦搜索,很幸运的找到一个simplewebcam的源码:
https://bitbucket.org/neuralassembly/simplewebcam/src
下载一看,里边包含ndk的c源码和android源码,于是按照ndk教程,安装了cygwin
苦于c代码看不太懂,错误提示VIDIOC_DQBUF 调用参数错误,却无从下手。
于是看了n篇教程,偶然发现说打开摄像头设备的open方法的一些参数,然后试着把c代码中的一些参数去掉:
fd = open (dev_name, O_RDWR | O_NONBLOCK, 0);
改为
fd = open (dev_name, O_RDWR);
再次build,运行,天啊终于出来了,高兴死了!
分类:
android(18)
多亏了stackoverflow看到的一篇帖子,其中有几句关键的话,然后顺藤摸瓜解决了问题。
V4L2_PIX_FMT_H264
帖子大意:
讨论的前提是你的USB摄像头是UVC兼容的(如今大部分摄像头兼容)
默认Android不提供访问外部摄像头的API,所以你要考虑写一个内核到Android应用层通信的中间件。
当你给设备接入了USB摄像头,首先要检查一下几点:
1)你的设备是否支持USB-OTG?
2)是否在/dev目录创建了设备?如果创建了就那么一切就很简单了。shell 执行 ls -l /dev/v*,你将会看到video0或者video1。
3)如果/dev没有创建设备,你需要写一个固件(UVC)跟硬件通信!
(帖子地址:http://stackoverflow.com/questio ... android-application)
读到这里,再次给我的MK802接上USB摄像头,然后打开adb shell,执行ls -l /dev/v*,看到了 /dev/video0设备!
拔掉摄像头,再执行,video0消失,再连接,video0出现,这说明mk802支持我的摄像头!
到此,已经明确,下一步我需要写一个android应用层到内核通信的中间件,我对这个也不了解,于是在google狂搜“android usb camera”
终于功夫不负有心,找到了一个android usb摄像头的应用例子
http://brain.cc.kogakuin.ac.jp/research/usb-e.html
从中找了一个SimpleWebCamra.apk,下载了赶紧装上,发现不能运行,logcat报一个错,提示没有权限访问video0设备。
这是为什么?我的系统已经root了呀!难道我的apk也要获得root权限?又在网上查资料,试了半天,还是不行。
后来忽然灵机一动,android也是linux呀,我能不能把video0设备设置成没权限?问了问朋友,执行了一个命令:
chmod 777 /dev/video0
再次运行apk终于跑起来了!(后来经测试,设置成 chmod 0666 /dev/vidoe0 也可以,但是我也不懂0666的含义。。)
但是问题又来了,程序进去以后,报错
VIDIOC_DQBUF error 22, Invalid argument
于是想,必须要活的SimpleWebCamea的源码了!经过苦苦搜索,很幸运的找到一个simplewebcam的源码:
https://bitbucket.org/neuralassembly/simplewebcam/src
下载一看,里边包含ndk的c源码和android源码,于是按照ndk教程,安装了cygwin
苦于c代码看不太懂,错误提示VIDIOC_DQBUF 调用参数错误,却无从下手。
于是看了n篇教程,偶然发现说打开摄像头设备的open方法的一些参数,然后试着把c代码中的一些参数去掉:
fd = open (dev_name, O_RDWR | O_NONBLOCK, 0);
改为
fd = open (dev_name, O_RDWR);
再次build,运行,天啊终于出来了,高兴死了!
相关文章推荐
- 带着问题学习Android中View的layout布局和draw绘制
- Android使用BitmapFactory.Options解决加载大图片内存溢出问题
- Android GPS
- android.text.TextWatcher
- Android ScrollView向上滑动控件顶部悬浮效果实现
- 如何让android studio在运行时自带签名
- Android Studio使用Gradle上传到jCenter
- 4.18.2 android实现断点续传
- Android-spinner
- Android管理与操作Wifi简单实例源码
- Android.mk具体解释
- Android— AndroidStudio如何给log添加过滤项(Filters
- android图片压缩总结
- ZZAndroid客户端性能优化----魅族资深工程师毫无保留奉献
- android 之自定义属性1
- android学习之LinearLayout
- Android:设置背景色以及theme(主题)设置(一)
- Android Surface相关常见问题
- 初学Android,图形图像之使用Bitmap和BitmapFactory(二十四)
- Android开发之机顶盒上gridview和ScrollView的使用详解