Android开发之《USB Camera》
SimpleWebCam Source Code:https://bitbucket.org/neuralassembly/simplewebcam/src
1. USB摄像头UVC兼容(如今大部分兼容)
2. 设备是否支持USB-OTG
3. 是够在/dev目录下创建了设备(shell执行ls -l /dev/v*,看到video0 video1)
4. 如果没有/dev设备,需要写一个固件(UVC)跟硬件通信
什么是UVC?
UVC,全称:USB video class或video device class,是Microsoft与另外几家设备厂商联合退出的为USB视频捕获设备定义的协议标准,目前已成为USB org标准之一。
主流操作系统 (如Windows XP SP2 and later, Linux 2.4.6 and later, MacOS 10.5 and later) 都已提供UVC设备驱动,符合UVC规格的硬件设备在不需要安装任何驱动程序下即可在主机中正常使用。
怎样判断一个摄像头是否属于UVC规范?
1. 使用lsusb命令,找出摄像头设备号(Vendor ID)和产品号(Product ID)
2. 查找是否有视频类接口信息
# lsusb -d VID: PID -v | grep "14 Video"
如果兼容,则会输出如下信息:
bFunctionClass 14 Video
bInterfaceClass 14 Video
bInterfaceClass 14 Video
bInterfaceClass 14 Video
否则,则是一个non-UVC设备
----------------------
camera控制主要参考v4l2接口
v4l2_streamparm
----------------------
fd_set readfd;
struct timeval timeout; FD_ZERO(&readfd); //初始化readfd
FD_SET(gps_fd, &readfd); //把gps_fd加入readfd
timeout.tv_sec = ; //设置3秒超时
timeout.tv_usec = ; j = select(gps_fd+, &readfd, NULL, NULL, &timeout); //用select对gps_fd进行轮循
if( j> ){
if( FD_ISSET(gps_fd, &readfd) ){ //如果gps_fd可读
i = read(gps_fd, buf, SIZE);
buf[i] = '\0';
}
}
YUV
0x480, 0x720, 0x1080, MJPEG: 640x480, 0x720, 0x1080, 30 MJPEG解码
可以参考这个文件frameworks/base/media/tests/omxjpegdecoder/jpeg_decoder_bench.cpp,这里面调用的libskia.so,libskia里调用的硬解码接口hw_jpeg_deco
在v4l2读出的帧中找到SOF0(Start Of Frame ),插入个huffman表就可以用libjpeg解码成rgb。
可以参考mjpg-streamer中input_uvc目录下的代码,或者我刚调试好的 :https://github.com/joeshang/joycar/blob/master/module/v4l2_camera/decoder_mjpeg.c
Android开发之《USB Camera》的更多相关文章
- Android开发之《ffmpeg解码mjpeg视频流》
MJPEG格式和码流分析,MJPEG格式的一些简介 FFmpeg解码USB摄像头MJPEG输出:http://blog.csdn.net/light_in_dark/article/details/5 ...
- android 开发对gif解码(适配android 4.2、4.3、4.4版本)
android 开发对gif解码(适配android 4.2.4.3.4.4版本) 使用方法: public class ImageInputActivity extends Activity imp ...
- 在iOS平台使用ffmpeg解码h264视频流(转)
在iOS平台使用ffmpeg解码h264视频流,有需要的朋友可以参考下. 对于视频文件和rtsp之类的主流视频传输协议,ffmpeg提供avformat_open_input接口,直接将文件路径或UR ...
- 在iOS平台使用ffmpeg解码h264视频流
来源:http://www.aichengxu.com/view/37145 在iOS平台使用ffmpeg解码h264视频流,有需要的朋友可以参考下. 对于视频文件和rtsp之类的主流视频传输协议,f ...
- Android开发——通过wifi接收IPCamera视频流
前面,我们已经了解了怎么在android app上打开关闭和扫描,搜索wifi,现在,我来写一下怎么通过连接wifi来使app获取到IPCamera摄像头的视频. 一.通过URL获取视频的地址 二.创 ...
- android 开发 解码gif图片,获取每帧bitmap
环境:android 4.3 (注意对于android4.4版本解码出来不正确,除了第一帧正确外,其余的都是显示不同的地方) 通用版本见: android 开发对gif解码(适配android 4 ...
- FFmpeg开发笔记(四):ffmpeg解码的基本流程详解
若该文为原创文章,未经允许不得转载原博主博客地址:https://blog.csdn.net/qq21497936原博主博客导航:https://blog.csdn.net/qq21497936/ar ...
- FFmpeg开发笔记(五):ffmpeg解码的基本流程详解(ffmpeg3新解码api)
若该文为原创文章,未经允许不得转载原博主博客地址:https://blog.csdn.net/qq21497936原博主博客导航:https://blog.csdn.net/qq21497936/ar ...
- FFmpeg开发笔记(九):ffmpeg解码rtsp流并使用SDL同步播放
前言 ffmpeg播放rtsp网络流和摄像头流. Demo 使用ffmpeg播放局域网rtsp1080p海康摄像头:延迟0.2s,存在马赛克 使用ffmpeg播放网络rtsp文件流 ...
- [原]如何在Android用FFmpeg解码图像
前一篇[原]如何用Android NDK编译FFmpeg 我们知道了如何使用NDK来编译Android平台下使用的FFmpeg动态库.这篇文章我们就可以使用Android下的JNI来调用FFMpeg进 ...
随机推荐
- JS中,输出1-10之间的随机整数
<script> document.write(parseInt(10*Math.random())); //输出0-10之间的随机整数 document.write(Math.floor ...
- 谈谈 Act 的依赖注入 和 模板输出 - 回答 drinkjava 同学提问
1. 背景 依赖注入工具 jBeanBox 的作者 drinkjava 同学最近在 Actframework gitee 项目 的提出了如下评论: 你这个DI工具的出发点可能有问题,一个MVC工具为什 ...
- Facebook的Libra “区块链”到底是如何运作的?
本文深入研究了"关于Facebook Libra coin (以及更多)平台协议"的26页技术文档,并对其内容进行了分解说明.同时,我们对这53位作者表示衷心的钦佩! 以下为具体分 ...
- 17.3.12--time模块
import time #导入time模块 应用的时候有两种方式来表示时间: 1)时间戳 2)格式化的时间str(字符串) 3)元祖(struct_time)以及calendar 2---tim ...
- 吴裕雄--天生自然 PYTHON3开发学习:运算符
#!/usr/bin/python3 a = 21 b = 10 c = 0 c = a + b print ("1 - c 的值为:", c) c = a - b print ( ...
- 分布式场景下Kafka消息顺序性的思考
如果业务中,对于kafka发送消息异步消费的场景,在业务上需要实现在消费时实现顺序消费, 利用kafka在partition内消息有序的特点,消息消费时的有序性. 1.在发送消息时,通过指定parti ...
- C盘满了解决办法之hiberfil.sys文件
C盘的hiberfil文件占了很大的空间: 这个是系统的休眠文件,可以通过命令关闭:powercfg -h off [on是打开]
- [Algo] 223. Add Two Numbers
You are given two linked lists representing two non-negative numbers. The digits are stored in rever ...
- virtualbox Ubuntu拒绝root用户ssh远程登录
http://www.bcty365.com/content-122-6241-1.html
- 理解Java中的对象,变量和方法
1.对象的创建和销毁 1.1 对象的创建 这里只介绍创建对象与构造方法的关系 (1).每实例化一个对象就会自动调用一次构造方法,实质上这个过程就是创建对象的过程,准确的说,在Java语言中使用new操 ...