UVC协议

简介

UVC : USB video device class,是一种USB设备类,这种设备用于通过USB总线传输视频流,例如网络摄像头(webcam)等,这些年随着监控和网络直播的兴起,webcam类的设备大量出现,而这些设备与上位机的数据传输,必然绕不开uvc协议。

相关资料链接

维基百科中的描述:

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

uvc协议下载:

https://www.usb.org/documents

https://www.usb.org/document-library/video-class-v15-document-set

https://www.usb.org/document-library/video-class-v11-document-set

https://www.usb.org/document-library/audiovideo-device-class-v10-spec-and-adopters-agreement

目前uvc协议主要分为1.0,1.1和1.5这三种,前两者使用相对较为广泛。上面的连接分别是这三种协议的文档,读者可自行下载参考。

<=======================>

下面详细摘一些UVC相关的知识点

<=======================>

UVC Descriptor Hierarchy(来自UVC1.1规范)

几个名词的解释:

术语解释

ConfigurationA collection of one or more interfaces that may be selected on a USB device.

DescriptorData structure used to describe a USB device capability or characteristic.

DeviceUSB peripheral.

EndpointSource or sink of data on a USB device.

InterfaceAn Entity representing a collection of zero or more endpoints that present functionality to a Host.

IADInterface Association Descriptor. This is used to describe that two or more interfaces are associated to the same function. An ‘association’ includes two or more interfaces and all of their alternate setting interfaces.

文摘与解读:

根据上文描述,USB设备的视频相关的功能是由设备层级架构中的interface层来具体实现的。每个video function(此处应该理解为configuration)均是由一个VC interface和若干个VS interface共同组成的,事实上,我接触的摄像头设备中,大多只有一个VS interface。

当然了,除了视频功能,该设备也可以同时拥有其它功能,比如MTP,这样的话,设备层往下会有第二个configuration,这个configuration又会有其它的interfaces。

UVC协议的具体实现就放在这些interfaces中,为了实现UVC的相关功能,协议特别引入了units和terminals两个概念:

units可以理解为UVC相关子功能的具体实现单元,这种模块单元由多个输入和一个输出构成。terminal可以理解为数据流的端节点,分为input terminal (IT)和 output terminal(OT),分别代码视频数据流的输入起始点和输出终点。当然了,IT和OT之间少不了还有一些units,用于对数据进行相应处理。注意,unit和terminal都有对应的descriptor。

UVC规范中定义了一些基础的unit和terminal:

• Input Terminal

• Output Terminal

• Selector Unit

• Processing Unit

• Extension Unit

这些unit和terminal可以实现绝大部分的功能。除此之外,还有一些特殊的terminal,比如Media Transport Terminal和Camera Terminal,用于实现一些特殊的功能。当然了,对于初级玩家来说,上面5个unit和terminal已经足够使用了。

每一个unit或者terminal中又包含了若干个setting,用于实现不同的video controls,比如,在processing unit中,相机的亮度(brightness)信息包含在current setting中,如果主机侧想读取现在的亮度值,可以向这个setting发起request来获得。主要的setting分为:

• Current setting

• Minimum setting

• Maximum setting

• Resolution

• Size

• Default

对主机侧来说,通过 unit descriptor,terminal descriptor和video control,就可以完整获取到该UVC设备的控制信息。

下面是interface层几个主要组件的介绍:

下面一段话关于操作模式的,比较有意思:

这段话也再次确认了,一个设备可以有多个configuration,每个configuration可以有多个interface。同一个设备中可以同时存在多个独立的视频功能(我个人理解为这指的就是configuration),每个视频功能是由多个interface去支撑的,因此隶属于同一个功能的interface就形成了一个组,这个组就叫video interface collection,其描述符就叫IAD。如果一个设备有多个独立的视频功能,则它必然拥有多个video interface collection。

如前所述,一个video interface collection含有一个(且是唯一一个)video control interface和若干个video streaming interface。 这个VC interface是由两个endpoint组成的:

• A control endpoint for manipulating Unit and Terminal settings and retrieving the state of the video function. This endpoint is mandatory, and the default endpoint 0 is used for this purpose.

• An interrupt endpoint for status returns. This endpoint is optional, but may be mandatory under certain conditions. See section 2.4.2.2, "Status Interrupt Endpoint" for further information.

下面是对这两种endpoint的详细描述:

下面是video streaming interface相关的内容:

Avideo(orstill image)sample referstoan encoded block of videodatathat the format-specific decoderisabletoacceptandinterpretina single transmission.

Sample Bulk Transfers

主机如何去控制设备?

2.4.4ControlTransferandRequestProcessingControltransfers minimally have two transaction stages:Setupand Status.Acontrol transfer may optionally contain aDatastage between theSetupandStatusstages.TheSetupstage contains all information necessary to address a particular entity,specify the desired operation,and prepareforan optionalDatastage.ADatastage can be host-to-device(OUTtransactions),or device-to-host(INtransactions),depending on the direction and operation specifiedintheSetupstage via the bmRequestType and bRequest fields.Inthe context of theVideoClassspecification,SET_CURrequests will always involve aDatastagefromhost to device,and GET_*requests will always involve aDatastagefromdevice to host.Althoughnone are defined currently,an exception tothisrule would be aSET_CURrequestwherethe bRequest field contains all information necessary to place the deviceintoa known state.However,“toggle” requests without aDatastage are explicitly disallowed.

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,634评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,951评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,427评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,770评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,835评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,799评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,768评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,544评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,979评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,271评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,427评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,121评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,756评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,375评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,579评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,410评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,315评论 2 352

推荐阅读更多精彩内容