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/其他设备

然后右键 选择你需要选项 如下图

android uvc 画面延迟 安卓uvc软件_抓包工具

抓包工具使用

安装下载包中指导 选择设备 进行抓包。

android uvc 画面延迟 安卓uvc软件_视频流_02

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),后面为有效数据。

android uvc 画面延迟 安卓uvc软件_android uvc 画面延迟_03

控制请求 (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