最新DirectShow视频采集开发指南
基于DirectShow技术实现视频采集

第37卷第2期(总第144期)2008年6月火控雷达技术Fire Control Radar TechnologyVol.37No.2(Series 144)J un.2008 收稿日期:2007-12-12 作者简介:郭昊,男,1979年生,助理工程师,研究方向为雷达软件开发。
文章编号:1008-8652(2008)02-097-04基于Direct Show 技术实现视频采集郭 昊(西安电子工程研究所 西安 710100)【摘要】 介绍Direct Show 技术的基本概念,提出了基于Direct Show 技术采集视频数据的软件设计方案,文中详细叙述了软件开发的实现框架。
关键词:Direct Show ;视频捕获;过滤器;过滤器图表中图分类号:TP274+12 文献标志码:AImplementation of Video C apture B ased on DirectShow T echnologyGuo Hao(X i ’an Elect ronic Engi neeri ng Research I nstit ute ,X i ’an 710100)Abstract :In t his paper ,t he basic concept of Direct Show technology is int roduced.A software design scheme based on Direct Show technology for video capt ure is p resented.Meanwhile ,t he implementation f rame for developing t he software is described in detail.K eyw ords :Direct Show ;video capt ure ;filter ;filter grap h1 引言为了支持多媒体信息的采集、压缩、解压和回放,针对Windows 平台,微软提供了两种多媒体开发框架:一种是Video for Windows (简称V FW ),另一种是Direct Show 。
基于DirectShow和WPF的实时视频图像采集与处理系统设计与实现

2 0 1 5年 3月
计 算机应 用 与软件
Co mp u t e r Ap p l i c a t i o ns a n d S o f t wa r e
Vo 1 . 32 No. 3
Ma r .2 01 5
基于 D i r e c t S h o w和 WP F的 实 时视 频 图像 采集 与 处 理 系统 设 计 与 实 现
武 凤 翔
( 河南水利与环境职业技术学院 河南 郑 州 4 5 0 0 1 1 )
摘 要
当前视频 图像 的主要问题 是 当处理 的数据量 大 时, 执行效 率低 , 很 难实现 实时性。采用 D i r e c t S h o w技 术, 很 好地解 决 了
这个 问题 。基 于 D i r e c t S h o w可直接对 内存 中的视频数据进行处理 , 从而跨越硬盘 数据读取 的瓶颈。设 计 了以 D i r e c t S h o w和 WP F为 软件平 台的实时视频 图像采集 系统, 包括 : 视频 图像采集 与显示模块 、图像 浏览与处理模 块 、图像存储 与管理模块 。实验结果表 明 该方法应用在 实时视频 图像采集 上可以达 到较好 的效果 , 在工程上应用是可行 的。 关键 词 中图分类号 D i r e c t S h o w WP F 图像采 集 图像处理 图像管理 T P 3 9 1 文献标识码 A D O I : 1 0 . 3 9 6 9 / j . i s s n . 1 0 0 0 — 3 8 6 x . 2 0 1 5 . 0 3 . MP L E ME NT AT I oN oF RE A L- T I ME VI DE o I MA GE A CQU I S I T I oN
基于DirectShow的视频监控采集系统

能 :视频 采集模块完成将视频 采集设 备获取 的视频数
据 存 人 指 定 的文 件 存 储 设 备 中 , 图 2所 示 。 如
视频监控采集 系统就是人们利用视觉来获取信 息的一
种通信方式 , 较 之其他信息传递方式具有 内容丰富 、 它 直 观 及 方 便 等 特 点 所 以 . 频 采 集 系 统 被 广 泛 应 用 于 视 金融 、 通 、 院 、 交 医 电力 、 关 、 防 乃 至 住 宅 社 区等 领 海 国
@ 现 计 机 21. 代 算 008 o
系统运行流程为 : ( ) 建 一个 Fl rG a hMa a e 组 件 ; 1创 ie rp n g r t
( 频 采 集 设 备 的 C SD 为 C SD Vi e I p t vc . 视 LI LI d o n u De ie
2 软 件 设 计
21 系统 流 程 .
系统是在 Vsa C +6 i l + . u 0环境下 . 利用 面 向对象编
程方 法 设 计 开 发 的 。
作 者 简介 : f  ̄
(93 ) 男 , 建 福 州人 , 理 实 验 师 , 18 一 , 福 助 工程 硕 士 , 究 方 向 为 软件 设 计 与 软 件 工 程 研
一
r] - 审口 _
— —
1 . ......... . . ...... . . . .
监控采集 系统
UB s
—— 文件存储设备
域 。设计 开发一套视频监控采集 系统 具有很强 的市场
价 值
图 1 系 统 硬件 架 构
1 总体 设 计
11 设 计 思路 . 系统 的总体设计 目标就是构建一个高质 量 、可靠 性好 、 控制灵活 和易于扩展架构 的视频监控采集 系统 。
用directshow开发视频解码插件

