Android平台下外接摄像头涉及到的几个概念:

1. UVC,什么是UVC

The USB video device class (also USB video class or UVC) is a USB device class that describes devices capable of streaming video like webcams, digital camcorderstranscoders, analog video converters and still-image cameras.

UVC是一个定义USB视频设备的标准。而UVC设备则可以很莽撞地理解为USB摄像头\USB视频采集卡等,一个USB接口的提供视频流的设备。

2. UVC规范标准

简介

https://en.wikipedia.org/wiki/USB_video_device_class

具体规范可以从usb.org下载,最新规范版本1.5,2012/06/06

Video Class v1.5 document set | USB-IF

要关心的是标准定义了UVC(可以理解为USB摄像头)支持什么信号格式,信号格式一般就图像的数据类型,压缩信号(H.264\HEVC\MJPG等),裸数据(YUV系),图像分辨率,图像帧率。这里是多对多关系。

例如某款UVC采集卡,支持MJPG 1080P@10或MJPG 1080P@30,同时也支持YUY2 4K@30 或 YUY2 720P@60、YUY2 720P@50、YUY2 720P@30、YUY2 720P@20,一共7种信号格式可以选择。

3. OTG,什么是OTG

https://en.wikipedia.org/wiki/USB_On-The-Go

OTG是一种让宿主设备(手机、平板)作为usb host的角色,允许其他usb设备(U盘、鼠标、UVC设备)连接上去。

4. 为什么需要OTG

都是USB接口支持USB协议互相通信,为什么要整一个OTG概念出来?

1). 标准的USB协议使用一种master/slave架构,一个设备要么是master,要么就是slave。而作为master设备(一个)支配整个bus(总线)可称为host角色,其他的USB设备(多个)则为slave。

2). 当一个USB设备(slave)进入进USB bus,host会开始设立沟通渠道、数据处理等杂事。这样的好处是USB设备会变得简单易用好匹配好开发,因为事情都交给host干了。

3). 当两个USB slave设备要交互数据时怎么办?当然是host通过bus从USB A设备读取数据,再通过bus写到USB B设备里。

4). 举个例子,PC一般是作为host,而连接PC的例如USB鼠标、USB键盘、USB打印机、U盘,他们都是slave。那手机呢?手机一般是salve,以方便手机连接电脑(host)时进行数据交互。

5). 那U盘接到手机怎么办?他们都是slave,没法通信。所以OTG来了,OTG允许一个设备可以是host,也可以是slave,两种角色都能当,但不能同时当。手机打开了OTG模式,那这手机就变成host角色,这时候接上U盘就能读取到U盘了,同时这手机接上电脑,就无法进行数据交互了,电脑也访问不了手机,因为手机跟电脑都是host。

总结:

1. Android手机必须支持OTG,不然什么USB设备怼上去也不起作用。

2. Android平台下怎么去访问UVC,拿到视频流数据。这里包括USB层协议,UVC层协议。

3. Andoird平台下如何打开一个USB设备,这里涉及到权限问题。