UVC数据 分析调试 编程
- UVC
- 工具 安装与使用
- 下载 安装
- 播放器 PotPlaye
- USB抓包工具
- 使用
- potplayer 选择
- 抓包工具使用
- CTL
- IN
- OUT
- ISOC
- URB
- 控制请求 (control request)
- set 请求
- get 请求
- UVC 包分析
- 分析H264_1080P_30
- CTL 控制数据:
- IN (UVC-->PC)
- OUT
- 分析H265_1080P_30
- CTL 控制数据:
- IN (UVC-->PC)
- OUT
- 喜欢作者的文章 或者探讨 关注如下公众号
UVC
使用Bus Hound 进行抓包分析 UVC 基本信息 与数据流
工具 安装与使用
下载 安装
播放器 PotPlaye
能直接播放UVC camera中的流。
USB抓包工具
百度网盘:链接:https://pan.baidu.com/s/16gh7_H_FBEWNM2c8bkPg2w
提取码:7qcu
使用
potplayer 选择
打开–>camera/其他设备
然后右键 选择你需要选项 如下图
抓包工具使用
安装下载包中指导 选择设备 进行抓包。
CTL
8个字节 USB 控制传输包。
具体解析看后面包分析。
IN
从UVC 设备到PC 传输的数据
OUT
从PC到UVC设备的传输数据
ISOC
Isochronous transfer data bytes 同步传输数据字节
URB
(USB Request Block (URB) data structure)
数据是通过URB完成传输的。每个URB并不一定是完整的数据包,这些不完整的数据包由主机来拼接。
每次的URB数据传输,都是前面为负载数据头(Payload header),后面为有效数据。
控制请求 (control request)
set 请求
Offset | Field | Size | Value | Description |
0 | bmRequestType | 1 | 0x21 | D7: 0 = Host to device D6…5: 01 = Class request D4…0: 00001 = Recipient is interface |
1 | bRequest | 1 | 0x01 | SET_CUR |
2 | wValue | 2 | 0x0100 | Set the input selector control (01) of this unit. |
4 | wIndex | 2 | 0x0400 | Selector Unit ID (04) and VideoControl interface ID (00) |
6 | wLength | 2 | 0x0001 | Parameter block length |
get 请求
Offset | Field | Size | Value | Description |
0 | bmRequestType | 1 | 0xA1 | D7: 1 = Device To host D6…5: 01 = Class request D4…0: 00001 = Recipient is interface |
1 | bRequest | 1 | 0x81 0x82 0x83 0x84 0x86 | GET_CUR GET_MIN GET_MAX GET_RES GET_INFO |
2 | wValue | 2 | 0x0100 | Get the input selector control (01) of this unit. |
4 | wIndex | 2 | 0x0400 | Selector Unit ID (04) and VideoControl interface ID (00) |
6 | wLength | 2 | 0x0001 | Parameter block length |
UVC 包分析
分析H264_1080P_30
37.0 CTL a1 81 00 01 01 00 1a 00 GET CUR 1.1.0
37.0 IN 00 00 03 03 15 16 05 00 00 00 00 00 00 00 00 00 20 00 00 48 3f 00 00 04 00 00 ................ ..H?..... 1.2.0
37.0 URB 88 00 08 00 00 00 00 00 28 46 5c b9 71 41 00 00 00 00 00 00 00 00 00 00 60 dc 80 45 8e be ff ff CONTROL TRANSFER 1.3.0
37.0 CTL 21 01 00 01 01 00 1a 00 SET CUR 2.1.0
37.0 OUT 00 00 03 03 15 16 05 00 00 00 00 00 00 00 00 00 20 00 00 48 3f 00 00 00 00 00 ................ ..H?..... 2.2.0
37.0 URB 88 00 08 00 00 00 00 00 28 46 5c b9 71 41 00 00 00 00 00 00 00 00 00 00 60 dc 80 45 8e be ff ff CONTROL TRANSFER 2.3.0
37.0 CTL a1 81 00 01 01 00 1a 00 GET CUR 3.1.0
37.0 IN 00 00 03 03 15 16 05 00 00 00 00 00 00 00 00 00 20 00 00 48 3f 00 00 04 00 00 ................ ..H?..... 3.2.0
37.0 URB 88 00 08 00 00 00 00 00 28 46 5c b9 71 41 00 00 00 00 00 df ff ff ff ff 60 dc 80 45 8e be ff ff CONTROL TRANSFER 3.3.0
37.0 CTL a1 83 00 01 01 00 1a 00 GET MAX 4.1.0
37.0 IN 00 00 03 03 15 16 05 00 00 00 00 00 00 00 00 00 20 00 00 48 3f 00 00 04 00 00 ................ ..H?..... 4.2.0
37.0 URB 88 00 08 00 00 00 00 00 28 46 5c b9 71 41 00 00 00 00 00 00 00 00 00 00 60 dc 80 45 8e be ff ff CONTROL TRANSFER 4.3.0
37.0 CTL a1 82 00 01 01 00 1a 00 GET MIN 5.1.0
37.0 IN 00 00 03 03 15 16 05 00 00 00 00 00 00 00 00 00 20 00 00 48 3f 00 00 04 00 00 ................ ..H?..... 5.2.0
37.0 URB 88 00 08 00 00 00 00 00 28 46 5c b9 71 41 00 00 00 00 00 df ff ff ff ff 60 dc 80 45 8e be ff ff CONTROL TRANSFER 5.3.0
37.0 CTL 21 01 00 01 01 00 1a 00 SET CUR 6.1.0
37.0 OUT 00 00 03 03 15 16 05 00 00 00 00 00 00 00 00 00 20 00 00 48 3f 00 00 00 00 00 ................ ..H?..... 6.2.0
37.0 URB 88 00 08 00 00 00 00 00 28 46 5c b9 71 41 00 00 00 00 00 df ff ff ff ff 60 dc 80 45 8e be ff ff CONTROL TRANSFER 6.3.0
37.0 CTL a1 81 00 01 01 00 1a 00 GET CUR 7.1.0
37.0 IN 00 00 03 03 15 16 05 00 00 00 00 00 00 00 00 00 20 00 00 48 3f 00 00 04 00 00 ................ ..H?..... 7.2.0
37.0 URB 88 00 08 00 00 00 00 00 28 46 5c b9 71 41 00 00 00 00 00 df ff ff ff ff 60 dc 80 45 8e be ff ff CONTROL TRANSFER 7.3.0
37.0 CTL 21 01 00 02 01 00 1a 00 SET CUR 8.1.0
37.0 OUT 00 00 03 03 15 16 05 00 00 00 00 00 00 00 00 00 20 00 00 48 3f 00 00 04 00 00 ................ ..H?..... 8.2.0
37.0 URB 88 00 08 00 00 00 00 00 28 46 5c b9 71 41 00 00 00 00 00 49 8e be ff ff 60 dc 80 45 8e be ff ff CONTROL TRANSFER 8.3.0
37.0 CTL 01 0b 01 00 01 00 00 00 SET INTERFACE 9.1.0
37.0 URB 50 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 a0 a4 d5 42 8e be ff ff SELECT INTERFACE 9.2.0
37.4 ISOC 02 81 00 00 00 01 21 e4 02 0b b7 2f be 6e 02 ee 97 d1 70 6c e5 cb 9e 56 82 ba 62 ad 1b 94 61 8a ......!..../.n....pl...V..b...a. 10.1.0
分别分析SET和GET 一组。
CTL a1 81 00 01 01 00 1a 00
IN 00 00 03 03 15 16 05 00 00 00 00 00 00 00 00 00 20 00 00 48 3f 00 00 04 00 00
URB 88 00 08 00 00 00 00 00 28 46 5c b9 71 41 00 00 00 00 00 00 00 00 00 00 60 dc 80 45 8e be ff ff
CTL 控制数据:
a1 81 00 01 01 00 1a 00
a1:表示获取接口数据
81:表示GET_CUR
00 01:高位为01,低为为00,表示视频流控制接口选择子CS的VS_PROBE_CONTROL请求。
01 00:表示接口01,表示发向的是视频流接口(视频控制接口VC为0,视频流接口VS为01)。
1a 00 :表示接收数据长度为26个字节。
IN (UVC–>PC)
00 00 03 03 15 16 05 00 00 00 00 00 00 00 00 00 20 00 00 48 3f 00 00 04 00 00
00 00:参照视频流控制接口,dwFrameInterval=0。
03:bFormatIndex=3,表示视频流格式为1-MJPG 2-YUV (上一篇 入门) 3-H264 4-H265
03:bFrameIndex=3,表示分辩率为 1920x1080。
15 16 05 00:0x051615=333333百纳秒,即33.3333ms,即帧间隔为33ms.
00 00:即wKeyFrameRate=0x0000,即只有第一帧是关键帧。
00 00:wPFrameRate=0x0000
00 00:wCompQuality=00
00 00 :wCompQuality=00
00 00:wDelay=00,内部视频流接口延迟(毫秒).
48 3f 00 00:dwMaxVideoFrameSize=0x00003f48=16200
00 0c 00 00 :dwMaxPayloadTransferSize=0x0400=1024.
OUT
00 00 03 03 15 16 05 00 00 00 00 00 00 00 00 00 20 00 00 48 3f 00 00 00 00 00
基本与IN一致。(这里相当于协商 请教输出 H264 1080P 30)
03:bFormatIndex=3, 3-H264
03:bFrameIndex=3,表示分辩率为 1920x1080。
分析H265_1080P_30
37.0 CTL a1 81 00 01 01 00 1a 00 GET CUR 1.1.0
37.0 IN 00 00 01 03 15 16 05 00 00 00 00 00 00 00 00 00 20 00 00 48 3f 00 00 04 00 00 ................ ..H?..... 1.2.0
37.0 URB 88 00 08 00 00 00 00 00 28 46 5c b9 71 41 00 00 00 00 00 00 00 00 00 00 60 dc 80 45 8e be ff ff CONTROL TRANSFER 1.3.0
37.0 CTL 21 01 00 01 01 00 1a 00 SET CUR 2.1.0
37.0 OUT 00 00 04 03 15 16 05 00 00 00 00 00 00 00 00 00 20 00 00 48 3f 00 00 00 00 00 ................ ..H?..... 2.2.0
37.0 URB 88 00 08 00 00 00 00 00 28 46 5c b9 71 41 00 00 00 00 00 df ff ff ff ff 60 dc 80 45 8e be ff ff CONTROL TRANSFER 2.3.0
37.0 CTL a1 81 00 01 01 00 1a 00 GET CUR 3.1.0
37.0 IN 00 00 04 03 15 16 05 00 00 00 00 00 00 00 00 00 20 00 00 48 3f 00 00 04 00 00 ................ ..H?..... 3.2.0
37.0 URB 88 00 08 00 00 00 00 00 28 46 5c b9 71 41 00 00 00 00 00 df ff ff ff ff 60 dc 80 45 8e be ff ff CONTROL TRANSFER 3.3.0
37.0 CTL a1 83 00 01 01 00 1a 00 GET MAX 4.1.0
37.0 IN 00 00 04 03 15 16 05 00 00 00 00 00 00 00 00 00 20 00 00 48 3f 00 00 04 00 00 ................ ..H?..... 4.2.0
37.0 URB 88 00 08 00 00 00 00 00 28 46 5c b9 71 41 00 00 00 00 00 df ff ff ff ff 60 dc 80 45 8e be ff ff CONTROL TRANSFER 4.3.0
37.0 CTL a1 82 00 01 01 00 1a 00 GET MIN 5.1.0
37.0 IN 00 00 04 03 15 16 05 00 00 00 00 00 00 00 00 00 20 00 00 48 3f 00 00 04 00 00 ................ ..H?..... 5.2.0
37.0 URB 88 00 08 00 00 00 00 00 28 46 5c b9 71 41 00 00 00 00 00 df ff ff ff ff 60 dc 80 45 8e be ff ff CONTROL TRANSFER 5.3.0
37.0 CTL 21 01 00 01 01 00 1a 00 SET CUR 6.1.0
37.0 OUT 00 00 04 03 15 16 05 00 00 00 00 00 00 00 00 00 20 00 00 48 3f 00 00 00 00 00 ................ ..H?..... 6.2.0
37.0 URB 88 00 08 00 00 00 00 00 28 46 5c b9 71 41 00 00 00 00 00 df ff ff ff ff 60 dc 80 45 8e be ff ff CONTROL TRANSFER 6.3.0
37.0 CTL a1 81 00 01 01 00 1a 00 GET CUR 7.1.0
37.0 IN 00 00 04 03 15 16 05 00 00 00 00 00 00 00 00 00 20 00 00 48 3f 00 00 04 00 00 ................ ..H?..... 7.2.0
37.0 URB 88 00 08 00 00 00 00 00 28 46 5c b9 71 41 00 00 00 00 00 df ff ff ff ff 60 dc 80 45 8e be ff ff CONTROL TRANSFER 7.3.0
37.0 CTL 21 01 00 02 01 00 1a 00 SET CUR 8.1.0
37.0 OUT 00 00 04 03 15 16 05 00 00 00 00 00 00 00 00 00 20 00 00 48 3f 00 00 04 00 00 ................ ..H?..... 8.2.0
37.0 URB 88 00 08 00 00 00 00 00 28 46 5c b9 71 41 00 00 00 00 00 42 8e be ff ff 60 dc 80 45 8e be ff ff CONTROL TRANSFER 8.3.0
37.0 CTL 01 0b 01 00 01 00 00 00 SET INTERFACE 9.1.0
37.0 URB 50 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 a0 a4 d5 42 8e be ff ff SELECT INTERFACE 9.2.0
CTL 控制数据:
a1 81 00 01 01 00 1a 00
与H264 一致 详见上方
IN (UVC–>PC)
** 00 00 01 03 15 16 05 00 00 00 00 00 00 00 00 00 20 00 00 48 3f 00 00 04 00 00**
只有bFormatIndex 不一样,说明开始输出的 MJPEG视频格式。
OUT
00 00 04 03 15 16 05 00 00 00 00 00 00 00 00 00 20 00 00 48 3f 00 00 00 00 00
03:bFormatIndex=3, 4-H265
03:bFrameIndex=3,表示分辩率为 1920x1080。
请求协商为H265,经协商后 后面一直为H265