UVC摄像头技术笔记
+ -

UVC规范USB摄像头相机终端PTZ的初始化分析

2021-08-31 853 0

USB摄像头采用的是UVC协议,使用UVC协议对UVC规范的USB摄像头进行PTZ控制是通过对UVC的相机终端特定类请求实现的。

本人手中有一UVC USB摄像头,其支持相对和绝对的PTZ功能。通过其UVC USB摄像头相机终端描述支持的功能如下:

        -------- Video Control Input Terminal Descriptor ------
bLength                  : 0x12 (18 bytes)
bDescriptorType          : 0x24 (Video Control Interface)
bDescriptorSubtype       : 0x02 (Input Terminal)
bTerminalID              : 0x01
wTerminalType            : 0x0201 (ITT_CAMERA)
bAssocTerminal           : 0x00 (Not associated with an Output Terminal)
iTerminal                : 0x00
Camera Input Terminal Data:
wObjectiveFocalLengthMin : 0x0000
wObjectiveFocalLengthMax : 0x0000
wOcularFocalLength       : 0x0000
bControlSize             : 0x03
bmControls               : 0x00, 0x1E, 0x00
 D0                      : 0   no -  Scanning Mode
 D1                      : 0   no -  Auto-Exposure Mode
 D2                      : 0   no -  Auto-Exposure Priority
 D3                      : 0   no -  Exposure Time (Absolute)
 D4                      : 0   no -  Exposure Time (Relative)
 D5                      : 0   no -  Focus (Absolute)
 D6                      : 0   no -  Focus (Relative)
 D7                      : 0   no -  Iris (Absolute)
 D8                      : 0   no -  Iris (Relative)
 D9                      : 1  yes -  Zoom (Absolute)
 D10                     : 1  yes -  Zoom (Relative)
 D11                     : 1  yes -  Pan (Absolute)
 D12                     : 1  yes -  Pan (Relative)
 D13                     : 0   no -  Roll (Absolute)
 D14                     : 0   no -  Roll (Relative)
 D15                     : 0   no -  Tilt (Absolute)
 D16                     : 0   no -  Tilt (Relative)
 D17                     : 0   no -  Focus Auto
 D18                     : 0   no -  Reserved
 D19                     : 0   no -  Reserved
 D20                     : 0   no -  Reserved
 D21                     : 0   no -  Reserved
 D22                     : 0   no -  Reserved
 D23                     : 0   no -  Reserved
Data (HexDump)           : 12 24 02 01 01 02 00 00 00 00 00 00 00 00 03 00   .$..............
                           1E 00                                             ..

所以其支持的选择子分别为:

选择子
CT_ZOOM_ABSOLUTE_CONTROL 0x0B
CT_ZOOM_RELATIVE_CONTROL 0x0C
CT_PANTILT_ABSOLUTE_CONTROL 0x0D
CT_PANTILT_RELATIVE_CONTROL 0x0E

我们通过BUSHOUND对USB摄像头接入系统后的抓包如下:

//CT_ZOOM_ABSOLUTE_CONTROL
    CTL    a1 86 00 0b  01 01 01 00                            GET INFO
 1  IN     13                                                  .       
    CTL    a1 82 00 0b  01 01 02 00                            GET MIN 
 2  IN     00 00                                               ..      
    CTL    a1 83 00 0b  01 01 02 00                            GET MAX 
 2  IN     d0 02                                               ..      
    CTL    a1 84 00 0b  01 01 02 00                            GET RES 
 2  IN     01 00                                               ..      
    CTL    a1 87 00 0b  01 01 02 00                            GET DEF 
 2  IN     00 00  

//CT_ZOOM_RELATIVE_CONTROL      
    CTL    a1 86 00 0c  01 01 01 00                            GET INFO
 1  IN     03                                                  .       
    CTL    a1 82 00 0c  01 01 03 00                            GET MIN 
 3  IN     00 00 00                                            ...     
    CTL    a1 83 00 0c  01 01 03 00                            GET MAX 
 3  IN     00 00 01                                            ...     
    CTL    a1 84 00 0c  01 01 03 00                            GET RES 
 3  IN     00 00 01                                            ...     
    CTL    a1 87 00 0c  01 01 03 00                            GET DEF 
 3  IN     00 00 01

 //CT_PANTILT_ABSOLUTE_CONTROL    
    CTL    a1 86 00 0d  01 01 01 00                            GET INFO
 1  IN     13                                                  .       
    CTL    a1 82 00 0d  01 01 08 00                            GET MIN 
 8  IN     80 39 ec ff  60 e7 f4 ff                            
    CTL    a1 83 00 0d  01 01 08 00                            GET MAX 
 8  IN     80 c6 13 00  a0 18 0b 00                            ........
    CTL    a1 84 00 0d  01 01 08 00                            GET RES 
 8  IN     10 0e 00 00  10 0e 00 00                            ........
    CTL    a1 87 00 0d  01 01 08 00                            GET DEF 
 8  IN     00 00 00 00  00 00 00 00                          

 //CT_PANTILT_RELATIVE_CONTROL
    CTL    a1 86 00 0e  01 01 01 00                            GET INFO
 1  IN     03                                                  .       
    CTL    a1 82 00 0e  01 01 04 00                            GET MIN 
 4  IN     00 01 00 01                                         ....    
    CTL    a1 83 00 0e  01 01 04 00                            GET MAX 
 4  IN     00 01 00 01                                         ....    
    CTL    a1 84 00 0e  01 01 04 00                            GET RES 
 4  IN     00 01 00 01                                         ....    
    CTL    a1 87 00 0e  01 01 04 00                            GET DEF 
 4  IN     00 01 00 01                                         ....

