65.9K
CodeProject 正在变化。 阅读更多。
Home

DirectShow 过滤器(初学者版)

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.36/5 (20投票s)

2007 年 9 月 24 日

CPOL

4分钟阅读

viewsIcon

66769

以通俗易懂的方式描述 DirectShow 过滤器。

引言

DirectShow 过滤器是 COM 组件,它们连接在一起以构建一个过滤器图。过滤器图是一个完整的机制(不同的过滤器连接在一起),是运行媒体文件所必需的。通常,一个过滤器能够完成单一的工作,这意味着一个过滤器是一个完全能够处理媒体文件数据的实体。因此,如果要处理媒体文件数据,最强大的技术是构建您自己的过滤器,它可以执行所需的工作。

模块化设计

构建您自己的过滤器的另一个好处是,在内部,DirectShow 采用模块化设计,这意味着它由协同工作的小组件组成。这种设计使开发人员免于许多烦恼。如果您构建自己的过滤器(根据规范),则无需担心过滤器图的其他部分。如果您的过滤器运行正常,那么一切都会正常。否则,您可以确认是您自己的过滤器发生故障,而不是任何其他过滤器,因为其他过滤器已经由各自的开发人员进行了测试。

过滤器图中的数据流

数据在过滤器图中从一个过滤器流向另一个过滤器。提供数据的过滤器称为上游过滤器,接收数据的过滤器称为下游过滤器。数据从上游过滤器流向下游过滤器,这称为上游过滤器推送数据(参见传输了解推送拉取)。

过滤器类型

通常,过滤器分为三类

  1. 源过滤器
  2. 变换过滤器
  3. 渲染器过滤器

让我们简要地看一下它们。

源过滤器

这些是过滤器图中数据流的来源。它们为下游过滤器提供数据(或下游过滤器从源过滤器中获取数据,参见下面的传输)。它们分为三类:捕获源过滤器文件源过滤器创建者源过滤器捕获源过滤器是从捕获设备(如摄像机或网络摄像头)获取数据的过滤器。文件源过滤器是从存储的文件中获取数据的过滤器。最后,创建者源过滤器是创建自身数据以在过滤器图中流动的过滤器类型。

变换过滤器

这是使用和创建最多的过滤器类别。除源过滤器和渲染器过滤器(参见下文)之外的任何过滤器都称为变换过滤器。它们从源过滤器或上游的任何其他过滤器获取数据,并对数据进行自定义操作,然后将该数据向下游推送。这里的自定义操作是指它们被创建的目的;一些解析数据,另一些解码数据,或者您想要对数据执行的任何操作。

渲染器过滤器

过滤器图中的数据从源过滤器流经变换过滤器到渲染器过滤器。这是位于过滤器图末端的过滤器。例如,在屏幕上显示视频或将数据写入文件的过滤器。

连接过滤器

一个过滤器是一个 COM 组件,它具有输入和输出引脚。这些也是 COM 组件。所有数据都通过这些引脚传输。上游过滤器的输出引脚连接到下游过滤器的输入引脚。

连接要求

连接任意两个过滤器引脚并非易事。必须进行一些要求的协商。实际的协商工作由引脚完成,在建立连接之前,必须满足这些要求。

这些要求是什么,为什么必须满足它们。让我们来看看

要求是

  1. 媒体类型
  2. 传输
  3. 分配器

让我们简要地看看它们是什么。

媒体类型

当两个引脚连接时,它们必须就将传递的数据格式达成一致,以便当实际数据流开始时,下游过滤器可以理解上游过滤器提供的数据格式。

传输

这两个也必须就将用于交换数据的协议或机制达成一致。最常见的传输是本地内存。本地内存传输有两种机制:推送拉取。在推送模型中,数据从上游过滤器流向下游过滤器。并且,在拉取模型中,下游过滤器从上游过滤器拉取数据。拉取模型仅用于文件源过滤器,过滤器从文件读取数据。所有其他使用推送模型。

分配器

分配器也是 COM 组件,负责管理用于数据交换的缓冲区。

更多信息

您可以在我的网站 www.tanvon.com 上查看有关 DirectShow 的持续工作。

© . All rights reserved.