您的位置:

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摄像头的视频数据捕获,及图像的显示。