UVC摄像头技术笔记
+ -

USB3.0相机没有超高速端点伴随描述符引起该媒体无法播放

2025-02-11 35 0

前几天有人给了一个UVC相机,支持USB3.0协议,只不过因为种种原因,接入系统中,有一大半概率会被识别成USB2.0。本人在此之前也没有过多的问题,以为就是一个USB2.0相机,所以就继续做后续的windows驱动开发。驱动开发的功能也很简单,就是通过根据需要屏蔽配置描述符中不需要的格式和分辨率,只保留指定需要的。

别问需求为什么是这样的,需求就是这样子任性的。

其实从需求上来讲,方案有两种:
第一种是直接修改UVC输入头描述符的bNumFormats字段,然后再根据需要修改VS格式描述符中的bNumberFrameDescriptor字段。但他的前提条件是必须的格式和分辨率必须相对于其它的格式分辨率,必须置于最前端。这种直接篡改配置描述符的方法是最简单的,但是也是受固件配无思无虑描述符的设计限制。但是,你是知道的,求人办事,讲那么多,最后往往是一地鸡毛,更加上是远程沟通。
第二种是直接根据原有的配置描述符,直接伪造假假的配置描述符给主机,这样主机以为就只有伪造的配置描述符中描述的格式和分辨率,其它的没有上报,主机也就不知道,所以也就无从打开。另外,伪造配置描述符就如同虚拟相机一般,那对我们来说就如同呼吸一样自由自在。

说干就干,经过编码,调试,终于大功告成。按理说应该就可以了,但是实际上需求的变化,更换了硬件和更新了固件,这次拿到了正主USB3.0的设备。将原来的驱动加载上,用potplayer打开相机,竟出现无法显示图像:该媒体无法播放。
该媒体无法播放

通过BUSHOUND抓包,发现了大量频繁的格式分辨率协商,但最终失败。


