UVC摄像头百科
+ -

Windows下USB音视频类驱动程序堆栈架构

2021-10-22 545 0

一个USB接口的UVC摄像头接入Windows系统后,Windows会使用系统自带的驱动进行硬件设备驱动,从而实现“免驱”的效果。
所以看着很简单的一件事,其实并不简单。这种表现的简单是由于Windows给我们做了大量的工作,从而使一个复杂的USB视频类设备在应用层实现方便的应用。

Windows视频类USB摄像头驱动程序栈架构如下:
Windows视频类USB摄像头驱动程序栈架构

从上面的图可以看到,厂商只提供硬件和固件,并且这个固件应该满足UVC规范。而其余的由Windows系统包圆了。

  • usbport.sys : USB控制器驱动程序
  • usbhub.sys : USB集线器驱动程序
  • usbccgp.sys : Windows通用驱动程序,使用于USB复合设备。
  • usbvideo.sys : 将 usb类转成通用视频类的驱动程序。
  • usbaudio.sys : USB音频类驱动程序,和usbvideo功能类似,只是一个服务于音频,一个是视频。
  • ks.sys:微软内核流kernel stream驱动程序,是音频视的通用驱动程序

    avstream 即audio video stream

ks.sys与avstream、portclass.sys之间的关系

  • avstream是ks.sys中的一部分,而ks.sys是其上层驱动。
  • ks.sys的下层可以是portclass.sys实现的音频类,也可以是USB实现的音视频类。
  • ks.sys文件中包含了全部的ks功能和avstream功能

avstream

