更多课程 选择中心

嵌入式培训
美国上市教育机构

400-111-8989

嵌入式培训

嵌入式er日常系列!终于搞定android驱动USB摄像头了!

  • 发布:嵌入式ARM
  • 来源:嵌入式ARM
  • 时间:2017-11-30 15:51

感谢网上的大神分享经验,终于解决了让我头疼好久的USB摄像头问题,讨论的前提是你的USB摄像头是UVC兼容的(如今大部分摄像头兼容)。

默认Android不提供访问外部摄像头的API,所以你要考虑写一个内核到Android应用层通信的中间件。

当你给设备接入了USB摄像头,首先要检查一下几点:

1)你的设备是否支持USB-OTG?

2)是否在/dev目录创建了设备?如果创建了就那么一切就很简单了。shell 执行 ls -l /dev/v*,你将会看到video0或者video1。

3)如果/dev没有创建设备,你需要写一个固件(UVC)跟硬件通信!

看到这里,再次给我的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,运行,天啊终于出来了,高兴死了!

本文内容转载自网络,本着分享与传播的原则,版权归原作者所有,如有侵权请联系我们进行删除!

预约申请免费试听课

填写下面表单即可预约申请免费试听!怕钱不够?可就业挣钱后再付学费! 怕学不会?助教全程陪读,随时解惑!担心就业?一地学习,可全国推荐就业!

上一篇:【嵌入式】Ubuntu的安装 教程
下一篇:嵌入式开发:NFC就在你身边

嵌入式和单片机的区别在哪?

嵌入式Linux底层系统怎么学?

ARM常用概念有哪些?

优化嵌入式软件的七个技巧

选择城市和中心
黑龙江省

吉林省

河北省

湖南省

贵州省

云南省

广西省

海南省