Device  Length    Phase  Data                      Description       Cmd.Phase.Ofs(rep)  Time        
------  --------  -----  ------------------------  ----------------  ------------------  ------------
  60.0            CTL    a1 81 00 01  06 00 1a 00  GET CUR                  1.1.0        10:33:26.811  
  60.0        26  IN     01 00 01 01  15 16 05 00  ........                 1.2.0        10:33:26.811  
                         00 00 00 00  00 00 00 00  ........                 1.2.8                      
                         00 00 00 46  05 00 00 48  ...F...H                 1.2.16                     
                         00 00                     ..                       1.2.24                     
  60.0            CTL    21 01 00 01  06 00 1a 00  SET CUR                  2.1.0        10:33:26.813  
  60.0        26  OUT    01 00 01 01  15 16 05 00  ........                 2.2.0        10:33:26.813  
                         00 00 00 00  00 00 00 00  ........                 2.2.8                      
                         00 00 00 46  05 00 00 00  ...F....                 2.2.16                     
                         00 00                     ..                       2.2.24                     
  60.0            CTL    a1 81 00 01  06 00 1a 00  GET CUR                  3.1.0        10:33:26.813  
  60.0        26  IN     01 00 01 01  15 16 05 00  ........                 3.2.0        10:33:26.814  
                         00 00 00 00  00 00 00 00  ........                 3.2.8                      
                         00 00 00 46  05 00 00 48  ...F...H                 3.2.16                     
                         00 00                     ..                       3.2.24                     
  60.0            CTL    a1 83 00 01  06 00 1a 00  GET MAX                  4.1.0        10:33:26.814  
  60.0        26  IN     01 00 03 02  15 16 05 00  ........                 4.2.0        10:33:26.814  
                         00 00 00 00  00 00 00 00  ........                 4.2.8                      
                         00 00 00 20  fd 00 00 48  ... ...H                 4.2.16                     
                         00 00                     ..                       4.2.24                     
  60.0            CTL    a1 82 00 01  06 00 1a 00  GET MIN                  5.1.0        10:33:26.814  
  60.0        26  IN     01 00 01 01  15 16 05 00  ........                 5.2.0        10:33:26.814  
                         00 00 00 00  00 00 00 00  ........                 5.2.8                      
                         00 00 00 46  05 00 00 48  ...F...H                 5.2.16                     
                         00 00                     ..                       5.2.24                     
  60.0            CTL    a1 81 00 01  06 00 1a 00  GET CUR                  6.1.0        10:33:26.815  
  60.0        26  IN     01 00 01 01  15 16 05 00  ........                 6.2.0        10:33:26.815  
                         00 00 00 00  00 00 00 00  ........                 6.2.8                      
                         00 00 00 46  05 00 00 48  ...F...H                 6.2.16                     
                         00 00                     ..                       6.2.24                     
  60.0            CTL    21 01 00 01  06 00 1a 00  SET CUR                  7.1.0        10:33:26.815  
  60.0        26  OUT    01 00 01 01  15 16 05 00  ........                 7.2.0        10:33:26.818  
                         00 00 00 00  00 00 00 00  ........                 7.2.8                      
                         00 00 00 46  05 00 00 00  ...F....                 7.2.16                     
                         00 00                     ..                       7.2.24                     
  60.0            CTL    a1 81 00 01  06 00 1a 00  GET CUR                  8.1.0        10:33:26.818  
  60.0        26  IN     01 00 01 01  15 16 05 00  ........                 8.2.0        10:33:26.818  
                         00 00 00 00  00 00 00 00  ........                 8.2.8                      
                         00 00 00 46  05 00 00 48  ...F...H                 8.2.16                     
                         00 00                     ..                       8.2.24                     
  60.0            CTL    a1 83 00 01  06 00 1a 00  GET MAX                  9.1.0        10:33:26.818  
  60.0        26  IN     01 00 03 02  15 16 05 00  ........                 9.2.0        10:33:26.818  
                         00 00 00 00  00 00 00 00  ........                 9.2.8                      
                         00 00 00 20  fd 00 00 48  ... ...H                 9.2.16                     
                         00 00                     ..                       9.2.24                     
  60.0            CTL    a1 82 00 01  06 00 1a 00  GET MIN                 10.1.0        10:33:26.820  
  60.0        26  IN     01 00 01 01  15 16 05 00  ........                10.2.0        10:33:26.820  
                         00 00 00 00  00 00 00 00  ........                10.2.8                      
                         00 00 00 46  05 00 00 48  ...F...H                10.2.16                     
                         00 00                     ..                      10.2.24                     
  60.0            CTL    a1 81 00 01  06 00 1a 00  GET CUR                 11.1.0        10:33:26.820  
  60.0        26  IN     01 00 01 01  15 16 05 00  ........                11.2.0        10:33:26.822  
                         00 00 00 00  00 00 00 00  ........                11.2.8                      
                         00 00 00 46  05 00 00 48  ...F...H                11.2.16                     
                         00 00                     ..                      11.2.24                     
  60.0            CTL    21 01 00 01  06 00 1a 00  SET CUR                 12.1.0        10:33:26.822  
  60.0        26  OUT    01 00 01 01  15 16 05 00  ........                12.2.0        10:33:26.822  
                         00 00 00 00  00 00 00 00  ........                12.2.8                      
                         00 00 00 46  05 00 00 00  ...F....                12.2.16                     
                         00 00                     ..                      12.2.24                     
  60.0            CTL    a1 81 00 01  06 00 1a 00  GET CUR                 13.1.0        10:33:26.822  
  60.0        26  IN     01 00 01 01  15 16 05 00  ........                13.2.0        10:33:26.822  
                         00 00 00 00  00 00 00 00  ........                13.2.8                      
                         00 00 00 46  05 00 00 48  ...F...H                13.2.16                     
                         00 00                     ..                      13.2.24                     
  60.0            CTL    a1 83 00 01  06 00 1a 00  GET MAX                 14.1.0        10:33:26.824  
  60.0        26  IN     01 00 03 02  15 16 05 00  ........                14.2.0        10:33:26.824  
                         00 00 00 00  00 00 00 00  ........                14.2.8                      
                         00 00 00 20  fd 00 00 48  ... ...H                14.2.16                     
                         00 00                     ..                      14.2.24                     
  60.0            CTL    a1 82 00 01  06 00 1a 00  GET MIN                 15.1.0        10:33:26.824  
  60.0        26  IN     01 00 01 01  15 16 05 00  ........                15.2.0        10:33:26.824  
                         00 00 00 00  00 00 00 00  ........                15.2.8                      
                         00 00 00 46  05 00 00 48  ...F...H                15.2.16                     
                         00 00                     ..                      15.2.24                     
  60.0            CTL    a1 81 00 01  06 00 1a 00  GET CUR                 16.1.0        10:33:26.824  
  60.0        26  IN     01 00 01 01  15 16 05 00  ........                16.2.0        10:33:26.824  
                         00 00 00 00  00 00 00 00  ........                16.2.8                      
                         00 00 00 46  05 00 00 48  ...F...H                16.2.16                     
                         00 00                     ..                      16.2.24                     
  60.0            CTL    21 01 00 01  06 00 1a 00  SET CUR                 17.1.0        10:33:26.826  
  60.0        26  OUT    01 00 01 01  15 16 05 00  ........                17.2.0        10:33:26.826  
                         00 00 00 00  00 00 00 00  ........                17.2.8                      
                         00 00 00 46  05 00 00 00  ...F....                17.2.16                     
                         00 00                     ..                      17.2.24                     
  60.0            CTL    a1 81 00 01  06 00 1a 00  GET CUR                 18.1.0        10:33:26.826  
  60.0        26  IN     01 00 01 01  15 16 05 00  ........                18.2.0        10:33:26.826  
                         00 00 00 00  00 00 00 00  ........                18.2.8                      
                         00 00 00 46  05 00 00 48  ...F...H                18.2.16                     
                         00 00                     ..                      18.2.24                     
  60.0            CTL    a1 83 00 01  06 00 1a 00  GET MAX                 19.1.0        10:33:26.826  
  60.0        26  IN     01 00 03 02  15 16 05 00  ........                19.2.0        10:33:26.826  
                         00 00 00 00  00 00 00 00  ........                19.2.8                      
                         00 00 00 20  fd 00 00 48  ... ...H                19.2.16                     
                         00 00                     ..                      19.2.24                     
  60.0            CTL    a1 82 00 01  06 00 1a 00  GET MIN                 20.1.0        10:33:26.828  
  60.0        26  IN     01 00 01 01  15 16 05 00  ........                20.2.0        10:33:26.828  
                         00 00 00 00  00 00 00 00  ........                20.2.8                      
                         00 00 00 46  05 00 00 48  ...F...H                20.2.16                     
                         00 00                     ..                      20.2.24                     
  60.0            CTL    a1 81 00 01  06 00 1a 00  GET CUR                 21.1.0        10:33:26.828  
  60.0        26  IN     01 00 01 01  15 16 05 00  ........                21.2.0        10:33:26.828  
                         00 00 00 00  00 00 00 00  ........                21.2.8                      
                         00 00 00 46  05 00 00 48  ...F...H                21.2.16                     
                         00 00                     ..                      21.2.24                     
  60.0            CTL    21 01 00 01  06 00 1a 00  SET CUR                 22.1.0        10:33:26.830  
  60.0        26  OUT    01 00 01 01  15 16 05 00  ........                22.2.0        10:33:26.830  
                         00 00 00 00  00 00 00 00  ........                22.2.8                      
                         00 00 00 46  05 00 00 00  ...F....                22.2.16                     
                         00 00                     ..                      22.2.24                     
  60.0            CTL    a1 81 00 01  06 00 1a 00  GET CUR                 23.1.0        10:33:26.830  
  60.0        26  IN     01 00 01 01  15 16 05 00  ........                23.2.0        10:33:26.830  
                         00 00 00 00  00 00 00 00  ........                23.2.8                      
                         00 00 00 46  05 00 00 48  ...F...H                23.2.16                     
                         00 00                     ..                      23.2.24                     
  60.0            CTL    a1 83 00 01  06 00 1a 00  GET MAX                 24.1.0        10:33:26.830  
  60.0        26  IN     01 00 03 02  15 16 05 00  ........                24.2.0        10:33:26.830  
                         00 00 00 00  00 00 00 00  ........                24.2.8                      
                         00 00 00 20  fd 00 00 48  ... ...H                24.2.16                     
                         00 00                     ..                      24.2.24                     
  60.0            CTL    a1 82 00 01  06 00 1a 00  GET MIN                 25.1.0        10:33:26.832  
  60.0        26  IN     01 00 01 01  15 16 05 00  ........                25.2.0        10:33:26.832  
                         00 00 00 00  00 00 00 00  ........                25.2.8                      
                         00 00 00 46  05 00 00 48  ...F...H                25.2.16                     
                         00 00                     ..                      25.2.24                     
  60.0            CTL    a1 81 00 01  06 00 1a 00  GET CUR                 26.1.0        10:33:27.450  
  60.0        26  IN     01 00 01 01  15 16 05 00  ........                26.2.0        10:33:27.450  
                         00 00 00 00  00 00 00 00  ........                26.2.8                      
                         00 00 00 46  05 00 00 48  ...F...H                26.2.16                     
                         00 00                     ..                      26.2.24                     
  60.0            CTL    21 01 00 01  06 00 1a 00  SET CUR                 27.1.0        10:33:27.451  
  60.0        26  OUT    01 00 01 01  15 16 05 00  ........                27.2.0        10:33:27.452  
                         00 00 00 00  00 00 00 00  ........                27.2.8                      
                         00 00 00 46  05 00 00 00  ...F....                27.2.16                     
                         00 00                     ..                      27.2.24                     
  60.0            CTL    a1 81 00 01  06 00 1a 00  GET CUR                 28.1.0        10:33:27.452  
  60.0        26  IN     01 00 01 01  15 16 05 00  ........                28.2.0        10:33:27.452  
                         00 00 00 00  00 00 00 00  ........                28.2.8                      
                         00 00 00 46  05 00 00 48  ...F...H                28.2.16                     
                         00 00                     ..                      28.2.24                     
  60.0            CTL    a1 83 00 01  06 00 1a 00  GET MAX                 29.1.0        10:33:27.453  
  60.0        26  IN     01 00 03 02  15 16 05 00  ........                29.2.0        10:33:27.453  
                         00 00 00 00  00 00 00 00  ........                29.2.8                      
                         00 00 00 20  fd 00 00 48  ... ...H                29.2.16                     
                         00 00                     ..                      29.2.24                     
  60.0            CTL    a1 82 00 01  06 00 1a 00  GET MIN                 30.1.0        10:33:27.453  
  60.0        26  IN     01 00 01 01  15 16 05 00  ........                30.2.0        10:33:27.453  
                         00 00 00 00  00 00 00 00  ........                30.2.8                      
                         00 00 00 46  05 00 00 48  ...F...H                30.2.16                     
                         00 00                     ..                      30.2.24                     
  60.0            CTL    a1 81 00 01  06 00 1a 00  GET CUR                 31.1.0        10:33:27.547  
  60.0        26  IN     01 00 01 01  15 16 05 00  ........                31.2.0        10:33:27.547  
                         00 00 00 00  00 00 00 00  ........                31.2.8                      
                         00 00 00 46  05 00 00 48  ...F...H                31.2.16                     
                         00 00                     ..                      31.2.24                     
  60.0            CTL    21 01 00 01  06 00 1a 00  SET CUR                 32.1.0        10:33:27.550  
  60.0        26  OUT    01 00 01 01  15 16 05 00  ........                32.2.0        10:33:27.550  
                         00 00 00 00  00 00 00 00  ........                32.2.8                      
                         00 00 00 46  05 00 00 00  ...F....                32.2.16                     
                         00 00                     ..                      32.2.24                     
  60.0            CTL    a1 81 00 01  06 00 1a 00  GET CUR                 33.1.0        10:33:27.550  
  60.0        26  IN     01 00 01 01  15 16 05 00  ........                33.2.0        10:33:27.550  
                         00 00 00 00  00 00 00 00  ........                33.2.8                      
                         00 00 00 46  05 00 00 48  ...F...H                33.2.16                     
                         00 00                     ..                      33.2.24                     
  60.0            CTL    a1 83 00 01  06 00 1a 00  GET MAX                 34.1.0        10:33:27.552  
  60.0        26  IN     01 00 03 02  15 16 05 00  ........                34.2.0        10:33:27.552  
                         00 00 00 00  00 00 00 00  ........                34.2.8                      
                         00 00 00 20  fd 00 00 48  ... ...H                34.2.16                     
                         00 00                     ..                      34.2.24                     
  60.0            CTL    a1 82 00 01  06 00 1a 00  GET MIN                 35.1.0        10:33:27.552  
  60.0        26  IN     01 00 01 01  15 16 05 00  ........                35.2.0        10:33:27.552  
                         00 00 00 00  00 00 00 00  ........                35.2.8                      
                         00 00 00 46  05 00 00 48  ...F...H                35.2.16                     
                         00 00                     ..                      35.2.24                     
  60.0            CTL    a1 81 00 01  06 00 1a 00  GET CUR                 36.1.0        10:33:27.554  
  60.0        26  IN     01 00 01 01  15 16 05 00  ........                36.2.0        10:33:27.554  
                         00 00 00 00  00 00 00 00  ........                36.2.8                      
                         00 00 00 46  05 00 00 48  ...F...H                36.2.16                     
                         00 00                     ..                      36.2.24                     
  60.0            CTL    21 01 00 01  06 00 1a 00  SET CUR                 37.1.0        10:33:27.554  
  60.0        26  OUT    01 00 01 01  15 16 05 00  ........                37.2.0        10:33:27.554  
                         00 00 00 00  00 00 00 00  ........                37.2.8                      
                         00 00 00 46  05 00 00 00  ...F....                37.2.16                     
                         00 00                     ..                      37.2.24                     
  60.0            CTL    a1 81 00 01  06 00 1a 00  GET CUR                 38.1.0        10:33:27.554  
  60.0        26  IN     01 00 01 01  15 16 05 00  ........                38.2.0        10:33:27.555  
                         00 00 00 00  00 00 00 00  ........                38.2.8                      
                         00 00 00 46  05 00 00 48  ...F...H                38.2.16                     
                         00 00                     ..                      38.2.24                     
  60.0            CTL    a1 83 00 01  06 00 1a 00  GET MAX                 39.1.0        10:33:27.555  
  60.0        26  IN     01 00 03 02  15 16 05 00  ........                39.2.0        10:33:27.555  
                         00 00 00 00  00 00 00 00  ........                39.2.8                      
                         00 00 00 20  fd 00 00 48  ... ...H                39.2.16                     
                         00 00                     ..                      39.2.24                     
  60.0            CTL    a1 82 00 01  06 00 1a 00  GET MIN                 40.1.0        10:33:27.555  
  60.0        26  IN     01 00 01 01  15 16 05 00  ........                40.2.0        10:33:27.555  
                         00 00 00 00  00 00 00 00  ........                40.2.8                      
                         00 00 00 46  05 00 00 48  ...F...H                40.2.16                     
                         00 00                     ..                      40.2.24                     
  60.0            CTL    a1 81 00 01  06 00 1a 00  GET CUR                 41.1.0        10:33:27.557  
  60.0        26  IN     01 00 01 01  15 16 05 00  ........                41.2.0        10:33:27.557  
                         00 00 00 00  00 00 00 00  ........                41.2.8                      
                         00 00 00 46  05 00 00 48  ...F...H                41.2.16                     
                         00 00                     ..                      41.2.24                     
  60.0            CTL    21 01 00 01  06 00 1a 00  SET CUR                 42.1.0        10:33:27.559  
  60.0        26  OUT    01 00 01 01  15 16 05 00  ........                42.2.0        10:33:27.559  
                         00 00 00 00  00 00 00 00  ........                42.2.8                      
                         00 00 00 46  05 00 00 00  ...F....                42.2.16                     
                         00 00                     ..                      42.2.24                     
  60.0            CTL    a1 81 00 01  06 00 1a 00  GET CUR                 43.1.0        10:33:27.559  
  60.0        26  IN     01 00 01 01  15 16 05 00  ........                43.2.0        10:33:27.559  
                         00 00 00 00  00 00 00 00  ........                43.2.8                      
                         00 00 00 46  05 00 00 48  ...F...H                43.2.16                     
                         00 00                     ..                      43.2.24                     
  60.0            CTL    a1 83 00 01  06 00 1a 00  GET MAX                 44.1.0        10:33:27.559  
  60.0        26  IN     01 00 03 02  15 16 05 00  ........                44.2.0        10:33:27.559  
                         00 00 00 00  00 00 00 00  ........                44.2.8                      
                         00 00 00 20  fd 00 00 48  ... ...H                44.2.16                     
                         00 00                     ..                      44.2.24                     
  60.0            CTL    a1 82 00 01  06 00 1a 00  GET MIN                 45.1.0        10:33:27.559  
  60.0        26  IN     01 00 01 01  15 16 05 00  ........                45.2.0        10:33:27.561  
                         00 00 00 00  00 00 00 00  ........                45.2.8                      
                         00 00 00 46  05 00 00 48  ...F...H                45.2.16                     
                         00 00                     ..                      45.2.24                     
  60.0            CTL    a1 81 00 01  06 00 1a 00  GET CUR                 46.1.0        10:33:27.561  
  60.0        26  IN     01 00 01 01  15 16 05 00  ........                46.2.0        10:33:27.561  
                         00 00 00 00  00 00 00 00  ........                46.2.8                      
                         00 00 00 46  05 00 00 48  ...F...H                46.2.16                     
                         00 00                     ..                      46.2.24                     
  60.0            CTL    21 01 00 01  06 00 1a 00  SET CUR                 47.1.0        10:33:27.561  
  60.0        26  OUT    01 00 01 01  15 16 05 00  ........                47.2.0        10:33:27.561  
                         00 00 00 00  00 00 00 00  ........                47.2.8                      
                         00 00 00 46  05 00 00 00  ...F....                47.2.16                     
                         00 00                     ..                      47.2.24                     
  60.0            CTL    a1 81 00 01  06 00 1a 00  GET CUR                 48.1.0        10:33:27.564  
  60.0        26  IN     01 00 01 01  15 16 05 00  ........                48.2.0        10:33:27.564  
                         00 00 00 00  00 00 00 00  ........                48.2.8                      
                         00 00 00 46  05 00 00 48  ...F...H                48.2.16                     
                         00 00                     ..                      48.2.24                     
  60.0            CTL    a1 83 00 01  06 00 1a 00  GET MAX                 49.1.0        10:33:27.564  
  60.0        26  IN     01 00 03 02  15 16 05 00  ........                49.2.0        10:33:27.564  
                         00 00 00 00  00 00 00 00  ........                49.2.8                      
                         00 00 00 20  fd 00 00 48  ... ...H                49.2.16                     
                         00 00                     ..                      49.2.24                     
  60.0            CTL    a1 82 00 01  06 00 1a 00  GET MIN                 50.1.0        10:33:27.564  
  60.0        26  IN     01 00 01 01  15 16 05 00  ........                50.2.0        10:33:27.564  
                         00 00 00 00  00 00 00 00  ........                50.2.8                      
                         00 00 00 46  05 00 00 48  ...F...H                50.2.16                     
                         00 00                     ..                      50.2.24                     
  60.0            CTL    a1 81 00 01  06 00 1a 00  GET CUR                 51.1.0        10:33:27.565  
  60.0        26  IN     01 00 01 01  15 16 05 00  ........                51.2.0        10:33:27.565  
                         00 00 00 00  00 00 00 00  ........                51.2.8                      
                         00 00 00 46  05 00 00 48  ...F...H                51.2.16                     
                         00 00                     ..                      51.2.24                     
  60.0            CTL    21 01 00 01  06 00 1a 00  SET CUR                 52.1.0        10:33:27.565  
  60.0        26  OUT    01 00 01 01  15 16 05 00  ........                52.2.0        10:33:27.565  
                         00 00 00 00  00 00 00 00  ........                52.2.8                      
                         00 00 00 46  05 00 00 00  ...F....                52.2.16                     
                         00 00                     ..                      52.2.24                     
  60.0            CTL    a1 81 00 01  06 00 1a 00  GET CUR                 53.1.0        10:33:27.565  
  60.0        26  IN     01 00 01 01  15 16 05 00  ........                53.2.0        10:33:27.565  
                         00 00 00 00  00 00 00 00  ........                53.2.8                      
                         00 00 00 46  05 00 00 48  ...F...H                53.2.16                     
                         00 00                     ..                      53.2.24                     
  60.0            CTL    a1 83 00 01  06 00 1a 00  GET MAX                 54.1.0        10:33:27.569  
  60.0        26  IN     01 00 03 02  15 16 05 00  ........                54.2.0        10:33:27.569  
                         00 00 00 00  00 00 00 00  ........                54.2.8                      
                         00 00 00 20  fd 00 00 48  ... ...H                54.2.16                     
                         00 00                     ..                      54.2.24                     
  60.0            CTL    a1 82 00 01  06 00 1a 00  GET MIN                 55.1.0        10:33:27.569  
  60.0        26  IN     01 00 01 01  15 16 05 00  ........                55.2.0        10:33:27.569  
                         00 00 00 00  00 00 00 00  ........                55.2.8                      
                         00 00 00 46  05 00 00 48  ...F...H                55.2.16                     
                         00 00                     ..                      55.2.24

