libuvc與webcam的開發(fā)(一) - UVC協(xié)議

簡介

UVC : USB video device class撵渡,是一種USB設(shè)備類,這種設(shè)備用于通過USB總線傳輸視頻流,例如網(wǎng)絡(luò)攝像頭(webcam)等,這些年隨著監(jiān)控和網(wǎng)絡(luò)直播的興起拒贱,webcam類的設(shè)備大量出現(xiàn),而這些設(shè)備與上位機的數(shù)據(jù)傳輸佛嬉,必然繞不開uvc協(xié)議逻澳。

相關(guān)資料鏈接

維基百科中的描述:
https://en.wikipedia.org/wiki/USB_video_device_class

uvc協(xié)議下載:
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協(xié)議主要分為1.0,1.1和1.5這三種暖呕,前兩者使用相對較為廣泛斜做。上面的連接分別是這三種協(xié)議的文檔,讀者可自行下載參考湾揽。

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

下面詳細摘一些UVC相關(guān)的知識點

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

UVC Descriptor Hierarchy(來自UVC1.1規(guī)范)

幾個名詞的解釋:

術(shù)語 解釋
Configuration A collection of one or more interfaces that may be selected on a USB device.
Descriptor Data structure used to describe a USB device capability or characteristic.
Device USB peripheral.
Endpoint Source or sink of data on a USB device.
Interface An Entity representing a collection of zero or more endpoints that present functionality to a Host.
IAD Interface Association Descriptor. This is used to describe that two or more interfaces are associated to the same function. An ‘a(chǎn)ssociation’ includes two or more interfaces and all of their alternate setting interfaces.

文摘與解讀:

根據(jù)上文描述瓤逼,USB設(shè)備的視頻相關(guān)的功能是由設(shè)備層級架構(gòu)中的interface層來具體實現(xiàn)的。每個video function(此處應(yīng)該理解為configuration)均是由一個VC interface和若干個VS interface共同組成的库物,事實上霸旗,我接觸的攝像頭設(shè)備中,大多只有一個VS interface戚揭。
當(dāng)然了诱告,除了視頻功能,該設(shè)備也可以同時擁有其它功能民晒,比如MTP精居,這樣的話,設(shè)備層往下會有第二個configuration潜必,這個configuration又會有其它的interfaces靴姿。

UVC協(xié)議的具體實現(xiàn)就放在這些interfaces中,為了實現(xiàn)UVC的相關(guān)功能刮便,協(xié)議特別引入了units和terminals兩個概念:


units可以理解為UVC相關(guān)子功能的具體實現(xiàn)單元空猜,這種模塊單元由多個輸入和一個輸出構(gòu)成。terminal可以理解為數(shù)據(jù)流的端節(jié)點恨旱,分為input terminal (IT)和 output terminal(OT)辈毯,分別代碼視頻數(shù)據(jù)流的輸入起始點和輸出終點。當(dāng)然了搜贤,IT和OT之間少不了還有一些units谆沃,用于對數(shù)據(jù)進行相應(yīng)處理。注意仪芒,unit和terminal都有對應(yīng)的descriptor唁影。

UVC規(guī)范中定義了一些基礎(chǔ)的unit和terminal:
? Input Terminal
? Output Terminal
? Selector Unit
? Processing Unit
? Extension Unit

這些unit和terminal可以實現(xiàn)絕大部分的功能耕陷。除此之外,還有一些特殊的terminal据沈,比如Media Transport Terminal和Camera Terminal哟沫,用于實現(xiàn)一些特殊的功能。當(dāng)然了锌介,對于初級玩家來說嗜诀,上面5個unit和terminal已經(jīng)足夠使用了。

每一個unit或者terminal中又包含了若干個setting孔祸,用于實現(xiàn)不同的video controls隆敢,比如,在processing unit中崔慧,相機的亮度(brightness)信息包含在current setting中拂蝎,如果主機側(cè)想讀取現(xiàn)在的亮度值,可以向這個setting發(fā)起request來獲得惶室。主要的setting分為:
? Current setting
? Minimum setting
? Maximum setting
? Resolution
? Size
? Default

對主機側(cè)來說温自,通過 unit descriptor,terminal descriptor和video control皇钞,就可以完整獲取到該UVC設(shè)備的控制信息捣作。

下面是interface層幾個主要組件的介紹:





下面一段話關(guān)于操作模式的,比較有意思:



這段話也再次確認了鹅士,一個設(shè)備可以有多個configuration,每個configuration可以有多個interface惩坑。同一個設(shè)備中可以同時存在多個獨立的視頻功能(我個人理解為這指的就是configuration)掉盅,每個視頻功能是由多個interface去支撐的,因此隸屬于同一個功能的interface就形成了一個組以舒,這個組就叫video interface collection趾痘,其描述符就叫IAD。如果一個設(shè)備有多個獨立的視頻功能蔓钟,則它必然擁有多個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相關(guān)的內(nèi)容:


