一、UVC協議簡介
UVC全稱是USB Video Class(USB視頻類),是一種標準化的USB視頻設備通信協議,它定義了攝像頭與主機之間的數據傳輸協議和格式。
UVC協議的出現,解決了攝像頭廠商之間互不兼容,以及攝像頭應用開發與平台之間的散亂問題。
UVC標準是由USB-IF主導制定的,目前最新的版本是UVC 1.5,UVC的缺省設置類容易實現,不需要額外的驅動程序。
二、UVC協議不同版本對比
UVC協議的出現在2001年,目前已經發布了幾個版本的標準協議:
| UVC版本 | 發布時間 | 支持最高分辨率 | 區別 |
| :—–: | :——: | :————: | :—: |
| UVC 1.0 | 2005年 | 800 x 600 | 第一個穩定版本 |
| UVC 1.1 | 2008年 | 1920 x 1080 | 增加了更高分辨率的支持 |
| UVC 1.5 | 2015年 | 4096 x 2304 | 增加了更高分辨率和HDR支持 |
從發布的時間、分辨率支持、HDR支持等角度來看,可以看出UVC協議在不斷地演進和改進。
三、UVC協議安卓
從Android 5.0開始,Android系統提供了對UVC協議的支持,用於與USB攝像頭進行交互。該功能稱為USB Host,USB主機模式。
對UVC協議的支持,極大地拓展了Android設備的應用能力,讓我們可以使用Android設備來進行視頻監控、視頻通訊、拍照等操作。
四、UVC協議攝像頭控制
UVC協議提供了攝像頭設備和主機的控制協議,定義了攝像頭的基本功能和控制方式:
struct uvc_streaming_control { uint16_t bmHint; uint8_t bFormatIndex; uint8_t bFrameIndex; uint32_t dwFrameInterval; uint16_t wKeyFrameRate; uint16_t wPFrameRate; uint16_t wCompQuality; uint16_t wCompWindowSize; uint16_t wDelay; uint32_t dwMaxVideoFrameSize; uint32_t dwMaxPayloadTransferSize; uint32_t dwClockFrequency; uint8_t bmFramingInfo; uint8_t bPreferredVersion; uint8_t bMinVersion; uint8_t bMaxVersion; };
上面的代碼片段是UVC協議中Stream Control Transfer功能中的定義,其中包含了格式、分辨率、幀率、編碼、質量、延遲等應用缺省設置和控制信息。
五、UVC協議Delphi
Delphi是一種強大的RAD工具,可用於開發各種類型的應用程序。Delphi提供了許多第三方組件,其中也包括了UVC攝像頭控制組件,方便使用Delphi語言進行UVC應用程序的開發。
下面是使用Delphi語言讀取UVC攝像頭並顯示圖像的示例代碼:
procedure TForm1.btnOpenVideoClick(Sender: TObject); var CameraDevice: TCameraDevice; CameraController: TCameraController; Image: TBitmapSurface; begin CameraController := TCameraController.Create; CameraDevice := CameraController.GetSelectedCamera; if CameraDevice nil then begin CameraDevice.OnSampleBufferReady := SampleBufferReady; CameraDevice.StartCapture; end; end; procedure TForm1.SampleBufferReady(Sender: TObject; const ATime: TMediaTime); var CameraDevice: TCameraDevice; CameraSample: TCameraSampleBuffer; Image: TBitmapSurface; begin CameraDevice := TCameraDevice(Sender); if Assigned(CameraDevice) then begin CameraSample := CameraDevice.SampleBuffer; if Assigned(CameraSample) then begin Image := TBitmapSurface.Create; try Image.Assign(CameraSample.ToPlainBitmap); imgCamera.Bitmap.Assign(Image); finally Image.Free; end; end; end; end;
六、UVC協議是什麼意思
UVC協議是USB Video Class的縮寫,是一種標準化的USB視頻設備通信協議,它定義了攝像頭與主機之間的數據傳輸協議和格式。
UVC協議的出現,解決了攝像頭廠商之間互不兼容,以及攝像頭應用開發與平台之間的散亂問題。
七、UVC協議銀河麒麟支持嗎
銀河麒麟是華為公司開發的安卓系統,從Android 5.0開始,Android系統提供了對UVC協議的支持,因此銀河麒麟也支持UVC協議。
八、UVC協議封裝
封裝是指將不同層次的協議組合在一起,通過封裝和逐層解包的方式,使協議轉發得以實現。
UVC協議的封裝主要包括三種類型:
- Control Transfers:控制數據包,傳輸UVC控制信息
- Streaming Transfers:流數據包,傳輸視頻數據
- Interrupt Transfers:中斷數據包,響應UVC的中斷請求
九、UVC協議代碼開發
UVC協議代碼開發主要包括以下幾個方面:
- 使用UVC攝像頭組件或者UVC協議接口
- 控制UVC設備,獲取設備信息
- 傳輸視頻數據,進行圖像處理
- 對UVC設備進行編程,實現UVC功能
下面是使用Python語言讀取UVC攝像頭並顯示圖像的示例代碼:
import cv2 video_capture = cv2.VideoCapture(0) while True: ret, frame = video_capture.read() if ret: cv2.imshow('Video', frame) if cv2.waitKey(1) & 0xFF == ord('q'): break video_capture.release() cv2.destroyAllWindows()
上面的代碼片段使用OpenCV里的VideoCapture方法,實現對UVC攝像頭的視頻數據捕獲,及圖像的顯示。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/196036.html