基于UVC规范的USB摄像头数据传输模式的总结
根据UVC(USB VIDEO CLASS)规范,UVC视频数据传输方式支持:
但是不同的操作系统对UVC规范的支持不一定是全量支持的:
Windows操作系统
对于windows操作系统,对UVC版本的支持情况如下:
UVC 版本 | Windows Vista/XP | Windows 7 | Windows 8 |
---|---|---|---|
USB Video Class 1.0 | 支持 | 支持 | 支持 |
USB Video Class 1.1 | 不支持 | 支持 | 支持 |
USB Video Class 1.5 (H.264 video codec) | 不支持 | 不支持 | 支持 |
苹果MAC操作系统
经过本人的测试,在当前的MAC即苹果操作系统中,其UVC视频数据传输方式只支持同步传输即ISO传输,不支持批量传输即BULK传输的(不太确定)。
上次本人测试的时候,也没有记录相关的版本信息,所以这里只能无记录说说了。
不过群里的不烦-usbcamer在其自己的MAC OS上使用了BULK传输模式并显示图形,他的使用环境见下表:
名称 | 说明 |
---|---|
MAC OS | 10.15.4 |
UVC版本 | 1.5 |
传输方式 | BULk传输 |
分辨率 | 1920x1080 MJPG |
感谢不烦-usbcamer提供的信息。技术是一件细致严谨的事情,我还是草率了。
Linux操作系统
本人并没有测试,但从本人看过的linux内核源代码来看,UVC视频数据的传输即支持同步传输也支持批量传输。
关于UVC规范的USB摄像头数据传输模式的讨论
以下内容转自USB中文网微信技术交流群2021070日讨论记录:
USB中文网站长:
各位知道,为什么UVC摄像头在WINDOWS下可以认出并打开,在mac下可以认出摄像头,但是没有图像
USB中文网站长:
这个是什么原因
至尊宝:
Mac上用自带的软件打开、钉钉、微信对比一下。图像输出格式YUV和MJPEG,是不是图像输出格式导致的。
USB中文网站长:
我这个支持MJPG
USB中文网站长:
在WINDOWS下认出,并出图,在mac下不出图
USB中文网站长:
不知道MAC的和windows有什么区别
至尊宝:
MAC端视频播放器不一定支持MJPG
至尊宝:
设置为YUV试试
USB中文网站长:
应该支持MJPG,我同事换了一套描述符就可以了。但是不知道区别在那里
临江仙:
有可能挑分辨率
临江仙:
只支持特定分辨率
USB中文网站长:
1920*1080的
USB中文网站长:
不是这个问题
WS:
我也遇到mac本UVC流播放不出来的问题,mjpeg能播h264的不能,看mac的log是mac的解码器没初始化
LIUBIAO.:
看一下图像最大速率和最小速率 缓冲区描述符相关
LIUBIAO.:
get cut max min 什么的
USB中文网站长:
打开前奏都正常,读数据返回零长度
USB中文网站长:
下午详细分析一下
USB中文网站长:
mac支持uv1.1吗
WS:
mac上枚举的过程看着就是1·1,我用1·5给回也能识别到设备
USB中文网站长:
02 01 00 00 83 00 00 00 发现枚举完成后,对收数据的端点0X83发了一个CLEAR_FEATURE
USB中文网站长:
特性描述符是0
USB中文网站长:
这个是ENDPOINT_HALT
USB中文网站长:
端点挂起
WS:
在mac上吗
USB中文网站长:
是的
WS:
然后mac上还能识别到camera
WS:
我这里通过抓包看,数据包都过去了
WS:
我关注下0x83这个包
WS:
我也看到0x83的包了
USB中文网站长:
0x83只是端点地址
USB中文网站长:
USB中文网站长:
我看这里枚举协商后,就让0X83挂起了,固件带宽保证不了让挂起的
USB中文网站长:
也有COMMIT,
WS:
对,我的也是
李强:
OTG的 vbus d+这些状态在USB插入时有没有 寄存器 可以读出来
李强:
我目前初始化后,在插拔可以读出状态,不初始化,一插入不行
USB中文网站长:
你的端点信息发一下@WS
USB中文网站长:
我怀疑与dwMaxVideoFrameBufferSize也有关系
WS:
dwMaxVideoFrameBufferSize这个我该过,现在用的是height*width*2
USB中文网站长:
有可能是MAC不支持UVC的BULK传输
WS:
我配置的是同步传输
李强:
UVC不就是isoc传输吗
李强:
还可以Bulk传输?
USB中文网站长:
规范支持BULK
USB中文网站长:
实锤了,mac不支持bulk模式
并不是所有的版本支持