- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
DirectShow视频采集实施方案
2.3? DirectShow视频采集方案
流媒体处理技术以其复杂性和技术性一直受到人们的关注。随着网络技术的不断发展,流媒体在网络上得到了广泛地应用。如何能 够简单、有效地进行流媒体处理,已成为一个焦点问题。为此,Microsoft推出了DirectShow,DirectShow是Microsoft推 出的基于Windows平台的流媒体处理开发包,它与DirectX一起发布。DirectShow对流媒体的捕捉、回放提供了强大的支持,使用它还可以 在基于WDM驱动的采集卡上进行数据捕捉。本节将介绍有关DirectShow的相关知识。
2.3.1? DirectShow系统结构分析
DirectShow主要由过滤器(Filter Graph)图表构成。过滤图表中包含了各种Filter,这些Filter能够按一定顺序连接在一起,构成一条流水线。从功能的角度划分,Filter大体可以分为3类,Source Filters、Transform Filters和Rendering Filters。Source Filters主要负责获取数据,可以是一个文件、一个采集卡、声卡或数码相机等。Transform Filters负责数据的转换、传输。例如各种编码器、解码器等。Rendering Filters负责数据的最终去向,例如将数据传送到声卡、显卡或存储为文件。
在开发DirectShow应用程序时,通常需要设计一个过滤图表(Filter Graph),向过滤图表中添加相应的过滤器,最后连接过滤器的引脚就完成了功能的设计。例如,实现一个简单的视频预览功能,需要向过滤图表中添加一个视 频捕捉源过滤器和一个Video Renderer过滤? 器,将视频捕捉源过滤器的输出引脚与Video Renderer过滤器的输入引脚相连就可以了。而在程序中只需要按照设计过滤图表的捕捉添加过滤器并连接过滤器引脚就可以了。在连接过滤器引脚时需要注 意:只能是输出过滤器引脚与输入过滤器引脚相连,两个输出过滤器或两个输入过滤器引脚是不能相连的。
为了在程序中使用DirectShow,需要单独安装DirectX,当前DirectX的最新版本为9.0,即 DirectX9.0,用户可以从Microsoft的官方网站上免费下载。在安装DirectX之后,程序中需要引用“dshow.h”头文件,并导入 “Strmiids.lib”库文件和“quartz.lib”库文件才可以使用DirectShow。代码如下:
#pragma comment (lib,Strmiids)
#pragma comment (lib,quartz)
#include dshow.h
2.3.2? Filter图表设计
为了方便用户设计过滤图表,DirectX提供了一个Graph Edit工具。用户可以单击“开始”菜单下的“Microsoft DirectX 9 SDK\DirectX Utilities\Graph Edit”菜单项打开Graph Edit工具,如图2.10所示。
图2.10? Graph Edit工具
下面笔者介绍如何使用Graph Edit工具设计过滤图表,过滤图表的功能是实现视频的预览功能。具体步骤如下:
(1)在图2.4中单击“Graph/Insert Filters”菜单项打开“添加过滤器”窗口,如图2.11所示。
图2.11? 添加过滤器窗口
(2)在“Video Capture Sources”节点下选择一个视频捕捉源过滤器,单击“Insert Filter”按钮将其添加到过滤图表中,如图2.12所示
图2.12? 添加视频捕捉源过滤器窗口
提示:如果系统中没有安装摄像头及其驱动程序,该节点下将不会有视频捕捉源过滤器。
(3)在“DirectShow Filters”节点下选择“Video Renderer”过滤器,将其添加到图表中,如图2.13所示。
图2.13? 添加“Video Renderer”过滤器窗口
(4)利用鼠标将视频捕捉源过滤器的“Capture”引脚与“Video Renderer”过滤器的“VMR Input0”引脚相连,如图2.14所示。
图2.14? 连接过滤器引脚窗口
(5)单击工具栏中的“”按钮运行过滤图表,将显示一个视频预览窗口,如图2.15所示。
图2.15? 视频预览窗口
2.3.3? 枚举系统设备
使用Graph Edit工具,用户可以非常方便地获得与某一系统设备相关的过滤器。但是,在程序中该如何获得这些过滤器呢?
用户可以采用枚举的方式列举系统中安装的设备。以列举系统中的视频捕捉设备为例,首先定义一个设备列举接口 ICreateDevEnum的一个指针,调用CoCreateInstance方法创建ICreateDevEnum
文档评论(0)