参考资料:
https://docs.microsoft.com/zh-cn/windows-hardware/drivers/stream/usb-video-class-driver-stack
https://docs.microsoft.com/zh-cn/windows-hardware/drivers/stream/avstream-overview

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设备如U盘从一个端口换到另一个端口会重新安装驱动
在 Windows 2000和更高版本的操作系统中,当 USB 设备从一个端口移到另一个端口时,将创建一个新的物理设备对象 (PDO)。 如果硬件报告了唯一的 USB 序列号,则不会创建新的 PDO。若要重复使用同一 PDO 并确保设备不会改变,无论设备是否已重新插入相同的端口或新端口,硬件供应商必......
USB存储设备在Windows环境下使用Uaspstor.sys或Usbstor.sys那个驱动
USB Attached SCSI (UAS) 协议是一种新的大容量存储协议,旨在通过已建立的 USB 大容量存储协议(仅批量传输)和 BOT (提高性能) 。 它通过减少协议开销、支持 SATA 本机命令队列 (NCQ) 并并行处理多个命令。 为此,UAS 使用新的 USB 3.0 功能进行称为流......
UVC UVC驱动接口关联描述符IAD失踪之迷
先说一下,本人所使用的操作系统是WIN10 x64操作系统Microsoft Windows [版本 10.0.14393](c) 2016 Microsoft Corporation。保留所有权利。这是win10一个相对比较老的版本。新旧的混淆在微软件主的官方文档 USB Interfac......
USB兼容驱动Composite层级引起的摄像头灯问题
跌跌撞撞,搞了快一个星期。一个定制厂商用的UVC摄像头指示搞了几天,今天算是可以蒙混过关了。关于调试过程中的一部分细节,可见本人的另一篇文章:关于UVC摄像头指示灯的调试过程总结 http://www.usbzh.com/article/detail-430.html在这里,可能只能算是总结二吧,没......
USB 等时/同步传输、块传输与转换设置在UVC摄像头驱动中的探讨
最近在Windows10 x64环境下,开发了一个虚拟UVC摄像头驱动。确切的来说这不是摄像头驱动,而是一个虚拟USB总线驱动。使用该虚拟总线驱动使用应用软件通过IOCTL控制总线子设备的创建与卸载。框架设计驱动安装完成后,是一个单纯的USB虚拟总线。应用软件通过发送自定义IOCTL码IOCTL......
USB通用父驱动usbccgp.sys的过滤UVC摄像头、UAC麦克风和HID设备硬件ID
激动的心情,无溢言表。。虽然只是一个很简单的东西。。但相于折腾了这么久,还是很开心的了。最近有个需求,功能是这样的:有一个USB复合设备,连接到windows系统中它在windows下的设备树如下:USB Composite Device(usbccgp.sys)UVC CameraUAC ......
Windows下的USB驱动程序开发步骤?
USB是通用串行总线的英文缩写,进行USB驱动的开发就是进行USB设备驱动的开发。USB规范义了很多的USB设备类型,如用于大容量存储的设备类型(如U盘),用于视频传输的设备类型(如UVC摄像头),这些设备使用USB总线协议与主机进行通讯,实现USB设备定义的功能。进行USB驱动的开发,实际上就是在......
Windows视频流驱动堆栈
在Windows下,微软提供了视频类驱动模块,各厂商只需要遵照UVC协议即可实现生产的摄像头“免驱”的效果。当然,为了实现特定的自定义功能,厂商可以通过UVC的扩展单元实现自定义的功能,由于是自定义协议,需要厂商的硬件和应用软件的支持。Windows下的视频流驱动堆栈可以看到,当厂商生产的摄像头we......
为什么Windows7重新安装系统后插在USB3.0端口的鼠标不能使用?
在 Windows 7 及更早版本的操作系统中,USB 3.0 驱动程序堆栈由第三方提供,操作系统不提供USB3.0驱动栈。 因此,Windows7重新安装系统后插在USB3.0端口上的所有设备都无法工作,需要安装第三方提供的USB控制器和集线器驱动,这样才能识别出挂接在该USB总线下的设备。从Wi......
Windows支持的USB设备类及对应驱动sys
USB规范定义了很多设备类,详见 USB设备类型定义Windows操作系统随着系统的更新,增加了对不同的设备类支持。类规范bDeviceClass 代码驱动程序名称Windows 支持蓝牙类0xE0Bthusb.sysWindows XP 及更高版本芯片/智能卡接口设备 (CCID)0x0BUsbc......
Windows下USB驱动SET_INTERFAC失败 bad pipe flags
最近在调试一个UVC摄像头,由于项目的原因,需要在驱动下对UVC协议进行模拟,以实现在驱支层打下固件,从而读取数据的要求。本以为这是一个很简单的事,没想到还是耽搁了一点时间,花了一点小功夫。打开USB摄像头,对UVC协议的模拟主要是是USB特定类请求的模拟,通过我们的基础知识可知道,上层应用或驱动......
同样的soc板子用的同一个USB驱动设备名称,厂商和产品ID都一样,使用什么方法来区别?
今天在本站USB中文网 http://www.usbzh.com 的技术交流群中有位同学提问:各位老铁,我们自己的soc板子用的usb一个驱动,那么usb设备名称,厂商和产品ID就一样了,这个是没有方法来区别下比如一个PC同时插入我们的3块USB对于这个问题,就是典型的多个相同的板板接入电脑......
IRP_MN_QUERY_CAPABILITIES和IRP_MN_QUERY_INTERFACE在USB总线驱动中的作用
在USB驱动总线开发中,IRP_MN_QUERY_BUS_INFORMATION和IRP_MN_QUERY_INTERFACE还挺重要的。对于HID设备,这两个IRP其实只要支持IRP_MN_QUERY_CAPABILITIES就行,而且这个CAPABILITIES不要额外的信息。但对于像UVC,......
UAC麦克风驱动分析
UAC麦克风驱动框架:应用层测试代码:https://blog.csdn.net/isunbin/article/details/81503152对于 gadget uac1 驱动来说, 只需要通过ALSA 框架提供的API读写声卡设备即可。 也是就是说我们只要实现声卡的读写和配置理论上就可......
UVC摄像头驱动装调试总结
前几天发表了一篇文章 UVC PTZ和扩展单元的过滤与分发调试笔记,原文见: http://www.usbzh.com/article/detail-517.html ,本来想着应该没啥问题了,可没想到上周五在实际测试过程中,还是出现了问题:经过长时间的UVC摄像头工作,突然驱动显示了大量数据包错误......
关注公众号
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

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

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