A video (or still image) sample refers to an encoded block of video 
data that the format-specific decoder is able to accept and interpret in 
a single transmission. 

Sample Bulk Transfers




主機如何去控制設(shè)備侣集?

2.4.4 Control Transfer and Request Processing
Control transfers minimally have two transaction stages: Setup and Status. A control transfer 
may optionally contain a Data stage between the Setup and Status stages. The Setup stage 
contains all information necessary to address a particular entity, specify the desired 
operation, and prepare for an optional Data stage. A Data stage can be host-to-device (OUT 
transactions), or device-to-host (IN transactions), depending on the direction and operation 
specified in the Setup stage via the bmRequestType and bRequest fields.

In the context of the Video Class specification, SET_CUR requests will always involve a 
Data stage from host to device, and GET_* requests will always involve a Data stage from 
device to host. Although none are defined currently, an exception to this rule would be a 
SET_CUR request where the bRequest field contains all information necessary to place the 
device into a known state. However, “toggle” requests without a Data stage are explicitly 
disallowed.



最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市兰绣,隨后出現(xiàn)的幾起案子世分,更是在濱河造成了極大的恐慌,老刑警劉巖缀辩,帶你破解...
    沈念sama閱讀 212,599評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件臭埋,死亡現(xiàn)場離奇詭異踪央,居然都是意外死亡,警方通過查閱死者的電腦和手機瓢阴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,629評論 3 385
  • 文/潘曉璐 我一進店門畅蹂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人荣恐,你說我怎么就攤上這事液斜。” “怎么了募胃?”我有些...
    開封第一講書人閱讀 158,084評論 0 348
  • 文/不壞的土叔 我叫張陵旗唁,是天一觀的道長。 經(jīng)常有香客問我痹束,道長检疫,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,708評論 1 284
  • 正文 為了忘掉前任祷嘶,我火速辦了婚禮屎媳,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘论巍。我一直安慰自己烛谊,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,813評論 6 386
  • 文/花漫 我一把揭開白布嘉汰。 她就那樣靜靜地躺著丹禀,像睡著了一般。 火紅的嫁衣襯著肌膚如雪鞋怀。 梳的紋絲不亂的頭發(fā)上双泪,一...
    開封第一講書人閱讀 50,021評論 1 291
  • 那天,我揣著相機與錄音密似,去河邊找鬼焙矛。 笑死,一個胖子當(dāng)著我的面吹牛残腌,可吹牛的內(nèi)容都是我干的村斟。 我是一名探鬼主播,決...
    沈念sama閱讀 39,120評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼抛猫,長吁一口氣:“原來是場噩夢啊……” “哼蟆盹!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起邑滨,我...
    開封第一講書人閱讀 37,866評論 0 268
  • 序言:老撾萬榮一對情侶失蹤日缨,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后掖看,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體匣距,經(jīng)...
    沈念sama閱讀 44,308評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡面哥,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,633評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了毅待。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片尚卫。...
    茶點故事閱讀 38,768評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖尸红,靈堂內(nèi)的尸體忽然破棺而出吱涉,到底是詐尸還是另有隱情,我是刑警寧澤外里,帶...
    沈念sama閱讀 34,461評論 4 333
  • 正文 年R本政府宣布怎爵,位于F島的核電站,受9級特大地震影響盅蝗,放射性物質(zhì)發(fā)生泄漏鳖链。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,094評論 3 317
  • 文/蒙蒙 一墩莫、第九天 我趴在偏房一處隱蔽的房頂上張望芙委。 院中可真熱鬧,春花似錦狂秦、人聲如沸灌侣。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,850評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽侧啼。三九已至,卻和暖如春堪簿,著一層夾襖步出監(jiān)牢的瞬間慨菱,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,082評論 1 267
  • 我被黑心中介騙來泰國打工戴甩, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人闪彼。 一個月前我還...
    沈念sama閱讀 46,571評論 2 362
  • 正文 我出身青樓甜孤,卻偏偏與公主長得像,于是被迫代替她去往敵國和親畏腕。 傳聞我的和親對象是個殘疾皇子缴川,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,666評論 2 350

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)描馅,斷路器把夸,智...
    卡卡羅2017閱讀 134,637評論 18 139
  • 關(guān)于Mongodb的全面總結(jié) MongoDB的內(nèi)部構(gòu)造《MongoDB The Definitive Guide》...
    中v中閱讀 31,914評論 2 89
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,851評論 25 707
  • 別叫我李白 每個人都會有一些故事,但不是所有故事都愿意拿出來分享铭污,生活中遇到的故事或許或許才能真的來大動讀者恋日! 1...
    別叫我李白閱讀 445評論 1 1
  • 藍色的天幕上 朵朵棉花糖蕩漾 讓我想起了故鄉(xiāng) 想起了久遠的甜香 顫抖的記憶膀篮,飄啊飄 那是誰家的女娃和兒郎 落花下手...
    煙雨心清閱讀 362評論 15 10