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