UVC摄像头百科
+ -

Windows应用层视频API接口

2021-03-10 710 0

1. VFW

VFW(Video for Windows)是微软于 1992 年推出的关于数字视频的一个 SDK,它能使应用程序通过数字化设备从传统的模拟视频源得到数字化的视频剪辑。VFW 的一个关键思想是播放时不需要专用硬件。为了解决数字视频数据量大的问题,需要对数据进行压缩。VFW 引进了一种叫 AVI 的文件标准,该标准未规定如何对视频进行捕获、压缩及播放,仅规定视频和音频该如何交错存储在硬盘上。VFW 给程序员提供 .VBX 和 AVICap 窗口类的高级编程工具,使程序员能通过发送消息或设置属性来捕获、播放和编辑视频剪辑。

VFW 技术受到的最多批评是它捕获的数据保存到磁盘上会占用大量磁盘空间,有人试验用 640x480 捕获 1s 大约需要10MB ⊙_⊙,另外 VFW 的体系结构缺乏为视频会议,在线电视等流媒体应用提供强而有效的支持。

2. DirectShow

DirectShow (简称 DShow)是微软在 ActiveMovie 和 VFW 的基础上推出的新一代基于 COM 的流媒体处理的 SDK,与 DirectX SDK 一起发布。DirectShow 使用一种叫 Filter Graph 的模型来管理整个数据流的处理过程。有了 DirectShow,我们可以很方便地从支持 WDM 驱动模型的采集卡上捕获数据,并且进行相应的后期处理乃至存储到文件中。它广泛地支持各种媒体格式,包括 Asf、Mpeg、Avi、Dv、Mp3、Wave 等,为多媒体流的捕捉和回放提供了强有力的支持。

DirectShow 架构

  • Direct Show 的发展历史:孕育期(1995 ~ 1998)ActiveMovie,开发代号 Quartz,在 Windows 3.0 时代,是作为一种对当时最流行的媒体平台 QuickTime 的回应而开发的。它当时的使命是作为 IE 的插件播放在其窗口内的媒体文件,正如当时 QuickTime 为 Netscape 以及 IE 提供的服务那样,它的另一个功能是作为 VFW 的一个替换,特别地为在 VFW 架构中难于处理的 MPEG 文件提供辅助处理。
  • 诞生期(1998):在这一年,大致在 DirectX 5 的年代,ActiveMovie 被重命名为 DirectShow 并且被包含为 “DirectMedia SDK” 的一部分。
  • 成长期(1999 ~ 2005):在 DirectX 7 中,DirectShow 变成了 DirectX SDK 主要组成部分,而且如同 DirectInput 等其它 DirectX API 一样被赋予了它自己的位置。DirectShow 被主要用来做音视频捕捉和媒体文件的播放(Windows Media Player 就是基于 DShow 开发的)。
  • 动荡衰落期(2005 ~ 至今): 从 2005 年 4 月起,DirectShow 从 DirectX SDK 中移除了,必须单独下载 DirectShow 的 SDK 包才能得以支持,之后 DirectShow 的文档和示例被转移到 Windows SDK,DirectShow 也正式成为 Windows 的一个组件。然而,在编译某些 DirectShow 的 sample 时,DirectX SDK 仍然是必需的。
    DirectShow 对数字高清媒体的应用程序确实是非常通用的、万能的,但是,DirectShow 作为一个 20 年的老技术而言已经力不从心了。比如:

Graph 是静态的,要实现动态的 Graph 和 Major format change 是非常困难的。

  • DirectShow filter 的线程模型是非常复杂的,要完全理解并永不出错是太困难了。
  • 在 “Microsoft.public.win32.programmer.directx.video” 新闻群组上存在一个长期的灰色笑话,讲的是每当某人想要为 DirectShow 开发一个新的 filter 时,那么,“六个月后见吧”
  • DirectShow filter 只能用于DirectShow。
  • DirectShow 不支持文件保护(DRM)。
    于是便有了 Media Foundation。

3. Media Foundation

