UVC摄像头百科
+ -

基于UVC规范的USB摄像头数据传输模式的总结

2021-09-17 3442 1

根据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) 不支持 不支持 支持

并且其UVC视频数据的传输既支持同步传输也支持批量传输

苹果MAC操作系统

经过本人的测试,在当前的MAC即苹果操作系统中,其UVC视频数据传输方式只支持同步传输即ISO传输,不支持批量传输即BULK传输的(不太确定)。
上次本人测试的时候,也没有记录相关的版本信息,所以这里只能无记录说说了。

不过群里的不烦-usbcamer在其自己的MAC OS上使用了BULK传输模式并显示图形,他的使用环境见下表:

名称 说明
MAC OS 10.15.4
UVC版本 1.5
传输方式 BULk传输
分辨率 1920x1080 MJPG

mac os 10.15.4

感谢不烦-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中文网站长:
0x83端点

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模式

并不是所有的版本支持

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 等时传输中的URB_ISOCH_TRANSFER
通过UVC规范可知,视频图像数据的读取可使用两种端点传输方式,分别为:BULK 块/批量传输方式ISO 等时/同步传输方式在Windows内核中,USB数据的读取是通过URB来进行传输的,其结构体是一个大大的共用体,根据数据传输的方式对应其不同的结构体,其内容如下:typedef _Struct_s......
UVC摄像头批量传输的StreamOn和StreamOff
在UVC规范中,UVC摄像头视频数据的传输方式支持两种,分别为批量传输同步传输。UVC摄像头数据传输的格式按负载数据头的方式按帧进行打包传输。根据USB规范可知,同步传输方式是只要带中带有同步端点的接口,系统会定时从设备中读取数据,无论设备中是否有数据。而如要要停止数据的传输,只需要选中不带有同步......
UVC等时传输中的dwMaxPayloadTransferSize
UVC的视频流接口控制请求的数据大小可为26字节,34字节和48字节,其分别对应的是UVC的1.0,1,1和UVC1.5版本。在其整个视频流控制接口参数偏移地址22处的字段为一4字节的dwMaxPayloadTransferSize,根据其字段解释为“指定设备在单个有效负载传输中可以传输或接收的最大......
UVC批量传输中的dwMaxVideoFrameSize和dwMaxPayloadTransferSize关系
上一节看了UVC等时/同步传输的关系,这里我们介绍一相批量传输批量传输在这里相对于同步传输要简单的多。uvc_video_start_transfer中的代码如下: else { /* Bulk endpoint, proceed to URB initialization. */ ......
USB 等时/同步传输、块传输与转换设置在UVC摄像头驱动中的探讨
最近在Windows10 x64环境下,开发了一个虚拟UVC摄像头驱动。确切的来说这不是摄像头驱动,而是一个虚拟USB总线驱动。使用该虚拟总线驱动使用应用软件通过IOCTL控制总线子设备的创建与卸载。框架设计驱动安装完成后,是一个单纯的USB虚拟总线。应用软件通过发送自定义IOCTL码IOCTL......
USB超高速批量传输
批量传输类型是用来支持想要跟相当大的海量数据通信设备,传输能使用任何可用的超速带宽。超速批量传输功能端点提供以下:对基于有限带宽的超速总线访问保证数据的发送,但是不保证带宽和发送时间超速维持下面的批量传输管道特征:对批量传输管道通信流没有强制固定的数据结构批量传输管道是一个流式管道,因此总是有通信流......
USB 同步/等时传输方式
USB协议规定了四种传输类型:控制传输、批量传输同步传输、中断传输。等时传输也有“同步传输”的叫法,一般用于要求数据连续、实时且数据量大的场合,其对传输延时十分敏感,类似用于USB摄像设备,USB语音设备等等。同步事务没有握手包。当一个同步传输中有多个事务时,最后一个事务之前的事务的数据长......
USB超高速 同步传输
正如USB2.0一样,超速同步传输类型是用来支持想要能容忍错误,周期性的轮询服务的传输流。超速跟USB2.0一样不发送起始帧,但是时序信息要通过同步时间戳包(ITP)被发送给设备。这个规格的协议层章详细描述了用来完成同步传输的包,总线事务和事务处理流程。也描述了怎么样传送时序信息给设备。超速同步传输......
USB 批量/块传输方式
USB协议规定了四种传输类型:控制传输、批量传输同步传输、中断传输。批量传输一般用于批量的和非实时的数据传输,通俗的来说就是用于数据量大但对时间要求又不高的场合的一种传输方式,类似用于USB打印机和USB扫描仪等等。批量传输使用批量传输事务,一次批量传输事务分为三个阶段:令牌包阶段、数据包......
基于UVC规范的USB摄像头数据传输模式的总结
根据UVC(USB VIDEO CLASS)规范,UVC视频数据传输方式支持:同步传输即ISO传输批量传输即BULK传输但是不同的操作系统对UVC规范的支持不一定是全量支持的:Windows操作系统对于windows操作系统,对UVC版本的支持情况如下:UVC 版本Windows ......
手动分析使用BUSHOUND抓取同步传输的URB
BUSHOUND大家太熟了,使用它来进行数据抓包那不太太方便。但在BUSHOUND的抓取配置项中,有一个叫了URB的东西,我相信大家都没有选中过,因为一般来说,对WINDOWS USB驱动开发人员来说都不一定有用,更何况大家也只是用来抓取一下几个数据的输入输出,更没有必要进行USB的分析了。本人今天......
USB 同步传输端点的数据包PID序列及额外传输端点大小
对于同步传输:如果输入端点提供的负载数据小于端点描述符指定的最大负载数据,则主机端将不再该端点提供进一步的输入事务。这是因为所对USB设备来说,所有的数据传输都是由主机发起的。对于数据输入IN事务,虽然数据的传输方向为设备端到主机,但是该事务却是由主机发起。由于设备的输入端点提供的负载数据小于该......
使用BUSHOUND手动分析USB批量传输的URB
使用BUSHOUND抓取U盘的批量传输的URB数据,我们对其其进行数据分析:13 IN 55 53 42 53 40 0b ac 57 00 00 00 00 00 URB80 00 09 00 00 00 00 00 d8 f2 75 a0 77 7f 00 00 ......
USB摄像头同步传输的完成后URB参数
这几天不是闲来无事,一个工作的任务就是对手中一个USB摄像头进行驱动开发,并进行视频格式的转换。通过分析该USB摄像头可知,其采用的是同步传输,所以本人在开发的驱动中,使用同步的URB进行下发请求数据,然后在完成例程中获取数据。同步传输的URB本人在 手动分析使用BUSHOUND抓取同步传输的URB......
UAC麦克风同步传输的URB分析
之前写过同步传输的UVC摄像头的URB,文章名称为:手动分析使用BUSHOUND抓取同步传输的URB 。今天恰好手中有一个UVC麦克风,所以也拿来分析。也许和之前的文章有所重复,但是因为侧重点的不同,也许会有意想不到的小收获取。言归正转,我们知道,在UAC音频规范中,数据的传输不像UVC摄像头那样,......
关注公众号
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

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

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