终于搞定android驱动USB摄像头了!

2023-11-07

多亏了stackoverflow看到的一篇帖子,其中有几句关键的话,然后顺藤摸瓜解决了问题。
帖子大意:
讨论的前提是你的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,运行,天啊终于出来了,高兴死了!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

终于搞定android驱动USB摄像头了! 的相关文章

随机推荐

  • 英伟达GPU 解码&编码 能力

    来源https en wikipedia org wiki Nvidia NVDEC
  • Zygisk-Il2CppDumper 使用Android Studio运行gradle任务:module:assembleRelease编译

    使用Android Studio运行gradle任务 module assembleRelease编译 zip包会生成在out文件夹下 记录一下编译过程 虽然直接在GIT网上进行编译成功了 但还是想自己通过Android Studio来进行
  • wxWidgets开发之多线程wxThread编程

    上节说到使用wxCondition来实现某一消息处理的业务场景的多线程处理方法 在此之前先分享一下wxCondition用法 条件变量 最常用在多线程环境下 用来指示当前所在线程的某些条件已经满足 其他线程可以共享该线程的数据 或者去完成预
  • angular学习-自定义组件

    angular学习 自定义组件 1 命令ng g整理 2 自定义组件创建 3 自定义组件的使用 1 命令ng g整理 这个帖子讲的非常清楚 可以看一下 https www cnblogs com ckAng p 6693702 html 2
  • VSCode中开发JavaWeb项目(Maven+Tomcat+热部署)

    1 安装插件 首先需要安装所用到的插件 分别用来支持Java 热部署和Tomcat服务器的插件 在插件市场中搜索Java 第一个就是Extension Pack for Java 内置了6个依赖插件 直接一键安装即可 然后是热部署插件 市场
  • 在Idea中使用Maven/Git

    Idea中配置第三方Maven settings gt build Execution Deployment gt Build Tools gt Maven 并且将自动导入也勾选上 Idea也可以使用自带的Maven插件使用默认的Maven
  • MATLAB——Matlab R2018b软件安装教程

    Matlab R2018b软件安装教程 1 选中 Matlab R2018b 压缩包 鼠标右击选择 解压到Matlab R2018b 2 双击打开 Matlab R2018b 文件夹 3 双击打开 R2018b win64 文件夹 4 选中
  • 测试开发——selenium1

    selenium1 1 什么是自动化测试 1 1 单元测试 1 2 接口测试 自动化的价值 脚本的复用率 复用率越高 价值越大 1 3 UI自动化 2 UI自动化的好处 3 自动化框架 4 webdriver的原理 5 selenium I
  • Android 入门(四)

    文章目录 Intent 显式 Intent 定义两个 xml 文件 android orientation match parent 和 wrap content Intent函数 定义两个 Activity 隐式 Intent 更多隐式
  • vim编辑器ctrl+s卡住假死

    在linux的vim编辑器编辑代码时 ctrl s会导致vim界面卡住 ctrl s在bash中是锁屏命令 通过ctrl q可解锁
  • 03【深度学习】YOLOV3-WIN11环境搭建(配置+训练)

    一 深度学习 YOLOV3 WIN11环境搭建 本篇文字是 深度学习 YOLOV5 WIN11环境搭建 配置 训练 首先介绍win11下 基于Anaconda pytorch的YOLOV5深度学习环境搭建 环境配置顺序 显卡驱动 CUDA
  • 十六进制转换成八进制

    问题描述 从键盘输入一个不超过8位的正的十六进制数字符串 将它转换为正的十进制数后输出 注 十六进制数中的10 15分别用大写的英文字母A B C D E F表示 样例输入 FFFF 样例输出 65535 include
  • C#中foreach的实现原理

    C 中foreach的实现原理 2017年04月01日 17 57 02 阅读数 3155更多 个人分类 C 在探讨foreach如何内部如何实现这个问题之前 我们需要理解两个C 里边的接口 IEnumerable 与 IEnumerato
  • 编程积木

    教育改革的路上一直倡导培养创新型人才 培养学生的综合素质 综合素质评价将客观记录学生的成长过程 评价内容主要包括 学生思想品德 学业水平 身心健康 艺术修养和社会实践等 格物斯坦小坦克认为这就是为什么越来越多的学校引入编程课程 机器人作为增
  • 【MySQL】 1171 错误

    MySQL 在一个表上同时创建多个索引 并且使用PRIMARY KEY 的列必须是一个具有NOT NULL 属性的列 比如 像我这样 主键有两个 seller id product type 就会报错 1171 因为 有primary ke
  • 毕业设计 - python选题汇总

    文章目录 一 python 毕设 选题推荐 二 选题注意事项 2 1 难度怎么把控 2 2 题目名称怎么取 三 开题指导 3 1 起因 3 2 如何避坑 重中之重 3 3 为什么这么说呢 四 最后 一 python 毕设 选题推荐 以下为学
  • 程序猿 MVC常规面试题

    1 阐述下MVC框架的机制 是如何工作的 M 模型 MVC需要提供的数据源 负责数据的访问和维护 V 视图 用于显示模型中数据的用户界面 C 控制器 用来处理用户的输入 负责改变模型的状态并选择适当的视图来显示模型的数据 2 ASP NET
  • day08-常用API

    1 API 1 1API概述 什么是API API Application Programming Interface 应用程序编程接口 java中的API 指的就是 JDK 中提供的各种功能的 Java类 这些类将底层的实现封装了起来 我
  • 操作系统雨课堂第一次测试

    线程能包含CPU现场 可以独立执行程序
  • 终于搞定android驱动USB摄像头了!

    多亏了stackoverflow看到的一篇帖子 其中有几句关键的话 然后顺藤摸瓜解决了问题 帖子大意 讨论的前提是你的USB摄像头是UVC兼容的 如今大部分摄像头兼容 默认Android不提供访问外部摄像头的API 所以你要考虑写一个内核到