2005 年,微软推出 Windows Vista,与此同时在 Windows Vista 上推出了新一代多媒体应用库 Media Foundation(以下简称 MF)。目的是提供 Windows 平台一个统一的多媒体影音解决方案,开发者可以通过 MF 播放视频或声音文件、进行多媒体文件格式转码,或者将一连串图片编码为视频等等。MF 是 DirectShow 为主的旧式多媒体应用程序接口的替代者与继承者,在微软的计划下将逐步汰换 DirectShow 技术。MF 要求Windows Vista 或更高版本,不支持较早期的 Windows 版本,特别是 Windows XP。
Media Foundation

  • MF 架构分为控制层(Control layer),核心层(Core layer)与平台层(Platform layer)。大部分 MF 功能均由核心层提供,开发者则由控制层来控制行为。一般开发者仅须了解控制层与核心层,几乎不须接触平台层。
  • MF 提供了两种编程模型,第一种是以 Media Session 为主的 Media pipeline 模型,但是该模型太过复杂,且曝露过多底层细节,故微软于 Windows 7 上推出第二种编程模型,内含 SourceReader、Transcode API 、SinkWriter 及 MFPlay 等高度封装模块,大大简化了 MF 的使用难度。
  • Media pipeline 分三个组成部分:Media Source,Media Sink 和 Media Foundation Transforms(简称 MFT)。
    MFT 推出了一个革新式的技术 DirectX Media Objects (DMO)。DMO 不仅可以用在 MF 中,也可以通过一个通用的 wrapper filter 成为一个标准的 DShow Filter,反之却不行。

看起来 MF 是完美的 DShow 替代者,但实际情况却是 MF 在推出十多年间鲜有人理会⊙﹏⊙b。个人认为,一是 DShow 已经形成了成熟的社区,从硬件到软件到开发库都是非常完备的,而且 Windows 的兼容性也一直非常好,实在没有换代的动力。二是 MF 除了在 DRM 媒体保护(Protected Media Path)方面是天然支持的,其他功能并没有比 DShow 技高一筹,顶多是用着更简单一些,然并卵。

Anyway,像最新的 UWP 框架里只支持 MFT,不能用 DShow 的 Filter,所以,不要再留恋 DShow 了,它终将成为一个传说。

微软在 MF 推出之初还写了一篇 文章 勾引大家从 DShow 迁移到 MF,纯英文,原汁原味。

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 篇笔记 写笔记

