1 / 23
文档名称:

DirectShow视频采集专业技术方案.doc

格式:doc   大小:571KB   页数:23页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

DirectShow视频采集专业技术方案.doc

上传人:phl19870121 2019/2/19 文件大小:571 KB

下载得到文件列表

DirectShow视频采集专业技术方案.doc

相关文档

文档介绍

文档介绍: DirectShow视频采集方案流媒体处理技术以其复杂性和技术性一直受到人们的关注。随着网络技术的不断发展,流媒体在网络上得到了广泛地应用。如何能够简单、有效地进行流媒体处理,已成为一个焦点问题。为此,Microsoft推出了DirectShow,DirectShow是Microsoft推出的基于Windows平台的流媒体处理开发包,它与DirectX一起发布。DirectShow对流媒体的捕捉、回放提供了强大的支持,使用它还可以在基于WDM驱动的采集卡上进行数据捕捉。本节将介绍有关DirectShow的相关知识。 DirectShow系统结构分析DirectShow主要由过滤器(FilterGraph)图表构成。过滤图表中包含了各种Filter,这些Filter能够按一定顺序连接在一起,构成一条流水线。从功能的角度划分,Filter大体可以分为3类,SourceFilters、TransformFilters和RenderingFilters。SourceFilters主要负责获取数据,可以是一个文件、一个采集卡、声卡或数码相机等。TransformFilters负责数据的转换、传输。例如各种编码器、解码器等。RenderingFilters负责数据的最终去向,例如将数据传送到声卡、显卡或存储为文件。在开发DirectShow应用程序时,通常需要设计一个过滤图表(FilterGraph),向过滤图表中添加相应的过滤器,最后连接过滤器的引脚就完成了功能的设计。例如,实现一个简单的视频预览功能,需要向过滤图表中添加一个视频捕捉源过滤器和一个VideoRenderer过滤 器,将视频捕捉源过滤器的输出引脚与VideoRenderer过滤器的输入引脚相连就可以了。而在程序中只需要按照设计过滤图表的捕捉添加过滤器并连接过滤器引脚就可以了。在连接过滤器引脚时需要注意:只能是输出过滤器引脚与输入过滤器引脚相连,两个输出过滤器或两个输入过滤器引脚是不能相连的。为了在程序中使用DirectShow,需要单独安装DirectX,,,用户可以从Microsoft的官方网站上免费下载。在安装DirectX之后,程序中需要引用“”头文件,并导入“”库文件和“”库文件才可以使用DirectShow。代码如下:#ment(lib,"Strmiids")#ment(lib,"quartz")#include<> Filter图表设计为了方便用户设计过滤图表,DirectX提供了一个GraphEdit工具。用户可以单击“开始”菜单下的“MicrosoftDirectX9SDK\DirectXUtilities\GraphEdit”菜单项打开GraphEdit工具,。 GraphEdit工具下面笔者介绍如何使用GraphEdit工具设计过滤图表,过滤图表的功能是实现视频的预览功能。具体步骤如下:(1)“Graph/InsertFilters”菜单项打开“添加过滤器”窗口,。 添加过滤器窗口(2)在“VideoCaptureSources”节点下选择一个视频捕捉源过滤器,单击“InsertFilter”按钮将其添加到过滤图表中, 添加视频捕捉源过滤器窗口提示:如果系统中没有安装摄像头及其驱动程序,该节点下将不会有视频捕捉源过滤器。(3)在“DirectShowFilters”节点下选择“VideoRenderer”过滤器,将其添加到图表中,。 添加“VideoRenderer”过滤器窗口(4)利用鼠标将视频捕捉源过滤器的“Capture”引脚与“VideoRenderer”过滤器的“VMRInput0”引脚相连,。 连接过滤器引脚窗口(5)单击工具栏中的“”按钮运行过滤图表,将显示一个视频预览窗口,。  枚举系统设备使用GraphEdit工具,用户可以非常方便地获得与某一系统设备相关的过滤器。但是,在程序中该如何获得这些过滤器呢?用户可以采用枚举的方式列举系统中安装的设备。以列举系统中的视频捕捉设备为例,首先定义一个设备列举接口ICreateDevEnum的一个指针,调用CoCreateInstance方法创建ICreateDevEnum实例,然后定义一个列举监视器IEnumMoniker的一个指针,调用ICreateDevEnum实例的CreateClassEnumerator方法创建IEnumMoniker实例,