UVC 之 使用USB抓包 调试分析 编程

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 请求
OffsetFieldSizeValueDescription
0bmRequestType10x21D7: 0 = Host to device D6…5: 01 = Class request D4…0: 00001 = Recipient is interface
1bRequest10x01SET_CUR
2wValue20x0100Set the input selector control (01) of this unit.
4wIndex20x0400Selector Unit ID (04) and VideoControl interface ID (00)
6wLength20x0001Parameter block length
get 请求
OffsetFieldSizeValueDescription
0bmRequestType10xA1D7: 1 = Device To host D6…5: 01 = Class request D4…0: 00001 = Recipient is interface
1bRequest10x81 0x82 0x83 0x84 0x86GET_CUR GET_MIN GET_MAX GET_RES GET_INFO
2wValue20x0100Get the input selector control (01) of this unit.
4wIndex20x0400Selector Unit ID (04) and VideoControl interface ID (00)
6wLength20x0001Parameter 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

喜欢作者的文章 或者探讨 关注如下公众号

在这里插入图片描述

  • 3
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lin_AIOS

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值