大家可以偿试数一下,这是多少组重试。

从抓包可以看到,一直接有prob请求,但最终没有commit请求.

----------------------------------
UVC摄像头打开视频流
VS_PROBE_CONTROLL/VS_COMMIT_CONTROL数据协商在线分析 
https://www.usbzh.com/tool/uvc.html
----------------------------------

============UVC1.0============ 

0x01, 0x00,  UINT16 bmHint;dwFrameInterval保持不变;
0x01, UINT8 bFormatIndex=1,
0x01, UINT8 bFrameIndex=1,
0x15, 0x16, 0x05, 0x00, UINT32 dwFrameInterval=333333,;33.3333,ms/帧
0x00, 0x00, UINT16 wKeyFrameRate=0,;缩格式中只有第1帧为关键帧;
0x00, 0x00, UINT16 wPFrameRate=0,;压缩格式P帧速率;
0x00, 0x00, UINT16 wCompQuality=0,,压缩质量1-10000;
0x00, 0x00, UINT16 wCompWindowSize;0,,平均比特率控制的窗口大小;
0x00, 0x00, UINT16 wDelay;0,,内部视频流接口延迟(毫秒);
0x00, 0x46, 0x05, 0x00, UINT32 dwMaxVideoFrameSize;345600,Bytes
0x00, 0x48, 0x00, 0x00, UINT32 dwMaxPayloadTransferSize;18432,Bytes

