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 Camera详细设置

v4l2_streamparm

----------------------

C语言 select函数使用

fd_set readfd;  
struct timeval timeout;  
  
FD_ZERO(&readfd);   //初始化readfd  
FD_SET(gps_fd, &readfd);   //把gps_fd加入readfd  
timeout.tv_sec = 3;   //设置3秒超时  
timeout.tv_usec = 0;  
  
j = select(gps_fd+1, &readfd, NULL, NULL, &timeout);   //用select对gps_fd进行轮循  
if( j>0 ){  
    if( FD_ISSET(gps_fd, &readfd) ){   //如果gps_fd可读  
        i = read(gps_fd, buf, SIZE);  
        buf[i] = '