2024年5月1日发(作者:)

第一部分:背景知识

DirectShow是微软公司提供的一套在Windows平台上进行流媒体处理的开发包,与

DirectX开发包一起发布。它经过DirectX 6.0中的DirectX Media发展而来,集成了

DirectX家族中的其他成员(DirectDraw、DirectSound等),可以说是一位“集大成

者”。

DirectShow能做些什么? DirectShow为多媒体流的捕捉和回放提供了强有力的支

持。运用DirectShow,可以很方便地从支持WDM驱动模型的采集卡上捕获数据,并且

进行相应的后期处理乃至存储到文件中。它广泛地支持各种媒体格式,包括Asf、Mpeg、

Avi、Dv、Mp3、Wave等等,使得多媒体数据的回放变得轻而易举。另外,DirectShow

直接支持DVD的播放,视频的非线性编辑,以及与数字摄像机的数据交换。更值得一提

的是,DirectShow提供的是一种开放式的开发环境,每个功能模块都采取COM组件方式,

称为Filter,开发者也可以开发自己的功能Filter来扩展DirectShow的应用。按照功能来

划分,Filter分为3类:Source Filter, Transform Filter, Rendering Filter。前者负责获取

数据,数据源可以是文件、数字摄像机等,然后将数据往下传输;中间者负责数据的格式

转换,比如数据流的分离与合成、编码解码等,然后把数据继续往下传输;后者负责数据

的去向——给声卡、显卡进行播放或者输出到文件存储。

第二部分 核心技术

DirectShow的开发实际就是Filter的开发,DirectShow自身提供了,下面就是Filter

概述。

1、DirectShow的 Filter

Filter 一般分为下面几种类型。

(1)源过滤器(source filter):源过滤器引入数据到过滤器图表中,数据来源可以

是文件、网络、照相机等。不同的源过滤器处理不同类型的数据源。

(2)变换过滤器(transform filter):变换过滤器的工作是获取输入流,处理数据,

并生成输出流。变换过滤器对数据的处理包括编解码、格式转换、压缩解压缩等。

(3)提交过滤器(renderer filter):提交过滤器在过滤器图表里处于最后一级,它

们接收数据并把数据提交给外设。

(4)分割过滤器(splitter filter):分割过滤器把输入流分割成多个输出。例如,AVI

分割过滤器把一个AVI格式的字节流分割成视频流和音频流。

(5)混合过滤器(mux filter):混合过滤器把多个输入组合成一个单独的数据流。例

如,AVI混合过滤器把视频流和音频流合成一个AVI格式的字节流。

过滤器的这些分类并不是绝对的,例如一个ASF读过滤器(ASF Reader filter)既是

一个源过滤器又是一个分割过滤器。

2、关于Filter Graph Manager

Filter Graph Manager也是一个com对象,用来控制Filter graph中的所有的filter,

主要有以下的功能:

1) 用来协调filter之间的状态改变,从而使graph 中的所有的filter的状态的改变应