用directshow开发视频解码插件
李晓静;刘爱玉;李舜昌;邵兰英
【期刊名称】《现代制造技术与装备》
【年(卷),期】2010(000)001
【摘要】传统的视频回放系统需要专门开发播放软件.本文介绍了在Visual C++中利用DirectShow SDK定制视频解码插件的解决回放问题的新方案,定制的插件随处可用,Mcrosoft Windows Media Player可以自动调用进行解码回放,避免安装专门的播放软件.本文给出了视频解码插件详细的开发过程,并给出了解码插件的关键函数.
【总页数】3页(P71-73)
【作者】李晓静;刘爱玉;李舜昌;邵兰英
【作者单位】济南柴油机股份有限公司,济南,250306;济南柴油机股份有限公司,济南,250306;济南柴油机股份有限公司,济南,250306;济南柴油机股份有限公司,济南,250306
【正文语种】中文
【相关文献】
1.MPEG-2视频解码器在DirectShow中的实现 [J], 侯春明;赵英男;陈斌;丁雷
2.Visual Studio插件开发漫谈——C#-VB语言转换插件 [J], 肖文(编译)
3.基于GeoProbe插件平台的综合剖面图插件开发 [J], 佟晶;张洪瑞;黄旭钊;王林飞
4.机器视觉软件的插件开发——NeuroCheck的边缘检测插件的设计 [J], 骆顺耀
5.常用DirectShow插件一览 [J],
因版权原因,仅展示原文概要,查看原文内容请购买。
基于DirectShow视频及图片捕获软件的开发

我们知道目前很多工业相机的图像数据采集都是基于DirectShow的,常见的有映美精等。
DirectShow是微软公司提供的一套在Windows平台上进行流媒体处理的开发包,与DirectX开发包一起发布。
DirectShow为多媒体流的捕捉和回放提供了强有力的支持。
运用DirectShow,我们可以很方便地从支持WDM驱动模型的采集卡上捕获数据,并且进行相应的后期处理乃至存储到文件中。
它广泛地支持各种媒体格式,包括Asf、Mpeg、Avi、Dv、Mp3、Wave等等,使得多媒体数据的回放变得轻而易举。
另外,DirectShow还集成了DirectX其它部分(比如DirectDraw、DirectSound)的技术,直接支持DVD的播放,视频的非线性编辑,以及与数字摄像机的数据交换。
更值得一提的是,DirectShow提供的是一种开放式的开发环境,我们可以根据自己的需要定制自己的组件。
笔者使用visual studio 2005 来开发了基于DirectShow的视频捕获软件,并用开发的软件对映美精相机进行了测试。
本软件不但可以实现对相机的视频捕获,而且还可以抓取图像帧。
软件运行时自动搜索所连接的相机,预览后可以对相机参数进行设置。
下面是软件的主界面。
预览视频后可以对视频格式和图像参数进行设置。
开始预览时,捕获的视频是黑白的,我们将颜色空间设置为UYVY即可捕获彩色视频。
下面是捕获的一帧图像,图像质量虽然没有映美精自带的软件效果好,但已经实现了所需各项基本功能,接下来的工作将会进一步提高软件性能。
另外我们还可以捕获视频,点击“捕获视频”按钮,输入要保持的文件名,注意要以.avi后缀结尾,点确定就开始捕获视频。
从我们开发的软件可以看到,映美精的相机能够很好的支持DirectShow的驱动,我们的软件对映美精相机的识别是如此的容易。
接下来我们将继续开发基于其它驱动的图像捕获软件,为最终实现在一个软件中识别各种相机而努力。
基于DirectShow视频及图片捕获软件的开发

