Go homepage(回首页)
Upload pictures (上传图片)
Write articles (发文字帖)

The author:(作者)qq
published in(发表于) 2014/7/11 9:28:56
C#程序中的DirectShow设计

C#程序中的DirectShow设计

DirectShow设计

1.DirectShow技术简介

DirectShow是DirectX开发包中关于流媒体处理的一个开发包,这个开发包可以进行音频和视频的捕捉,使用它可以开发DVD应用程序和数字TV应用程序。DirectShow支持的媒体文件主要有WMA、MOV、MPG、AVI、MP3、WAV、WMV等,无论是读取媒体文件还是将捕捉的数据写入到媒体文件,DirectShow开发包都能提供很好的技术支持。

2.DirectShow技术结构

DirectShow技术利用标准组件来处理流媒体数据,这些组件称为过滤器。过滤器带有输入和输出针角,或二者兼而有之。在DirectShow技术中处于最核心位置的就是作为“过滤器”的可插入标准组件,它是执行特定任务的COM对象。过滤器又分为源过滤器(source filter)、变换过滤器(Rransform filter)和表现过滤器(Renderer filter)等。过滤器通过向文件读写、修改数据和显示数据到输出设备上来操作流媒体。为了完成整个任务,必须要将所有过滤器Filter连接起来,这3种过滤器组成了过滤器图表结构,如图1所示。



图1 过滤器图表结构图

从图5中可以看出,过滤器图表是各种过滤器的集合,它是通过过滤器的输入、输出针脚顺序连接而成的,这些过滤器的针脚通过协商来决定它们将支持何种形式的多媒体。由于DirectShow支持可重构的过滤器图表结构,所以使用相同的软件组件可以播放多种类型的媒体。开发人员可以通过定义自己的过滤器来扩展DirectShow对媒体的支持功能。

在过滤器图表结构中,源过滤器用来从数据源获取数据并将数据传送到过滤器图表中。数据源可以是摄像机、因特网、磁盘文件等。转换过滤器用来获取、处理和传送媒体数据,它包括分离视频和音频的分解变换过滤器(Splitter transform filter)、解压视频数据的视频转换过滤器(Video transform filter)、解压音频数据的音频转换过滤器(Audio transform filter)。表现过滤器用来在硬件上(如显卡和声卡)或者是任何可以接受媒体数据的地方(如磁盘文件)表现媒体数据,它包括用来显示图像的视频表现过滤器(Video renderer filter)、将音频数据送到声卡上去的音频表现过滤器(Audio renderer filter)。

在过滤器图表中,为了完成特定的任务,必须将所有需要的过滤器连接起来,因此前级过滤器的输出必定成为下级过滤器的输入。一个过滤器至少有一个输入针(Input pin),并将特定的输出送到输出针(Output pin),如图2所示,为一个过滤器连接图。



图2 过滤器连接图

应用程序不需要对过滤器图表中的各个过滤器进行单独的处理,因为在更高的层次上,DirectShow提供一个称为过滤图表管理器的部件(FGM)管理着这些过滤器的连接和流媒体数据在过滤器之间的流动。网站源代码FGM提供了一套COM接口,应用程序可以通过它来访问过滤器图表,控制流媒体或者接收过滤器事件。如果需要,它可以自动的插入一个合适的解码器,并将转换过滤器的输出针脚连接到表现过滤器。应用程序可以通过与过滤图表管理器的通信来控制过滤器图表的活动。程序开发人员只需要调用API函数来实现对流媒体的控制,如run方法启动流媒体在过滤器图表(Filter graph)中的流动,pause方法暂停流媒体的播放,stop方法停止播放流媒体等。

3.DirectShow技术开发准备

DirectShow组件在“C:WINDOWSsystem32”目录下的Quartz.dll动态库中,要使C#代码引用COM对象和接口,必须将COM类型库转换为.NET框架元数据,从而有效地创建一个可以从任何托管语言调用的托管包装。在转换过程中需要使用FrameWork SDK自带的TlbImp命令工具,该命令工具在“D:Program FilesMicrosoft Visual Studio 8SDKv2.0BinTlbImp.exe”目录下(取决于Visual Studio 2005的安装路径)。该命令的使用方法为:

TlbImp C:WINDOWSsystem32quartz.dll out:C:WINDOWSsystem32quartzDriectShow.dll

在DOS命令下执行转换成功,如图3所示。



图3 装换Quartz.dll

转换完成后需在应用程序引用quartzDriectShow,引用quartzDriectShow.dll组件步骤如下所示。


If you have any requirements, please contact webmaster。(如果有什么要求,请联系站长)





QQ:154298438
QQ:417480759