DirectShow 体系结构
DirectShow技术是建立在DirectDraw和DirectSound组件基础之上的,它通过DirectDraw对显卡进行控制以显示视频,通过DirectSound对声卡进行控制以播放声音。
DirectShow的体系结构如下图所示:
DirectShow 位于应用层中。它使用一种叫 Filter Graph 的模型来管理整个数据流的处理过程;参与数据处理的各个功能模块叫 Filter;各个 Filter 在 Filter Graph 中按一定的顺序连接成一条 “流水线” 协同工作。( 可以看出 FilterGraph 是 Filter 的容器 )
按照功能来分,Filter 大致分为三类:Source Filters、Transform Filters 和 Rendering Filters。
- Source Filters 主要负责取得数据,数据源可以是文件、因特网、或者计算机里的采集卡、数字摄像机等,然后将数据往下传输;
- Transform Fitlers 主要负责数据的格式转换、传输;
- Rendering Filtes 主要负责数据的最终去向,我们可以将数据送给声卡、显卡进行多媒体的演示,也可以输出到文件进行存储。
在 DirectShow 系统上,我们看到的,即是我们的应用程序(Application)。应用程序要按照一定的意图建立起相应的 Filter Graph,然后通过 Filter Graph Manager 来控制整个的数据处理过程。DirectShow 能在 Filter Graph 运行的时候接收到各种事件,并通过消息的方式发送到我们的应用程序。这样,就实现了应用程序与 DirectShow 系统之间的交互。
DirectShow Filter概述以及Pin连接
过滤器(Filter)是DirectShow中最基本的概念。DirectShow是通过Filter Graph来管理Filter的。Filter Graph是Filter的”容器”,而Filter是Filter Graph中的最小功能模块。
过滤器(Filter)有三种可能的状态:running、stopped和paused。
- 当过滤器运行时,它会处理媒体数据。
- 当它停止时,它停止处理数据。
- 暂停状态用于在运行之前提示数据;
Filter图中的数据流部分更详细地描述了这个概念。除了极少数例外,状态变化在整个过滤器图中都是协调的;图中的所有过滤器一致地切换状态。因此,整个过滤器图形也被称为正在运行、停止或暂停。
Filter是一种COM组件,对于每个Filter,都有其自己的Pin,它是由Filter创建的COM对象。 Filter通过Pin来进行他们之间的连接。
Pin分为两种:输出Pin和输入Pin。输出的Pin把Filter处理后的数据传送到Filter的外部,而输入Pin则是把Filter外部的数据接收到Filter中,以便Filter对这些数据进行处理。
对于三种类型的Filter(Source Filter,Transform Filter,Rendering Filter)的连接图如下:
可以根据Filter所包含的输入Pin和输出Pin的熟练来判断Filter的类型:
- 只有输出Pin,没有输入pin,为Source Filter
- 既有输出Pin,又有输入pin,为Transform Filter
- 没有输出Pin,只有输入pin,为Rendering Filter