// 26 bytes

核对UVC1.0的协商字段信息:,核对几个常见的关键字段,比如formatIndex和FrameIndex也没有问题,那么问题是出现在哪里了?
经过思考,应该是出现了传输负载协商不一致的原因引起的,prob采用的是固件的信息,需我们上报信息是由端点描述符提供的,所以这种的不一致引起的。
所以这里问题是出现在了dwMaxPayloadTransferSize上。至于为什么不是dwMaxVideoFrameSize,这个是帧的大小,与传输的负载无关。

经过再对比配置描述符,发现竟少了超高速端点伴随描述符引起的,加上,就可以了。

数据传输是同步方式、

其实更加深放的研究,可以通过逆向usbvideo.sys其中协商过程中的代码来确定分析。

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超高速 超高速端点伴随描述符
在接口中描述的每个超高速端点都紧跟着一个超高速端点伴侣描述符( EndpointCompanion descriptor)。这个描述符包含只给超高速端点定义的附加端点特性。这个描述符总是 作 为 配 置 描 述 符 信 息 的 一 部 分 在GetDescriptor(Configuration) ......
USB3.0相机没有超高速端点伴随描述符引起该媒体无法播放
前几天有人给了一个UVC相机,支持USB3.0协议,只不过因为种种原因,接入系统中,有一大半概率会被识别成USB2.0。本人在此之前也没有过多的问题,以为就是一个USB2.0相机,所以就继续做后续的windows驱动开发。驱动开发的功能也很简单,就是通过根据需要屏蔽配置描述符中不需要的格式和分辨率,......
关注公众号
  • HID人机交互
  • Linux&USB
  • UAC音频
  • TYPE-C
  • USB规范
  • USB大容量存储
  • USB百科
  • USB周边
  • UVC摄像头
  • Windows系统USB
  • 音视频博客
  • 取消
    感谢您的支持,我会继续努力的!
    扫码支持
    扫码打赏,你说多少就多少

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

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