Windows下USB百科
+ -

Windows操作系统USB主机如何管理UVC视频的USB带宽?

2021-11-04 564 0

Windows操作系统的视频宽带管理是由视频类驱动usbvideo.sys来管理的。对于USB带宽的调整,是通过同步传输的备用接口来实现的。当一个设备从一个非0备用接口切换至另一个非0备用接口时,USB主机需要对UVC视频流带宽进行重新配置,在这过程中需要停止原来的同步传输,重新开启新的同步传输实现对UVC视频带宽的动态调整。

UVC视频流的带宽调整是原子操作的,当然调整的前提可以满足新的带宽。在进行带宽调整的过程中新的带宽不满足需求,则调整失败,并且并不保留老的带宽,所以需要重新设置老的备用接口实现带宽的恢复。

备用接口的选择是通过端口驱动程序(usbport.sys)序列化实现的。

如本群中有一同学,同时打开2个UVCB摄像头,但是由于第一个UVC摄像头已经使用了部分USB带宽,导致打开第二个摄像头的时候,设备请求的带宽而USB总线无法满足,导致打开摄像头失败。使用bushound抓包如下:

Device  Phase  Data                      Description  
------  -----  ------------------------  -------------
  23.0  CTL    21 01 00 05  00 02 01 00  SET CUR      
  23.0  OUT    01                        .            
  23.0  CTL    a1 81 00 01  01 00 1a 00  GET CUR      
  23.0  IN     00 00 01 01  80 1a 06 00  ........     
               00 00 00 00  00 00 1e 00  ........     
               00 00 00 00  00 00 00 00  ........     
               00 00                     ..           
  23.0  CTL    a1 83 00 01  01 00 1a 00  GET MAX      
  23.0  IN     00 00 01 01  80 1a 06 00  ........     
               00 00 00 00  00 00 00 00  ........     
               00 00 00 00  00 00 00 00  ........     
               00 00                     ..           
  23.0  CTL    a1 82 00 01  01 00 1a 00  GET MIN      
  23.0  IN     00 00 01 01  80 1a 06 00  ........     
               00 00 00 00  00 00 00 00  ........     
               00 00 00 00  00 00 00 00  ........     
               00 00                     ..           
  23.0  CTL    21 01 00 01  01 00 1a 00  SET CUR      
  23.0  OUT    00 00 01 0a  15 16 05 00  ........     
               00 00 00 00  00 00 1e 00  ........     
               00 00 00 00  00 00 00 00  ........     
               00 00                     ..           
  23.0  CTL    a1 81 00 01  01 00 1a 00  GET CUR      
  23.0  IN     00 00 01 0a  15 16 05 00  ........     
               00 00 00 00  00 00 1e 00  ........     
               00 00 00 60  09 00 00 0c  ...`....     
               00 00                     ..           
  23.0  CTL    a1 83 00 01  01 00 1a 00  GET MAX      
  23.0  IN     00 00 01 0a  15 16 05 00  ........     
               00 00 00 00  00 00 00 00  ........     
               00 00 00 60  09 00 00 0c  ...`....     
               00 00                     ..           
  23.0  CTL    a1 82 00 01  01 00 1a 00  GET MIN      
  23.0  IN     00 00 01 0a  15 16 05 00  ........     
               00 00 00 00  00 00 00 00  ........     
               00 00 00 60  09 00 00 0c  ...`....     
               00 00                     ..           
  23.0  CTL    21 01 00 01  01 00 1a 00  SET CUR      
  23.0  OUT    00 00 01 0a  15 16 05 00  ........     
               00 00 00 00  00 00 1e 00  ........     
               00 00 00 60  09 00 00 00  ...`....     
               00 00                     ..           
  23.0  CTL    a1 81 00 01  01 00 1a 00  GET CUR      
  23.0  IN     00 00 01 0a  15 16 05 00  ........     
               00 00 00 00  00 00 1e 00  ........     
               00 00 00 60  09 00 00 0c  ...`....     
               00 00                     ..           
  23.0  CTL    21 01 00 02  01 00 1a 00  SET CUR      
  23.0  OUT    00 00 01 0a  15 16 05 00  ........     
               00 00 00 00  00 00 1e 00  ........     
               00 00 00 60  09 00 00 0c  ...`....     
               00 00                     ..           
  23.0  CTL    01 0b 06 00  01 00 00 00  SET INTERFACE
  23.0  USTS   80000700                  no bandwidth 
  23.0  CTL    01 0b 00 00  01 00 00 00  SET INTERFACE

