安卓 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 多个 ...
随机推荐
- Jenkins 学习笔记(一)
Jenkins 要学习Jenkins首先要了解一个概念---持续集成,持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通过每个成员每天至少集成一次,也就意味着每天可能会发生多次集成.每次 ...
- logback 日志打印输出
slf4j 其实是一个日志的抽象层, 其本质仍然需要真正的实现 他可以解决代码中独立于任意特定的日志类库, 可以减少很多维护日志的麻烦, 除此之外, 还有占位符的特性, {}, 类似于String#f ...
- javaScript年份下拉列表框内容为当前年份及前后50年
javascript下拉列表框,内容为当前年份及前后50年,默认选择为当前年份 <script language="javascript" type="text/j ...
- springboot 源码笔记
1.springAppication构造器 基于getSpringFactoriesInstances方法构造如下类(获取文件内容在META-INF/spring.factories文件中) 1.1 ...
- JavaWeb项目WebContent下的资源文件无法引用
JavaWeb项目引用资源的时候尽量使用绝对路径. 作者在帮助同学完善其JavaWeb项目端页面的时候,css样式文件怎么也引用不了. 第一个想到的是:是不是文件路径写错了? 于是,作者换了绝对路径, ...
- jQuery如何根据元素值删除数组元素
用到的方法$.inArry(); $.inArray( value, array [, fromIndex ] ) value 任意类型 用于查找的值. array Array类型 指定被查找的数组. ...
- C# 值类型 引用类型
CLR 定义了两种类型,ReferenceTypes引用类型 和 ValueTypes 值类型.我们定义的各种Class都是引用类型,而我们用的decimal int 之类是值类型. 他们有什么区别呢 ...
- Spring boot 入门二:Spring Boot配置文件详解
一.自定义属性 当我们创建一个springboot项目的时候,系统默认会为我们在src/main/java/resources目录下创建一个application.properties.同时也支持ym ...
- js-权威指南学习笔记13
第十三章 Web浏览器中的JavaScript 1.在客户端JS中,window对象也是全局对象. 2.window对象中其中一个最重要的属性是document,它引用Document对象. 3.JS ...
- 微信获取openId
router.beforeEach(function(to, from, next){ //中间页等待跳转 if(to.meta.requireCheck=="WaitLogin" ...