UVC摄像头技术笔记
+ -

UVC摄像头批量传输的StreamOn和StreamOff

2021-06-02 2414 1

UVC规范中,UVC摄像头视频数据的传输方式支持两种,分别为批量传输同步传输
UVC摄像头数据传输的格式按负载数据头的方式按帧进行打包传输。
UVC负载数据头

根据USB规范可知,同步传输方式是只要带中带有同步端点的接口,系统会定时从设备中读取数据,无论设备中是否有数据。而如要要停止数据的传输,只需要选中不带有同步端点的接口即可。

USB同步传输这种灵活的数据传输方式是依靠视频流接口的转换接口即我们常说的备份接口实现的。在默认情况下数据不传输时,视频数据流接口和备份接口ID为0,其它的备份接口是可根据视频数据传输的大小可按需选择。当然一般的UVC摄像头只有一个视频流备份接口,该接口用于视频数据的传输时的应用。

但对于没有转换接口的批量传输即我们所说的BULK传输方式,是怎么样的呢?
为了弄清问题,本人对手中的一个使用批量传输方式的H264摄像头进行抓包分析,分别抓取摄像头的打开与关闭时的包。

打开摄像头StreamOn

Device  Length   Phase  Data                                                  Description                                                     
------  --------  -----  ----------------------------------------------------------------
43.0        CTL    a1 81 00 01  02 00 22 00                                   GET CUR       
43.0    34  IN     01 00 01 01  15 16 05 00  00 00 00 00  00 00 00 00  
                   00 00 00 00  50 00 00 20  00 00 00 00  00 00 03 01  00 01                
43.0        CTL    21 01 00 01  02 00 22 00                                   SET CUR       
43.0    34  OUT    01 00 01 01  15 16 05 00  00 00 00 00  00 00 00 00
                   00 00 00 00  50 00 00 00  00 00 00 00  00 00 03 01  00 01                
43.0        CTL    a1 81 00 01  02 00 22 00                                   GET CUR       
43.0    34  IN     01 00 01 01  15 16 05 00  00 00 00 00  00 00 00 00
                   00 00 00 00  50 00 00 20  00 00 00 00  00 00 03 01  00 01                
43.0        CTL    a1 83 00 01  02 00 22 00                                   GET MAX       
43.0    34  IN     01 00 01 01  15 16 05 00  00 00 00 00  00 00 00 00 
                   00 00 00 00  50 00 00 20  00 00 00 00  00 00 03 01  00 01                
43.0        CTL    a1 82 00 01  02 00 22 00                                   GET MIN       
43.0    34  IN     01 00 01 01  15 16 05 00  00 00 00 00  00 00 00 00
                   00 00 00 00  50 00 00 20  00 00 00 00  00 00 03 01  00 01                
43.0        CTL    21 01 00 02  02 00 22 00                                   SET CUR       
43.0    34  OUT    01 00 01 01  15 16 05 00  00 00 00 00  00 00 00 00
                   00 00 00 00  50 00 00 20  00 00 00 00  00 00 03 01  00 01                
43.0        CTL    01 0b 00 00  02 00 00 00                                   SET INTERFACE

从抓包的过程可以看到,前面是常见打开UVC摄像头支持的视频格式信息的获取。该摄像头只支持一种数据格式,一种分辨率。数据协商完成后,使用视频流接口的VS_COMMIT_CONTROL选择子提交给设备,让其以指定的数据格式进行数据采样。提交完成后,紧跟着的是SET_INTERFACE请求,用于选择该接口进行数据传输。

关闭摄像头StreamOff

  43.3            RESET   
  43.0            CTL    01 0b 00 00  02 00 00 00   SET INTERFACE

可以看到,先是视频数据流传输的端点3进行复位,接着是SET_INTERFACE请求请求。

从以上可以看到,无论UVC摄像头是按批量传输还是同步传输,都会进行有一个SET_INTERFACE

关于SET_INTERFACE,在USB规范中定义的是对设备的接口选择,这样系统总线会返回该接口的USBD_INTERFACE_INFORMATION信息,该结构体中包含其端点的USBD_PIPE_INFORMATION。在Windows环境下,对于同一接口,每次选择同一接口都会返回不同的信息,这样导致上一次的信息失效(BAD FLAG INFORMATION).通过这这样也实现了类似同步转换接口的功能。