可以看到,选择接口时,USB状态返回80000700,即带宽不足,这时USBvideo会关闭摄像头即自动选择备用接口为0的接口。

带宽不足的解决方案

  • 降低码率,如分辨率,帧率,使用压缩格式的数据格式如MJPG,H264
  • 在PC机中增加一条USB总线,可以采用PCIE转USB控制器,用新的USB总线来挂接另一条设备
  • 更换支持超高速的设备和主机如USB3.2GEN1/GEN2等支持大带宽的设备和主机
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 篇笔记 写笔记

USB数据传输方式及带宽占用率对比
USB定义了四种传输类型:控制传输同步传输中断传输批量传输USB传输有四种传输类型使用的事务类型各不相同。其中批量传输、同步传输每次传输需要一个或多个事务,中断传输每次传输只需要一个事务,控制传输包括三个过程(建立过程、数据过程、状态过程),建立过程和状态过程分别需要一个事务,数据过程则可能包......
USB 中断端点的高速高带宽
对于中断事务,如果中断端点在微帧其间NAK了事务,则表示设备端数据没有准备好或设备无数据可传,主机需要放弃本次传输,在下一个微帧再发起事务。如果设备的中断端点超时了该事务,则主机需要重试该事务。端点描述符中指定了该中断端点在一个微帧其间支持的最大事务个数。如果未达到每个微帧的最大事务数,主机控制器可......
USB 高速高带宽端点wMaxPacketSize
USB的端点可以设置为高速高带宽端点。我们知道,USB的数据传输类型有4种,分别为控制传输,中断传输,批量传输和同步传输。而端点类型与之要对应。除过控制传输外,其余三种传输使用于应用的数据传输。USB使用端点描述符的wMaxPacketSize来配置端点为高速高带宽端点,主要表现在bit11-12,......
Windows操作系统USB主机如何管理UVC视频的USB带宽?
Windows操作系统的视频宽带管理是由视频类驱动usbvideo.sys来管理的。对于USB带宽的调整,是通过同步传输的备用接口来实现的。当一个设备从一个非0备用接口切换至另一个非0备用接口时,USB主机需要对UVC视频流带宽进行重新配置,在这过程中需要停止原来的同步传输,重新开启新的同步传输实现......
USB带宽分配管理规则
USB主机负责管理总线的带宽。这是在配置同步和中断端点时的枚举时以及在总线的整个操作过程中完成的。该规范对总线进行了限制,允许为全速总线上的周期传输(中断和同步)分配不超过 90% 的任何帧。在高速总线上,这个限制减少到不超过 80% 的微帧可以分配给周期传输。因此,如果有一个具有周期性传输的高度......
USB2.0设备的带宽特征
USB2.0规范是可以认为是基于物理电气VBUS,D+,D-和GND信号的最后一个版本规范,其对这4根信号的性能压榨也到了极致。USB3.0规范及后续版本采用的是RX/TX的差分信号全双工信号,并且硬件的编码规则由NRZI变成了8/10B或128b/132b编码了。USB2.0规范在定义之初......
LINUX&UVC相机打开时的带宽选择
UVC规范明确指出,传输UVC图像数据的端点既可以是同步传输,也可以是批量传输。批量传输对于批量传输,其实根本不存在带宽选择的问题的。只要是批量传输,端点都是可以使能工作的,但是数据传输的效能是根据USB总线上的带宽利用率而决定的。因为USB批量占用的是周期性传输和控制传输剩余的带宽。USB带......
关注公众号
  • HID人机交互
  • Linux&USB
  • UAC音频
  • TYPE-C
  • USB规范
  • USB大容量存储
  • USB百科
  • USB周边
  • UVC摄像头
  • Windows系统USB
  • 音视频博客
  • 取消
    感谢您的支持,我会继续努力的!
    扫码支持
    扫码打赏,你说多少就多少

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

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