DirectShow 视频捕获筛选器
[与此页面关联的功能(DirectShow)是一项旧功能。 它已被 MediaPlayer、IMFMediaEngine取代,并在媒体基金会 音频/视频捕获。 这些功能已针对 Windows 10 和 Windows 11 进行了优化。 Microsoft强烈建议新代码尽可能使用 MediaPlayer、IMFMediaEngine 和 Media Foundation 中的音频/视频捕获,而不是 DirectShow。 Microsoft建议重写使用旧 API 的现有代码,以尽可能使用新 API。]
DirectShow 中的捕获筛选器具有一些与其他类型的筛选器区分开来的功能。 尽管 捕获图形生成器 隐藏许多详细信息,但最好阅读本部分,以便大致了解 DirectShow 捕获图形。
固定类别
捕获筛选器通常具有两个或多个输出引脚,这些输出引脚提供相同类型的数据,例如预览引脚和捕获引脚。 因此,媒体类型并不是区分引脚的好方法。 而是使用 GUID(称为“引脚类别”)标识的引脚类别来区分引脚。
有关如何查询其类别的图钉的讨论,请参阅 使用固定类别。 但是,对于大多数应用程序,无需直接查询固定。 相反,各种 ICaptureGraphBuilder2 方法采用的参数来指定要在其上运行的引脚类别。 捕获图形生成器会自动找到正确的引脚。
预览图钉和捕获引脚
某些视频捕获设备具有单独的输出引脚用于预览和捕获。 预览图钉用于将视频呈现到屏幕,而捕获引脚用于将视频写入文件。
预览引脚和捕获引脚具有以下差异:
- 预览图钉根据需要删除帧,以保持捕获引脚上的吞吐量。
- 捕获引脚中的每个帧都带有捕获帧时流时间的时间戳。 预览引脚不会时间戳它提供的示例。
预览帧没有时间戳的原因是筛选器图在流中引入了少量延迟。 如果捕获时间用作演示时间,则视频呈现器会将每个样本视为稍晚一些。 这可能导致视频呈现器在尝试赶上时删除帧。 删除时间戳可确保呈现器在到达时显示每个样本,而不会删除帧。
预览引脚的引脚类别PIN_CATEGORY_PREVIEW。 捕获引脚的类别PIN_CATEGORY_CAPTURE。
视频端口固定
视频端口是视频设备(例如模拟电视优化器)和视频卡之间的硬件连接。 视频端口使设备能够将视频数据直接发送到图形卡。 视频使用硬件覆盖在屏幕上显示。 视频端口可能是在单独的卡上连接两台设备的实际电缆;或者,它可能是同一卡上的硬有线连接。
视频端口的优点是视频直接进入视频内存,无需 CPU 进行任何工作。 但是,视频端口存在一些缺点:
- 无论是否要预览视频,视频端口在捕获期间始终使用覆盖图面。
- 帧之间的翻转会自动发生,这使得难以与其他视频作同步翻转。
如果捕获设备使用视频端口,则捕获筛选器具有视频端口引脚而不是预览引脚。 视频端口引脚的引脚类别PIN_CATEGORY_VIDEOPORT。
每个捕获筛选器至少有一个捕获引脚。 此外,它可能具有预览图钉或视频端口引脚,但从不同时具有两者。 筛选器可以有多个捕获引脚和预览引脚,每个图钉都提供单独的媒体类型。 因此,单个筛选器可以具有视频捕获引脚、视频预览引脚、音频捕获引脚和音频预览引脚。 (但是,没有与音频的视频端口等效。
上游 WDM 筛选器
Windows 驱动程序模型 (WDM) 设备可能需要捕获筛选器上游的一些附加筛选器。 这些筛选器包括:
- 电视优化器筛选器。 控制模拟电视优化器的优化。
- 电视音频筛选器。 控制模拟电视调音器的音频设置。
- 模拟视频交叉栏筛选器。 通过硬件设备路由视频和音频信号。 例如,设备可能有多个输入,例如 S-Video 和复合视频。 横栏筛选器使应用程序能够选择输入。
尽管这些筛选器是 DirectShow 中的单独筛选器,但它们通常表示相同的硬件设备。 每个筛选器控制设备的不同功能。 筛选器通过引脚进行连接,但媒体数据不会跨引脚连接移动。 因此,这些筛选器上的引脚不通过建立媒体类型进行连接。 相反,它们使用称为 介质的 GUID 值。 中等 GUID 是为给定设备微型驱动程序唯一定义的。 例如,同一电视卡的电视优化器筛选器和视频捕获筛选器都支持相同的介质,从而使应用程序能够正确生成图形。
在实践中,只要使用 ICaptureGraphBuilder2 生成捕获图,这些筛选器就会自动添加到图形中。 有关更详细的讨论,请参阅 WDM 类驱动程序筛选器。
相关主题
-
在 DirectShow 中 关于视频捕获