typedef struct _USBD_INTERFACE_INFORMATION {
    USHORT Length;
    UCHAR InterfaceNumber;
    UCHAR AlternateSetting;
    UCHAR Class;
    UCHAR SubClass;
    UCHAR Protocol;
    UCHAR Reserved;
    USBD_INTERFACE_HANDLE InterfaceHandle;
    ULONG NumberOfPipes;
    USBD_PIPE_INFORMATION Pipes[1];
} USBD_INTERFACE_INFORMATION, *PUSBD_INTERFACE_INFORMATION;
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特定类请求get cur返回长度是26或者是34的是什么?
从返回的长度来看,你应该是在应用打开摄像头,进行视频格式及图形分辨率协商返回的数据长度.UVC视频流接口这两个特别重要的选择子,分别用于协商过程和提交数据格式,让固件开始发送数据。ControlSelector ValueVS_PROBE_CONTROL0x01VS_COMMIT_CONTROL0x......
UVC摄像头批量传输的StreamOn和StreamOff
在UVC规范中,UVC摄像头视频数据的传输方式支持两种,分别为批量传输和同步传输。UVC摄像头数据传输的格式按负载数据头的方式按帧进行打包传输。根据USB规范可知,同步传输方式是只要带中带有同步端点的接口,系统会定时从设备中读取数据,无论设备中是否有数据。而如要要停止数据的传输,只需要选中不带有同步......
USB标准请求、类特定请求总结
做USB开发,最常见的就是USB的控制请求的那8个字节的分析,如果抓包工具有协议分析那还好说,但是如果不带速协议分析,那其实还是挺郁闷的。所以说,如何快速的通过USB请求的那几个字段定位出是何请求,是可以大大的提高我们的协议分析效率的。USB的请求这里包括USB的标准请求和特定类请求,其包括以下几......
UAC 特定类请求
特定类请求一般用于设置或获取音频控制。这些控制又分为两大部分:音频控制请求:对音频控制单元或终端进行控制。音频流请求: 如对音频流控制的请求,如音频采相率等。音频设备类也支持其他特定于类的请求:内存请求(Memory Request),每个可寻址的实体或终端,可导出一个内存映射接口。提供对该实体内存......
UVC批量传输中的dwMaxVideoFrameSize和dwMaxPayloadTransferSize关系
上一节看了UVC等时/同步传输的关系,这里我们介绍一相批量传输批量传输在这里相对于同步传输要简单的多。uvc_video_start_transfer中的代码如下: else { /* Bulk endpoint, proceed to URB initialization. */ ......
USB3.2超高速的标准请求
USB3.2超高速请求相对于USB2.0的标准请求,多了一些新的标准请求。当然USB2.0的标准请求也适用于USB3.2的标准请求。USB3.2超高速规范增加的新的标准请求:bRequestValueSET_ENCRYPTION13GET_ENCRYPTION14SET_HANDSHAKE15GET......
【UVC调试笔记】第一个GET CUR请求产生babble detected的原因排查
【前言】开通blog的目的有两个:一是记录UVC调试过程中遇到的问题和解决方案,方便自己review二是给广大开发者提供一些解决问题的思路故障现象:枚举完以后,打开videocap,从bushoud上抓包,可以看出第一个GET CUR会产生一个babble detected的error排查过程:通......
USB超高速批量传输
批量传输类型是用来支持想要跟相当大的海量数据通信设备,传输能使用任何可用的超速带宽。超速批量传输功能端点提供以下:对基于有限带宽的超速总线访问保证数据的发送,但是不保证带宽和发送时间超速维持下面的批量传输管道特征:对批量传输管道通信流没有强制固定的数据结构批量传输管道是一个流式管道,因此总是有通信流......
USB 标准请求
USB定义了8个字节的标准请求,通过这些请求,可以对设备的状态进行更改或对设备进行枚举。USB的标准请求的数据传输方式都是控制传输方式,所以使用的端点是设备的默认端点0。USB这8个字节的的控制请求不包括传输过程中的数据,但包括了控制请求的数据长度。当数据长度为不为0时,设备或主机向对方传输相应长......
USB 批量/块传输方式
USB协议规定了四种传输类型:控制传输、批量传输、同步传输、中断传输。批量传输一般用于批量的和非实时的数据传输,通俗的来说就是用于数据量大但对时间要求又不高的场合的一种传输方式,类似用于USB打印机和USB扫描仪等等。批量传输使用批量传输事务,一次批量传输事务分为三个阶段:令牌包阶段、数据包......
SET_CUR/GET_CUR
设置请求SET_CUR设置请求用于设置视频功能的相关属性,这些属性一般由相关的端点、接口来实现。bmRequestType(1)bRequest(1)wValue(2)wIndex(2)wLength(2)Data(0~N)00100001(接口或实体)————— 001......
HID报表描述符与设备描述符、配置描述符、字符串描述符的通讯格式对比
报表描述符是USB HID规范中一个很重要的概念。USB HID设备报表描述符内容表述了该HID设备的功能及数据传输的格式。USB HID报表描述符在概念上和设备描述符,配置描述符,接口描述符,端点描述符和其它USB设备描述符类似,但是还是有一些细微的区别。我里我们做一个简要的区别:设备描述符、......
U盘枚举失败-该设备无法启动(GET_MAX_LUN请求)
群里有人用STM32搞了一个U盘,但是U盘在插入电脑后在设备管理器是枚举失败。我让他看一下设备状态:又是熟悉的错误码10,表示设备启动失败。设备的启动失败,一般在设备获取描述符获取之后,初始会失败,我之前在弄USB虚拟鼠标的时候也遇到此类情况。不过由于这个设备是U盘,本人还没有研究USB存储协议,只......
UVC摄像头VS_PROBE_CONTROL和VS_COMMIT_CONTROL对应的数据结构定义
UVC 视频流接口控制请求 http://www.usbzh.com/article/detail-45.html 需要使用一些数据字段进行通讯,如UVC1.0是26个字节的长度,UVC1.1是34字节的长度,UVC1.5是48字节的长度。这里我们定义一个通用长48字节结构体,对应VS_PROBE_......
BUSHOUND抓包stall pid的USTS c0000004错误
对USB设备进行数据分析,使用最多的也就是BUSHOUND了,不过经常遇到一个问题就是 USTS c0000004 stall pid 错误。USTS c0000004 stall pid在本站中搜......
关注公众号
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

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

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