安卓 USB摄像头 开源库 UVCCamera 教程
https://github.com/saki4510t/UVCCamera
UVCCamera 听名字就知道使用UVC( USB VEDIO CLASS) 协议的通用类库。linux原生支持,基本支持市面上所有免区USB摄像头。
此开源库包含JNI及android封装的类库。是目前最好用的安卓USB摄像头类库。
UVCCamera来控制、管理与外接设备的连接,
UVCCamera.setFrameCallback(final IFrameCallback callback, final int pixelFormat)获取每一帧数据;
PIXEL_FORMAT_RAW = 0;
PIXEL_FORMAT_YUV = 1;
PIXEL_FORMAT_RGB565 = 2;
PIXEL_FORMAT_RGBX = 3;
PIXEL_FORMAT_YUV420SP = 4;
PIXEL_FORMAT_NV21 = 5;
UVCCameraTextureView控件进行图像的预览,
USBMonitor进行驱动的连接和断开
UVCCamera Test4 类的耦合性很差
Test4是在后台服务中操作摄像头,而后台服务与前台进程不是同一个进程名,所以通过aidl进行service的ibinder对象的定义,并通过aidl定义的接口,生产的ibinder对象来操作后台服务。而摄像头的操作又不直接在service中操作,service负责侦测USB的链接情况,在usb连接到设备后台,创建一个handler(cameraserver)来操作摄像头。
要增加一个摄像头的操作,要叠层好几层才能封装完毕。类与类之间的依赖很严重!!!觉得作者设计的有问题。为了增加一个摄像头操作,我一共要花8个步骤才能添加完整。
1.在CameraServer—>CameraThread 添加相关操作
注意:操作摄像头的实际的操作是CameraServer(handler类)-->CameraThread(类)。
互相引用关系:CameraServer的实例通过弱引用WeakReference引用期内部类CameraThread的实例;CaeraThread通过强引用即直接引用的方式引用其外部内CameraServer实例
2.在CameraServer(handler)类里添加handler处理,通过handler发送Message,调用CameraServer-->CameraThread类中的操作
1)在CameraServer类中添加发送Message时的MessageType常量
2)在CameraServer#handleMessage()方法里添加处理增加的MeassageType常量的处理方式,类似thread.xxxx()
3)添加相关操作方法,用于封装对应MeassageType常量,CameraServer#handleMessage()的方法。
3.在IUVCService.aidl中添加相关方法声明
注意:IUVCSerice.aidl定义的接口就是UVCService反馈的ibinder,因为服务于前台UI的进程名不一样,所以用AIDL定义的接口,引用UVCService的ibinder对象。用于客户端Cameraclient访问。
4.UVCService#mUSBMonitorUVCService#mBasicBinder4.在UVCService中对UVCService#mBasicBinder匿名类实例,overrid实现IUVCService.aidl中添加的方法声明。
注意:UVCService是控制USB设备的后台服务,通过UVCService#mUSBMonitor监控USB设备,UVCService#mOnDeviceConnectListener(UVCService#mUSBMonitor的回调)#onConnect()时初始化一个CameraServer实例并塞入UVCService#sCameraServers集合中。UVCService#mUSBMonitor所有所有操作都在UVCService主线程上。UVCService#sCameraServers#CameraServer是真正操作USB摄像头的Handler类,而客户端CameraCilent通过UVCService#mBasicBinder调用UVCService#sCameraServers#CameraServer,从而调用UVCService#sCameraServers#CameraServer#CameraThread操作摄像头.
5.在CameraClient#CameraHandler(handler类,CameraClient的静态内部类)#CameraTask(Thread类,CameraClient#CameraHandler的静态内部类)中添加调用IUVCSerice.aidl添加方法的方法。
注意:CameraClinet是对应前台UI的操作后台服务的类,CameraClient通过handler类发送message的方式让线程类CameraTask实际操作后台服务。
6.在CameraClient中添加对应操作服务的MessageType常量
7.在CameraClient#CameraHandler(handler类,CameraClient的静态内部类)#handleMessage()方法中添加处理CameraClient#MessageType常量的代码
8.在View中添加操作cameraClinet的相关代码
安卓 USB摄像头 开源库 UVCCamera 教程的更多相关文章
- 视觉slam十四讲开源库安装教程
目录 前言 1.Eigen线性代数库的安装 2.Sophus李代数库的安装 3.OpenCV计算机视觉库的安装 4.PCL点云库的安装 5.Ceres非线性优化库的安装 6.G2O图优化库的安装 7. ...
- 【开源框架】Android之史上最全最简单最有用的第三方开源库收集整理,有助于快速开发,欢迎各位网友补充完善
链接地址:http://www.tuicool.com/articles/jyA3MrU 时间 2015-01-05 10:08:18 我是程序猿,我为自己代言 原文 http://blog.cs ...
- C# 基于Directshow.Net lib库 USB摄像头使用DirectShow.NET获取摄像头视频流
https://blog.csdn.net/u010118312/article/details/91766787 https://download.csdn.net/download/u010118 ...
- 开源库Magicodes.ECharts使用教程
目录 1 概要 2 2 Magicodes.ECharts工作原理 3 2.1 架构说明 3 2.1.1 Axis 4 2.1.2 CommonD ...
- ios很好的开源库
Tim9Liu9/TimLiu-iOS 自己总结的iOS.mac开源项目及库,持续更新.. 目录 UI 下拉刷新 模糊效果 AutoLayout 富文本 图表 表相关与Tabbar 隐藏与显示 HUD ...
- Android开发之经常使用开源库直接拿来用
1.from 代码家 整理比較好的源代码连接 **************************************************************************** ...
- Android Studio 简介及导入 jar 包和第三方开源库方[转]
原文:http://blog.sina.com.cn/s/blog_693301190102v6au.html Android Studio 简介 几天前的晚上突然又想使用 Android Studi ...
- 开源框架】Android之史上最全最简单最有用的第三方开源库收集整理,有助于快速开发
[原][开源框架]Android之史上最全最简单最有用的第三方开源库收集整理,有助于快速开发,欢迎各位... 时间 2015-01-05 10:08:18 我是程序猿,我为自己代言 原文 http: ...
- 介绍n款计算机视觉库/人脸识别开源库/软件
计算机视觉库 OpenCV OpenCV是Intel®开源计算机视觉库.它由一系列 C 函数和少量 C++ 类构成,实现了图像处理和计算机视觉方面的很多通用算法. OpenCV 拥有包括 300 多个 ...
随机推荐
- 自己动手实现一个WEB服务器
自己动手实现一个 Web Server 项目背景 最近在重温WEB服务器的相关机制和原理,为了方便记忆和理解,就尝试自己用Java写一个简化的WEB SERVER的实现,功能简单,简化了常规服务器的大 ...
- java字符串应用之表达式解析器
一.表达式的组成 1.数字 2.运算符:+ - / * ^ % = 3.圆括号 4.变量二.运算符优先级 由高到低分别为:+-(正负号).^.*/%.+-.= 优先 ...
- Angular中的$q的形象解释及深入用法
作者:寸志链接:https://zhuanlan.zhihu.com/p/19622332来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 早上,老爸说:“儿子,天气如何 ...
- rem手机端适配
<script> document.documentElement.style.fontSize=document.documentElement.clientWidth*100/750+ ...
- 【LeetCode题解】136_只出现一次的数字
目录 [LeetCode题解]136_只出现一次的数字 描述 方法一:列表操作 思路 Java 实现 Python 实现 方法二:哈希表 思路 Java 实现 Python 实现 方法三:数学运算 思 ...
- Selenium私房菜系列4 -- Selenium IDE的使用
(转自http://www.cnblogs.com/hyddd/archive/2009/05/24/1487967.html) 前面说过,Selenium IDE是Firefox的一个插件,是可以进 ...
- 开源方案搭建可离线的精美矢量切片地图服务-4.Mapbox样式设计
项目成果展示(所有项目文件都在阿里云的共享云虚拟主机上,访问地图可以会有点慢,请多多包涵). 01:中国地图:http://test.sharegis.cn/mapbox/html/3china.ht ...
- Python解析xml与JSON
xml与json是常用的文件交换格式,常用来表示网页的html则是xml的变种.解析xml和json在web开发中有着重要应用. DOM解析XML 文件对象模型(Document Object Mod ...
- [九省联考 2018]一双木棋chess
Description 题库链接 给出一个 \(n\times m\) 的棋盘,棋盘的每个格子有两个权值 \(A,B\) . Alice 和 Bob 轮流操作在棋盘上放棋子,一个格子能放棋子的前提条件 ...
- awk 统计文件中按照某列统计某列的和(sum)
把第一列相同的名称的第二列加起来: [root@localhost cc]# cat 1.txtaaa 10 bbb 20aaa 30ccc 40ccc 20ccc 40 [root@localhos ...