对抓包的数据进行分析,可以看到,抓到的数据请求正好对应着UVC相机终端描述符里所支持的功能。
关于各选择子的具体数据格式可详见:UVC 相机终端控制请求 http://www.usbzh.com/article/detail-47.html。

这里我们以CT_PANTILT_RELATIVE_CONTROL选择子为例进行数据分析,该选择子的功能是实现UVC相机相对PT即上下左右移动的功能。
在UVC摄像头进行初始化时,分别对其发送GEN_INFO,GETN_MIN,GET_MAX,GET_RES和GET_DEF的请求。这些请求获取该相机进行PT功能的基本参数功能,如最大值,最小值,数据的分辨率和默认值等。

这比UVC扩展单元少了GET_LEN请求,因为扩展单元的数据长度是厂商自定义的,而这些标准请求的选择子对应的数据长度是由UVC协议规定的,是固定不变的。

如对

    CTL    a1 82 00 0e  01 01 04 00                            GET MIN 
 4  IN     00 01 00 01                                         ....

进行分析:

  • 0xa1:表示发向接口或实例
  • 0x82:表示GET_MIN
  • 00 0E:即0x0E00 表示选择子1。控制选择器CS(高字节),低字节为零
  • 01:表示发向的接口ID为0X01,本设备的控制接口位于接口描述符ID为1的按口描述符中,控制接口位于其中。
  • 01:相机终端ID
  • 04 00:数据长度为4字节。

4个数据的含义分别为:

  • bPanRelative:00
  • bPanSpeed:01
  • bTiltRelative:00
  • bTiltSpeed:01

    喵的,这里的值怎么不套路来…翻车了

HID人机交互QQ群:564808376    UAC音频QQ群:218581009    UVC相机QQ群:331552032    BOT&UASP大容量存储QQ群:258159197    STC-USB单片机QQ群:315457461    USB技术交流QQ群2:580684376    USB技术交流QQ群:952873936   

0 篇笔记 写笔记

UVC 相机终端描述符
相机端点描述符使用bTerminalID来标识其惟一的ID,所有的请求必须使用此ID。wTerminalType用来描述相关的物理实体的信息。typedef struct _CAMERA_TERMINAL_DESCRIPTOR UINT8 bLength; UINT8 bDescr......
UVC 相机终端控制请求
相机终端控制有20种,分别如下:ControlSelectorValueCT_CONTROL_UNDEFINED0x00CT_SCANNING_MODE_CONTROL0x01CT_AE_MODE_CONTROL0x02CT_AE_PRIORITY_CON......
关于UVC PTZ功能
PTZ功能即缩放(Z),左右移动(P)和上下移动(T)功能,定义在相机终端描述符里面,具体可以查看终端描述符那一章。最近在给模块端添加这个功能的时候折腾了一段时间,zoom功能主要根据SET_CUR请求值对画面做相应处理就好,这里说下PT功能,PT功能需要注意下面几个点:1.PT功能命令的数据长度......
UVC PTZ和扩展单元XU的过滤与分发调试笔记
在写这篇文章之前,我得首先感谢微软,感谢你的不严格,让我可以有空子可钻,不至于太过狼狈…记得看过一句话,开局一张图,内容全告编。我多么希望自己在UVC摄像头的调试过程中也可以瞎编乱造,这样不至于身心疲惫。至少保持着愉快的心情,吹吹牛,也是一件很开心的事。今日有一个需求,对UVC摄像头的请求进行......
UVC规范USB摄像头相机终端PTZ的初始化分析
USB摄像头采用的是UVC协议,使用UVC协议对UVC规范的USB摄像头进行PTZ控制是通过对UVC的相机终端特定类请求实现的。关于UVC PTZ功能:http://www.usbzh.com/article/detail-458.html本人手中有一UVC USB摄像头,其支持相对和绝对的P......
uvc_parse_control解析拓扑结构uvc_parse_standard_control
对于大部分的UVC设备,都不会存在厂家自定义的所谓“自定义扩展单元”,都是很规矩的使用UVC标准的扩展单元。当然扩展单元在UVC的控制接口描述符中混着,所以LINUX&UVC驱动就使用uvc_parse_standard_control函数解析这些标准的UVC描述符。在分析代码之前,先回顾......
关注公众号
  • HID人机交互
  • Linux&USB
  • UAC音频
  • TYPE-C
  • USB规范
  • USB大容量存储
  • USB百科
  • USB周边
  • UVC摄像头
  • Windows系统USB
  • 音视频博客
  • 取消
    感谢您的支持,我会继续努力的!
    扫码支持
    扫码打赏,你说多少就多少

    打开支付宝扫一扫,即可进行扫码打赏哦

    您的支持,是我们前进的动力!