基于DirectShow视频及图片捕获软件的开发我们知道目前很多工业相机的图像数据采集都是基于DirectShow的,常见的有映美精等。
DirectShow是微软公司提供的一套在Windows平台上进行流媒体处理的开发包,与DirectX开发包一起发布。
DirectShow为多媒体流的捕捉和回放提供了强有力的支持。
运用DirectShow,我们可以很方便地从支持WDM驱动模型的采集卡上捕获数据,并且进行相应的后期处理乃至存储到文件中。
它广泛地支持各种媒体格式,包括Asf、Mpeg、Avi、Dv、Mp3、Wave等等,使得多媒体数据的回放变得轻而易举。
另外,DirectShow还集成了DirectX其它部分(比如DirectDraw、DirectSound)的技术,直接支持DVD的播放,视频的非线性编辑,以及与数字摄像机的数据交换。
更值得一提的是,DirectShow提供的是一种开放式的开发环境,我们可以根据自己的需要定制自己的组件。
笔者使用visual studio 2005 来开发了基于DirectShow的视频捕获软件,并用开发的软件对映美精相机进行了测试。
本软件不但可以实现对相机的视频捕获,而且还可以抓取图像帧。
软件运行时自动搜索所连接的相机,预览后可以对相机参数进行设置。
下面是软件的主界面。
预览视频后可以对视频格式和图像参数进行设置。
开始预览时,捕获的视频是黑白的,我们将颜色空间设置为UYVY即可捕获彩色视频。
下面是捕获的一帧图像,图像质量虽然没有映美精自带的软件效果好,但已经实现了所需各项基本功能,接下来的工作将会进一步提高软件性能。
另外我们还可以捕获视频,点击“捕获视频”按钮,输入要保持的文件名,注意要以.avi后缀结尾,点确定就开始捕获视频。
从我们开发的软件可以看到,映美精的相机能够很好的支持DirectShow的驱动,我们的软件对映美精相机的识别是如此的容易。
接下来我们将继续开发基于其它驱动的图像捕获软件,为最终实现在一个软件中识别各种相机而努力。
基于DirectShow的多摄像头视频采集

基于DirectShow的多摄像头视频采集1.为什么使用DirectShow笔者使用的是两个USB摄像头,单摄像头视频采集使用OpenCV的VideoCapture类没有问题,但是双摄像头就有问题,一个正常,另外一个采集不到信息,显示一片灰色。
网上有种解决方法是逆序打开摄像头,结果两个窗口是可以采集到视频信息,但是竟然是同一个摄像头的视频信息,无奈的只能使用DirectShow采集多摄像头视频信息。
先看看什么是DirectShow:DirectShow 是 DirectX 的组件之一, DirectX 软件开发包是 Microsoft 提供的一套在 Windows平台上开发高性能图形、声音、输入、输出和网络游戏的编程接口。
这其中,DirectShow提供了应用程序从适当的硬件中捕捉和预览音、视频的能力。
数据源包括: VCR、 Camera、 TV Tuner、 Microphone 或其他的数据源。
应用程序可以立刻显示捕捉的数据(预览),或是保存到一个文件中。
摄像头采集信息常用的软件AMCap就是基于DirectShow SDK编写的。
查阅一下官方文档,感觉好难的样子,难道要新学一门“快过时”的技术吗?幸好于仕琪老师写了一个CCameraDS类,可直接返回IplImage,使用方便。
2.在VS2010中配置DirectShow并采集双目摄像头视频下载DirectShow相关文件,我已经共享在百度云盘,点击下载。
解压以后copy到D:\opencv里(放在这里为了管理方便)在解决资源管理器中的项目名称处右键\属性\配置属性\VC++目录,引用目录中添加DirectShow的include文件夹,我添加的是D:\opencv\DirectShow\Include在引用目录下面有一个库目录,添加DirectShow的Lib文件夹,我添加的是D:\opencv\DirectShow\Lib;下载CCameraDS类相关文件,点击下载。
DirectShow插件使用手册

