UVC協議詳解

一、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-hk/n/196036.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-03 09:52
下一篇 2024-12-03 09:52

相關推薦

  • 機智雲gagent屬於哪個協議?

    機智雲gagent主要是基於MQTT協議,同時支持TCP、TLS、WebSocket等多種協議。 一、MQTT協議介紹 MQTT全稱Message Queuing Telemetr…

    編程 2025-04-29
  • 使用Netzob進行網絡協議分析

    Netzob是一款開源的網絡協議分析工具。它提供了一套完整的協議分析框架,可以支持多種數據格式的解析和可視化,方便用戶對協議數據進行分析和定製。本文將從多個方面對Netzob進行詳…

    編程 2025-04-29
  • 如何取消火車票自動搶票協議

    火車票自動搶票協議,是一種利用技術手段在系統繁忙的情況下,自動刷取並搶購火車票的行為。雖然在某些情況下能夠提高購票成功率,但是也會影響其他乘客的購票權益。因此,取消火車票自動搶票協…

    編程 2025-04-29
  • USB協議棧

    USB(Universal Serial Bus)是一種常見的計算機外部接口,它已經被廣泛使用在各種設備中,例如打印機、鍵盤、鼠標等。在實現USB通信的過程中,USB協議棧起着非常…

    編程 2025-04-27
  • 神經網絡代碼詳解

    神經網絡作為一種人工智能技術,被廣泛應用於語音識別、圖像識別、自然語言處理等領域。而神經網絡的模型編寫,離不開代碼。本文將從多個方面詳細闡述神經網絡模型編寫的代碼技術。 一、神經網…

    編程 2025-04-25
  • Linux sync詳解

    一、sync概述 sync是Linux中一個非常重要的命令,它可以將文件系統緩存中的內容,強制寫入磁盤中。在執行sync之前,所有的文件系統更新將不會立即寫入磁盤,而是先緩存在內存…

    編程 2025-04-25
  • Python輸入輸出詳解

    一、文件讀寫 Python中文件的讀寫操作是必不可少的基本技能之一。讀寫文件分別使用open()函數中的’r’和’w’參數,讀取文件…

    編程 2025-04-25
  • nginx與apache應用開發詳解

    一、概述 nginx和apache都是常見的web服務器。nginx是一個高性能的反向代理web服務器,將負載均衡和緩存集成在了一起,可以動靜分離。apache是一個可擴展的web…

    編程 2025-04-25
  • Linux修改文件名命令詳解

    在Linux系統中,修改文件名是一個很常見的操作。Linux提供了多種方式來修改文件名,這篇文章將介紹Linux修改文件名的詳細操作。 一、mv命令 mv命令是Linux下的常用命…

    編程 2025-04-25
  • 詳解eclipse設置

    一、安裝與基礎設置 1、下載eclipse並進行安裝。 2、打開eclipse,選擇對應的工作空間路徑。 File -> Switch Workspace -> [選擇…

    編程 2025-04-25

發表回復

登錄後才能評論