Windows下枚举系统中所有HID设备
Windows下对任何设备,文件的打开都是通过CreateFile来实现的,不过要打开一个设备得首先知道设备或文件名。由上节可知道,对于HID设备,都会注册一个接口类型为{2ACCFE60-C130-11D2-B082-00A0C91EFB8B}的GUID。我们可以通过Setup系列函数枚举出系统中......
为什么我的USB设备如U盘从一个端口换到另一个端口会重新安装驱动?
Windows 2000和更高版本的操作系统中,当 USB 设备从一个端口移到另一个端口时,将创建一个新的物理设备对象 (PDO)。 如果硬件报告了唯一的 USB 序列号,则不会创建新的 PDO。若要重复使用同一 PDO 并确保设备不会改变,无论设备是否已重新插入相同的端口或新端口,硬件供应商必......
UVC Windows下UVC摄像头数据分析
这里我们分析一款UVC摄像头来进行数据分析。环境:win10 x64工具:bushound,usbviewer将摄像头插入PC后,打开usbviewer工具,可以看到关于此摄像头的相关信息。可以看到,这个摄像头其实是一个USB复合设备,所以其对应的系统驱动为USBCCGP,然后再由USB复合设......
Windows下UVC虚拟摄像头的实现
最近在Windows10 x64环境下,开发了一个虚拟UVC摄像头驱动。确切的来说这不是摄像头驱动,而是一个虚拟USB总线驱动。使用该虚拟总线驱动使用应用软件通过IOCTL控制总线子设备的创建与卸载。驱动安装完成后,是一个单纯的USB虚拟总线。应用软件通过发送自定义IOCTL码IOCTL_BUSEN......
Windows下USB设备的枚举过程分析
1.用户把USB设备插入USB端口或给系统启动时设备上电这里的USB端口指的是主机下的根hub或主机下行端口上的hub端口。Hub给端口供电,连接着的设备处于上电状态。2.Hub监测它各个端口数据线上(D+/D-)的电压在hub端,数据线D+和D-都有一个阻值在14.25k到24.8k的下拉电阻Rp......
USB存储设备在Windows环境下使用Uaspstor.sys或Usbstor.sys那个驱动?
USB Attached SCSI (UAS) 协议是一种新的大容量存储协议,旨在通过已建立的 USB 大容量存储协议(仅批量传输)和 BOT (提高性能) 。 它通过减少协议开销、支持 SATA 本机命令队列 (NCQ) 并并行处理多个命令。 为此,UAS 使用新的 USB 3.0 功能进行称为流......
Windows10设备管理器USB设备描述符请求失败(未知的usb设备)
在电脑中插入USB设备后,有时会报USB设备描述符请求失败,导致USB设备在设备管理器中枚举失败。一种专业的解决办法见:http://www.usbzh.com/article/detail-1059.htmlUSB设备描述符请求失败现象USB设备描述符请求失败在设备管理器中发现通用串行总线......
Windows对红外相机摄像头的支持
Windows10的1607版本开始,USB视频类(UVC)驱动程序支持产生红外(IR)流的摄像头。红外摄像头相机捕捉场景的亮度值,并通过USB以未压缩格式或压缩格式传输帧。这些相机及其流通过媒体捕获管道(pipeline)导出给应用程序。红外UVC摄像头相机帧类型红外UVC摄像头相机支持的格......
Windows对UVC规范的版本支持情况?
WindowsWindowsXP开始支持UVC1.0规范的驱动,这个驱动的名字叫USB视频类驱动程序。驱动程序文件为Usbvideo.sys。USB视频类(UVC)驱动程序是Microsoft提供的AVStream微型驱动程序,为USB视频类设备提供驱动程序支持。UVC 版本Windows Vis......
Windows应用层视频API接口
1. VFWVFW(Video for Windows)是微软于 1992 年推出的关于数字视频的一个 SDK,它能使应用程序通过数字化设备从传统的模拟视频源得到数字化的视频剪辑。VFW 的一个关键思想是播放时不需要专用硬件。为了解决数字视频数据量大的问题,需要对数据进行压缩。VFW 引进了一种叫 ......
Windows对UVC特性的支持
USB视频类(UVC)驱动程序是Microsoft提供的AVStream微型驱动程序,为USB视频类设备提供驱动程序支持。Usbvideo.sys系统驱动程序在不同版本的Windows中支持以下UVC功能:UVC featureWindows Vista/XPWindows 7Windows 8Si......
Windows下使用Wireshark分析USB通信
USB技术的应用越来越广泛,我们常用的U盘、鼠标、键盘都是USB设备。我们有时也会遇见要对这种设备进行调试的情形,但是很少有人知道其实Wireshark也是可以胜任这一任务的。Wireshark可以像处理网络中的通信一样来捕获和解析USB设备的通信。Wireshark2.0之后就加入了对USB协议的......
Windows 发送UVC XU Set命令卡死的一种处理办法
Windows系统应用层可以通过获取UVC设备的IKsControl对象,然后调用KsProperty来GET/SET XU命令。经过测试发现,如果调用SET命令的时候设备拔出了,有一定的概率会出现卡死现象,KsProperty这个方法卡住了。复现方法很简单,获取IKsControl对象,然后Sle......
Windows下的USB驱动程序开发步骤?
USB是通用串行总线的英文缩写,进行USB驱动的开发就是进行USB设备驱动的开发。USB规范义了很多的USB设备类型,如用于大容量存储的设备类型(如U盘),用于视频传输的设备类型(如UVC摄像头),这些设备使用USB总线协议与主机进行通讯,实现USB设备定义的功能。进行USB驱动的开发,实际上就是在......
Windows视频流驱动堆栈
Windows下,微软提供了视频类驱动模块,各厂商只需要遵照UVC协议即可实现生产的摄像头“免驱”的效果。当然,为了实现特定的自定义功能,厂商可以通过UVC的扩展单元实现自定义的功能,由于是自定义协议,需要厂商的硬件和应用软件的支持。Windows下的视频流驱动堆栈可以看到,当厂商生产的摄像头we......
关注公众号
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

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

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