DirectShow 过滤器(初学者版)






2.36/5 (20投票s)
以通俗易懂的方式描述 DirectShow 过滤器。
引言
DirectShow 过滤器是 COM 组件,它们连接在一起以构建一个过滤器图。过滤器图是一个完整的机制(不同的过滤器连接在一起),是运行媒体文件所必需的。通常,一个过滤器能够完成单一的工作,这意味着一个过滤器是一个完全能够处理媒体文件数据的实体。因此,如果要处理媒体文件数据,最强大的技术是构建您自己的过滤器,它可以执行所需的工作。
模块化设计
构建您自己的过滤器的另一个好处是,在内部,DirectShow 采用模块化设计,这意味着它由协同工作的小组件组成。这种设计使开发人员免于许多烦恼。如果您构建自己的过滤器(根据规范),则无需担心过滤器图的其他部分。如果您的过滤器运行正常,那么一切都会正常。否则,您可以确认是您自己的过滤器发生故障,而不是任何其他过滤器,因为其他过滤器已经由各自的开发人员进行了测试。
过滤器图中的数据流
数据在过滤器图中从一个过滤器流向另一个过滤器。提供数据的过滤器称为上游过滤器,接收数据的过滤器称为下游过滤器。数据从上游过滤器流向下游过滤器,这称为上游过滤器推送数据(参见传输了解推送和拉取)。
过滤器类型
通常,过滤器分为三类
- 源过滤器
- 变换过滤器
- 渲染器过滤器
让我们简要地看一下它们。
源过滤器
这些是过滤器图中数据流的来源。它们为下游过滤器提供数据(或下游过滤器从源过滤器中获取数据,参见下面的传输)。它们分为三类:捕获源过滤器,文件源过滤器,创建者源过滤器。捕获源过滤器是从捕获设备(如摄像机或网络摄像头)获取数据的过滤器。文件源过滤器是从存储的文件中获取数据的过滤器。最后,创建者源过滤器是创建自身数据以在过滤器图中流动的过滤器类型。
变换过滤器
这是使用和创建最多的过滤器类别。除源过滤器和渲染器过滤器(参见下文)之外的任何过滤器都称为变换过滤器。它们从源过滤器或上游的任何其他过滤器获取数据,并对数据进行自定义操作,然后将该数据向下游推送。这里的自定义操作是指它们被创建的目的;一些解析数据,另一些解码数据,或者您想要对数据执行的任何操作。
渲染器过滤器
过滤器图中的数据从源过滤器流经变换过滤器到渲染器过滤器。这是位于过滤器图末端的过滤器。例如,在屏幕上显示视频或将数据写入文件的过滤器。
连接过滤器
一个过滤器是一个 COM 组件,它具有输入和输出引脚。这些也是 COM 组件。所有数据都通过这些引脚传输。上游过滤器的输出引脚连接到下游过滤器的输入引脚。
连接要求
连接任意两个过滤器引脚并非易事。必须进行一些要求的协商。实际的协商工作由引脚完成,在建立连接之前,必须满足这些要求。
这些要求是什么,为什么必须满足它们。让我们来看看
要求是
- 媒体类型
- 传输
- 分配器
让我们简要地看看它们是什么。
媒体类型
当两个引脚连接时,它们必须就将传递的数据格式达成一致,以便当实际数据流开始时,下游过滤器可以理解上游过滤器提供的数据格式。
传输
这两个也必须就将用于交换数据的协议或机制达成一致。最常见的传输是本地内存。本地内存传输有两种机制:推送和拉取。在推送模型中,数据从上游过滤器流向下游过滤器。并且,在拉取模型中,下游过滤器从上游过滤器拉取数据。拉取模型仅用于文件源过滤器,过滤器从文件读取数据。所有其他使用推送模型。
分配器
分配器也是 COM 组件,负责管理用于数据交换的缓冲区。
更多信息
您可以在我的网站 www.tanvon.com 上查看有关 DirectShow 的持续工作。