DirectShow视频捕获筛选器

DirectShow中的捕获筛选器具有一些功能,可将它们与其他类型的筛选器区分开来。 虽然捕获Graph生成器隐藏了许多详细信息,但最好阅读此部分,以便大致了解DirectShow捕获图。

固定类别

捕获筛选器通常具有两个或更多个输出引脚,可提供相同类型的数据,例如预览引脚和捕获引脚。 因此,媒体类型不是区分引脚的好方法。 相反,引脚由其功能(使用 GUID 标识)进行区分,称为 引脚类别

有关如何查询其类别的图钉的讨论,请参阅 “使用固定类别”。 但是,对于大多数应用程序,无需直接查询引脚。 相反,各种 ICaptureGraphBuilder2 方法采用指定要对其操作的引脚类别的参数。 捕获Graph生成器会自动找到正确的引脚。

预览图钉和捕获图钉

某些视频捕获设备具有单独的输出引脚,用于预览和捕获。 预览图钉用于将视频呈现到屏幕,而捕获引脚用于将视频写入文件。

预览图钉和捕获引脚存在以下差异:

  • 预览图钉根据需要删除帧,以保持捕获引脚上的吞吐量。
  • 捕获引脚中的每个帧都带有捕获帧时流时间的时间戳。 预览图钉不会将它提供的示例时间戳。

预览帧没有时间戳的原因是筛选器图将少量延迟引入流。 如果捕获时间用作演示时间,视频呈现器会将每个样本视为稍晚一些。 这可能会导致视频呈现器在尝试赶上时删除帧。 删除时间戳可确保呈现器在到达时呈现每个样本,而不会删除帧。

预览图钉的固定类别PIN_CATEGORY_PREVIEW。 捕获引脚的类别PIN_CATEGORY_CAPTURE。

视频端口引脚

视频端口是视频设备 ((例如模拟电视优化器) 和视频卡)之间的硬件连接。 视频端口使设备能够将视频数据直接发送到图形卡。 视频使用硬件覆盖在屏幕上显示。 视频端口可能是在单独的卡上连接两台设备的实际电缆;或者可能是同一卡上的硬有线连接。

视频端口的优点是视频直接进入视频内存,而 CPU 没有任何工作。 但是,视频端口有一些缺点:

  • 无论是否要预览视频,视频端口在捕获期间始终使用覆盖图面。
  • 在帧之间自动翻转,这使得很难与其他视频操作同步翻转。

如果捕获设备使用视频端口,则捕获筛选器具有视频端口引脚而不是预览图钉。 视频端口引脚的引脚类别PIN_CATEGORY_VIDEOPORT。

每个捕获筛选器至少有一个捕获引脚。 此外,它可能具有预览图钉或视频端口引脚,但绝不是两者。 筛选器可以有多个捕获引脚和预览引脚,每个图钉都提供单独的媒体类型。 因此,单个筛选器可以具有视频捕获引脚、视频预览引脚、音频捕获引脚和音频预览引脚。 (音频的视频端口没有什么等效的,但是。)

上游 WDM 筛选器

Windows驱动程序模型 (WDM) 设备可能需要捕获筛选器上游的一些附加筛选器。 这些筛选器包括以下内容:

尽管这些筛选器是DirectShow中的单独筛选器,但它们通常表示相同的硬件设备。 每个筛选器控制设备的不同功能。 筛选器通过引脚进行连接,但媒体数据不会在引脚连接之间移动。 因此,这些筛选器上的引脚不会通过建立媒体类型进行连接。 相反,它们使用称为 介质的 GUID 值。 中等 GUID 是为给定设备微型驱动程序唯一定义的。 例如,同一电视卡的 TV Tuner 筛选器和视频捕获筛选器都支持相同的介质,这使应用程序能够正确生成图形。

实际上,只要使用 ICaptureGraphBuilder2 生成捕获图,这些筛选器就会自动添加到图形中。 有关更详细的讨论,请参阅 WDM 类驱动程序筛选器

关于DirectShow中的视频捕获