DirectShow插件使用手册【摘要】本文档介绍了DirectShow连接相机时的插件使用,通过本套插件可连接海康的工业相机。
一、环境配置1.相机环境配置打开MVS,若PC与相机不在同一网段,则配置IP,设置好相机参数。
确保相机能在MVS上正常取流。
2.注册和注销插件在客户端MVS安装完成后,不会默认注册此插件,需要用户手动用管理员权限运行register.bat脚本注册此插件,插件脚本存放在Development\ThirdPartyPlatformAdapter\DirectShow文件夹内。
可用graphedt.exe程序查看是否注册成功,插件注册在Video Capture Source项内,如图1。
图1用管理员权限运行unregister.bat文件可注销已注册的DShow插件。
3.环境检测(1)在graphedt.exe程序中打开菜单Graph-Insert Filters…;(2)在Video Capture Source项内选择MvCamera DirectShow Source;(3)选中MvCamera DirectShow Source并右键打开Filter Properties…进行相机选择和参数获取和设置等操作,如图2;(4)在DirectShow Filters中选择Video Renderer,并将Video Out与Input相连接,如图3;(5)菜单Graph-Play进行预览;图2 属性页图3 连接页二、参考示例提供DirectShowDisplay示例程序供用户参考,对示例做简要介绍:DirectShowDisplay示例为控制台程序,路径为Development\Samples\DirectShow\DirectShowDisplay,支持Render播放。
在头文件MvDSSource.h内列出相机列表获取、参数获取、参数设置等接口供外部调用。
此示例程序可编译x86和x64版本,分别对应插件的x86和x64版本。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
卡,为 CLSID_VideoCompressorCategory,表示枚举系统中的视频压缩器。下面的代码演示了如何枚 举系统中的视频捕捉卡。 //枚举视频设备 ICreateDevEnum *pDevEnum = NULL; CoCreateInstance(CLSID_SystemDeviceEnum, NULL, CLSCTX_INPROC,
pMoniker->BindToObject(0, 0, IID_IBaseFilter, (void**)&pSrc); pMoniker->Release(); break; } pClassEnum->Release(); 而下面的代码则用于判断系统中是否安装了指定的视频压缩器。 ICreateDevEnum *pDevEnum = NULL; CoCreateInstance(CLSID_SystemDeviceEnum, NULL, CLSCTX_INPROC, IID_ICreateDevEnum, (void **)&pDevEnum); IEnumMoniker *pClassEnum = NULL; //列举视频压缩设备 pDevEnum->CreateClassEnumerator(CLSID_VideoCompressorCategory, &pClassEnum, 0); while (pClassEnum->Next(1, &pMoniker, &cFetched) == S_OK) { IPropertyBag* pProp= NULL;
图 2.10 Graph Edit 工具 下面笔者介绍如何使用 Graph Edit 工具设计过滤图表,过滤图表的功能是实现视频的预览功能。具 体步骤如下: (1)在图 2.4 中单击“Graph/Insert Filters”菜单项打开“添加过滤器”窗口,如图 2.11 所示。
图 2.11 添加过滤器窗口 (2)在“Video Capture Sources”节点下选择一个视频捕捉源过滤器,单击“Insert Filter”按 钮将其添加到过滤图表中,如图 2.12 所示
为了在程序中使用 DirectShow,需要单独安装 DirectX,当前 DirectX 的最新版本为 9.0,即 DirectX9.0,用户可以从 Microsoft 的官方网站上免费下载。在安装 DirectX 之后,程序中需要引用 “dshow.h”头文件,并导入 “Strmiids.lib”库文件和“quartz.lib”库文件才可以使用 DirectShow。代码如下:
2.3.1 DirectShow 系统结构分析
表中包含了各种 Filter,这些 Filter 能够按一定顺序连接在一起,构成一条流水线。从功能的角度划分,Filter 大体可以分为 3 类,Source Filters、Transform Filters 和 Rendering Filters。Source Filters 主要负责获取数据,可以是 一个文件、一个采集卡、声卡或数码相机等。Transform Filters 负责数据的转换、传输。例如各种 编码器、解码器等。Rendering Filters 负责数据的最终去向,例如将数据传送到声卡、显卡或存储 为文件。
DirectShow 最新视频采集开发指南
2011.11
2.3 DirectShow 视频采集方案
流媒体处理技术以其复杂性和技术性一直受到人们的关注。随着网络技术的不断发展,流媒体在网络 上得到了广泛地应用。如何能 够简单、有效地进行流媒体处理,已成为一个焦点问题。为此,Microsoft 推出了 DirectShow,DirectShow 是 Microsoft 推 出的基于 Windows 平台的流媒体处理开发包,它与 DirectX 一起发布。DirectShow 对流媒体的捕捉、回放提供了强大的支持,使用它还可以 在基于 WDM 驱动的采集卡上进行数据捕捉。本节将介绍有关 DirectShow 的相关知识。
图 2.14 连接过滤器引脚窗口 (5)单击工具栏中的“ ”按钮运行过滤图表,将显示一个视频预览窗口,如图 2.15 所示。
图 2.15 视频预览窗口
2.3.3 枚举系统设备
使用 Graph Edit 工具,用户可以非常方便地获得与某一系统设备相关的过滤器。但是,在程序中该 如何获得这些过滤器呢? 用户可以采用枚举的方式列举系统中安装的设备。以列举系统中的视频捕捉设备为例,首先定义一个 设备列举接口 ICreateDevEnum 的一个指针,调用 CoCreateInstance 方法创建 ICreateDevEnum 实例, 然后定义一个列举监视器 IEnumMoniker 的一个指针,调用 ICreateDevEnum 实例的 CreateClassEnumerator 方法创建 IEnumMoniker 实例,最后以循环的方式调用 IEnumMoniker 实例的 Next 方法遍历系统设备,调用 IEnumMoniker 实例的 BindToObject 方法将系统设备绑定到过滤器上。 在上面的描述中,ICreateDevEnum 实例的 CreateClassEnumerator 方法的第一个参数确定枚 举的系 统设备。例如,第一个参数为 CLSID_VideoInputDeviceCategory,表示将要枚举系统中的视频捕捉
#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 所示。
每一个过滤器(Filter)至少应有一个引脚(Pin),或者是输入引脚或者是输出引脚。有些过滤器 还拥有多个引脚,即 又输入引脚又有输出引脚。但是过滤器的输入、输出引脚并不是对应的,有些 过滤器可以有多个输入引脚,而只有一个输出引脚或者没有输出引脚。在程序中为了连 接过滤器间 的引脚,通常需要获得过滤器的各个引脚。用户可以使用 IEnumPins 接口来枚举某一个过滤器的输入、 输出引脚。过滤器 IBaseFilter 提供了一个 EnumPins 方法用于生成一个 IEnumPins 接口实例,这样, 通过调用 IEnumPins 的 Next 方法便可以 访问各个引脚了。下面的代码定义了一个 FindPin 函数,用 于获得某个过滤器的输入或输出引脚。 //查找引脚 IPin* CKinescopeDlg::FindPin(IBaseFilter *pFilter, PIN_DIRECTION dir) {
2.3.6 视频预览设计方案
在开发视频应用程序时,一个最基本的功能是视频预览。本节将介绍如何应用 DirectShow 实现视频 预览,效果如图 2.16 所示。
图 2.16 视频预览设计方案 在使用 DirectShow 开发应用程序时,通常需要先设计过滤图表,然后根据图表来设计应用程序。在 设计视频预览过滤图 表时,只需要两个步骤,第一个步骤是添加视频捕捉的源过滤器,第二个步骤 是添加 Video Render 过滤器,并连接两个过滤器引脚。过滤图表具体设计步骤如下: (1)启动 Graph Edit 工具, 在 Graph Edit 工具中单击“Graph \Insert Filters”菜单项打开“添 加过滤器窗口”,在“Video Capture Sources”节点下选择一个视频捕捉源过滤器,单击“Insert Filter”按钮将其添加到过滤图表中,如图 2.11 所示。 (2)在“DirectShow Filters”节点下将“Video Render”过滤器添加到图表中,如图 2.17 所示。
IEnumPins* pEnumPins; IPin* pOutpin; PIN_DIRECTION pDir;
pFilter->EnumPins(&pEnumPins); while (pEnumPins->Next(1,&pOutpin,NULL)==S_OK) {
pOutpin->QueryDirection(&pDir); if (pDir==dir) {
return pOutpin; } } return 0; } 用户可以按下面的方式获得某个过滤器的输入、输出引脚。 IPin * pComOut,*pComIn ; pComIn = FindPin(pCompress,PINDIR_INPUT); pComOut = FindPin(pCompress,PINDIR_OUTPUT);
IID_ICreateDevEnum, (void **)&pDevEnum); IEnumMoniker *pClassEnum = NULL; pDevEnum->CreateClassEnumerator(CLSID_VideoInputDeviceCategory, &pClassEnum, 0); ULONG cFetched; while (pClassEnum->Next(1, &pMoniker, &cFetched) == S_OK) {