基于DirectShow视频及图片捕获软件的开发
基于DirectShow视频帧实时捕捉的设计与实现

基于DirectShow视频帧实时捕捉的设计与实现朱尹华;周尚波;王兴星;谢磊;周庆【期刊名称】《计算机应用与软件》【年(卷),期】2011(028)001【摘要】In this paper, we present a solution to resolve the" black screen" problem occurred in software system such as distance education, etc. Firstly, we implement the video-frames real-time capturing from video stream of multimedia files by using DirectShow technology to deal with multimedia files or video stream in multimedia stream. Then, the GDI function of Windows is invoked to render the image frames,which are captured by the DirectShow. Finally, according to the standard of MPEG2 a file is composed in AVI video format which is able to replay real-timely.%主要针对远程教育等软件系统中现存的"黑屏"问题提出一种解决方案.运用DirectShow技术对多媒体文件或多媒体流中的视频流进行处理,实现从多媒体文件视频流中进行视频帧的实时捕获,而后调用Windows中GDI函数对获取的图像帧进行渲染,最后按照MPEG2标准合成AVI视频文件并可以实时重放.【总页数】5页(P35-38,40)【作者】朱尹华;周尚波;王兴星;谢磊;周庆【作者单位】重庆大学计算机学院,重庆,400030;重庆大学计算机学院,重庆,400030;重庆大学计算机学院,重庆,400030;重庆大学计算机学院,重庆,400030;重庆大学计算机学院,重庆,400030【正文语种】中文【相关文献】1.基于DirectShow技术的视频帧捕捉方法 [J], 余婷;管庶安2.基于DirectShow技术视频流捕捉及压缩的实现方案 [J], 华畯;杨树堂;李建华3.基于 DirectShow 和 WPF 的实时视频图像采集与处理系统设计与实现 [J], 武凤翔4.基于USB2.0的数字图像视频流的实时捕捉与显示系统的设计与实现 [J], 徐大诚;邵雷;李培光5.利用DirectShow技术实时捕捉视频流中的图像帧 [J], 胡涛;刘睿;张志刚因版权原因,仅展示原文概要,查看原文内容请购买。
基于 DirectShow 和 WPF 的实时视频图像采集与处理系统设计与实现

基于 DirectShow 和 WPF 的实时视频图像采集与处理系统设计与实现武凤翔【期刊名称】《计算机应用与软件》【年(卷),期】2015(000)003【摘要】Currently,the main problems of video image are the low execution efficiency and difficult to realise real-time performance when processing large amounts of data.In light of this,we use DirectShow technology to well solve the problems.The video data in RAM can be directly processed based on DirectShow so that the bottleneck of hard disk data reading is stepped across.In this paper we design the real-time video image acquisition system,which uses DirectShow and WPF as the software platform,and includes video image capture and display module,image browsing and processing module,and image storage and management module.Experimental results show that the method can achieve good effect when applying in real-time video image acquisition,and is feasible in engineering application.%当前视频图像的主要问题是当处理的数据量大时,执行效率低,很难实现实时性。
基于DirectShow的视频捕获

该体系结构见 图i中最基本 的功能模块是过滤器 ( i e ) F t r 。过滤器根据功 能不 同分为三类:源过滤器 l
( 0 r e F t r ) 、转 换过 滤 器 ( r n f r S u c i 1e s T a 0 m s F 1e S i t r )和 渲染 过 滤器 (e d r n i t r )。源 R n e ig F 1 e s
视频。在W n o s系统中实现视频捕获的方法有多种, id w *
采用 D r c S O 技 术 是一 个较 好 的选 择 。 ie t h W
一
、
D e t h w c S o 体系结构简介 i r
Drc So 是 由微软 推 出应用 于W n o s 平台针 对 iethw i dw * 流媒 体对象 的 结构 体系 , 它实现 高 品质 的多媒 体 数据 流 的捕 捉和 回 放 。 可
绍 了作者在远程教学项 目中运用 Di c h W实现视频捕获的一些方法和经验,并给 出了用 V 编写的 e t 0 r S C
D e t h W视 频 捕 获程 序 示例 。 i cS O r
关键词:D r e S o 视频捕获 过滤器 C M ie t hw O
随着 联 网的飞 速 发展 ,多媒 体技 术 的应 用 已非常 互
— — —
J
L — — — — 一 — — — — —.J ————— ————. —
L — —— — — — — —— — — J — —— — — — — —— — 一—
图 1 D e S 0 系统 框 架 r t w i c h
维普资讯
维普资讯
中 地代 目 黼
20年第l期( 第4期 06 O 总 4)
基于DirectShow视频帧实时捕捉的设计与实现

21 0 1年 1月
计 算机 应 用与软 件
Co u e p i ai n n o t r mp t rAp lc to sa d S f wa e
Vo. 8 No 1 12 .
J n. 01l a 2
基 于 Di cS o 视 频 帧 实 时 捕 捉 的设 计 与 实 现 r th w e
t ea t li d afl so ie te m n li di te m . o d lwih mu tme i e rvd o sr a i mu tme a sra The t i n,heGDIf c in o i d wsi nv ke o r nd rt ma e fa s, un to fW n o si o d t e e hei g r me
CAPTURI NG BAS ED oN RECTS DI Ho W
Z uY n u Z o h n b Wa gX n x g X eL i Z o ig h ih a h uS a g o n igi i e n h uQ n
( ol efC m ue c ne C og igU i rt,h nqn 0 0 0,hn ) C lg o p t Si c ,h nqn nv sy C og ig4 0 3 C ia e o r e ei
染 , 后 按 照 MP G 最 E 2标 准 合 成 A I 频 文 件 并 可 以实 时重 放 。 V视 关键词 Drc hw技 术 i to eS A I MP G 多媒 体 流 V E2
DES GNI I NG AND M PLEM ENTI I NG REAL. M E DEo TI VI FRAM E
件 视 频 流 得 到 的 视 频 帧 是 黑 色 的 , 黑 屏 问 题 ; 何 设 计 抓 即 如
基于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技术的视频帧捕捉方法

基 于 D rcS o i th w技 术 的视频 帧 捕捉 方法 e
余 婷 , 庶安 管
( 武汉工业学院 计算机与信息工程系 , 湖北 武汉 4 02 ) 3 03
摘
要 : 于 C M 技 术的 Drc hw编程模 型克服 了传统 的 V 方 法在视 频 处理上 的 不足 基 O i to eS
过滤 器 图表管理 器 ( ie G ahMa ae) 来 Fl r rp ngr 用 t 管理过滤 器和过滤 器 图表 。它 了解 所有 可利用 的过
2 2 实现步 骤 . 2 2 1 建 立 MF p Wi r [ x ] .. C A p z d ee 工程 a 新建 一个 基 于 对话 框 的应 用程 序 , 意要 勾选 注 A t t n选项 。在 对话 框 中添 加两 个 编辑 控 件 和 uo i mao 三个 按钮 控件 , 程序界 面如 图 3所示 。
之处。利 用 V C++实现 了一种基 于 DrcS o i thw技 术的视 频抓 帧方法 , e 结果 显示 , 帧质量 高 , 抓
速度快 。
关键词 : i c hw; 帧 ; O Dr t o 抓 eS C M;过滤 器
中图分 类号 : P3 14 T 9 . 1
文献标 识码 :A
过滤器 实现不 同 的功能 , 它们 大 致 可 以被归 为 源过
图 1 过 滤器 图表结构 图
收稿 日期 : 080 - 20 .42 . 4
作者简介 : 余婷(94一) 女, 18 , 湖北省武汉市人 , 研究生。
7 4
武
汉
工
业
学
院
学
报
20 0 8在
13 过滤 器图表 管理器 ( ie a hMaa e) . Fl rGrp n gr t
基于DirectShow的视频图像处理系统设计与实现

关键词
Dr thw 图像处理 视频 图像 i cSo e
T 9 17 N 1 .3
中图 分 类 号
De i n a m p e e a i fVi o I a e Pr c s i y t m a e n Die t sg nd I l m nt ton o de m g o e sng S s e b s d o r cSho w
研究 , 当前主要的研究 内容是视频图像的实时性处 理及 相关 的 图像 识 别 问题 。然 而 图像 识 别 及 图像 的其 它处理 算法 都 必 须 首 先 从视 频 序 列 中实 时 的
捕 捉 出需 要 的各帧 图像 , 然后 才 能对 图像进行 运 动 目标检测 、 征提取 、 式识 别等 操作 。 特 模
三种 基本 类 型 , 源过 滤 器 (oreFl r 、 换 过 滤 Suc ie)变 t
器 ( r s r ie) 渲 染 过 滤 器 ( e d r gFl T a f m Fl r 及 no t R n ei i n —
编程 接 口。它给 出 了 一种 全 新 的多 媒 体 数据 处 理 模型 , 并封装 了采 集 、 压缩 和解 压缩 等一 系列算 法 , 为视 频监控 、 频会议 等 多媒体 应 用 系统 的开 发提 视
洛 阳 4 10 ) ( 州 大 学 物 理 工 程 学 院 郑 州 7 03 郑 ’ 405 ) 50 2
( 口师 范学 院” 周 口 4 60 ) 周 60 0
摘
过程。
要
文章对 Dr thw技术作 了概括介绍 , i cSo e 并给 出了一种 通用 的视 频 图像处理 系统 的 Drc hw应 用软 件实 现 i to eS
D re hw就是 一种 基 于 C M 技 术 的 多媒 体 i to eS O
基于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的驱动,我们的软件对映美精相机的识别是如此的容易。
接下来我们将继续开发基于其它驱动的图像捕获软件,为最终实现在一个软件中识别各种相机而努力。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于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和visual studio 2005首先我们安装DirectShow SDK,它有许多版本,作者使用的是2003年发布的dx90bsdk.exe,安装在D盘的DXSDK下。
软件下载地址为/download/b/6/a/b6ab32f3-39e8-4096-9445-d38e6675de85/dx90bsdk.exe。
然后安装好visual studio 2005。
安装完以后我们将进行开发环境的配置。
二、开发环境配置开发环境的配置主要有两个工作要做:一是在使用Directshow SDK开发自己的程序时需要的DirectShow的有关静态库的配置,二是visual C++开发环境的配置。
1、生成DirectShow SDK开发库使用DirectShow SDK开发用户自己的程序需要几个静态链接库:quartz.lib、strmbasd.lib、STRMBASE.lib和strmiids.lib。
中间两个lib需要用户自己编译生成,而其他两个微软已经提供。
下表列出了使用DirectShow SDK开发程序所有要使用的库。
基于VC++2005开发软件使用DirectShow SDK,首先需要用户编译DirectShow自带的源代码工程baseclasses,以生成DirectShow SDK的不同版本的库。
同时由于DirectShow SDK是早期的VC开发软件,所以使用VC++2005编译DirectShow SDK会出现很多编译问题。
下面列出了详细的编译过程和问题分析、解决方法。
1.1 编译工程baseclasses工程启动VS2005,选择“文件”→“打开”→“项目/解决方案”命令,在弹出的对话框中打开“BaseClasses”项目。
打开“baseclasses.sln”项目。
如果VS2005有提问,则默认同意或确定。
现在就开始编译该项目。
按“F7”快捷键可以编译生成项目。
初次编译VS2005会报很多错误或者警告,有的需要我们手工修改程序,或者修改VS2005环境配置或编译选项;有的是一类问题,解决方法也有很多种。
具体解决方法请参考路锦正的《Visual C++音频/视频处理技术及工程实践》第225页-229页。
1.2 Visual C++开发环境配置有了DirectShow SDK库,用户就可以使用这些库来开发自己的程序了。
为了能让VC++自动搜寻到SDK库和头文件,还需要对VC++的开发环境进行配置。
添加库或路径的时候,根据你的要求添加Debug、Release、Debug_Unicode、Release_Unicode版本的库所在路径。
下面假定添加非Unicode版本的库或路径。
首先确定VC2005是否已经包含了库和头文件所在的路径,因为在安装VC2005时,它会自动添加该目录。
如果没有,则需要用户手工添加。
1.更改添加的include内容:D:\DXSDK\IncludeD:\DXSDK\Samples\C++\DirectShow\BaseClassesD:\DXSDK\Samples\C++\Common\Include添加过程如下。
选择“工具”→“选项”命令,在“项目和解决方案下”选择“VC++目录”,在下拉框中选择“包含文件”选项,将上面的三个Include 内容添加进去。
2.更改添加lib路径要添加的lib内容:D:\DXSDK\LibD:\DXSDK\ Samples\C++\DirectShow\BaseClasses\DebugD:\DXSDK\ Samples\C++\DirectShow\BaseClasses\Debug_UnicodeD:\DXSDK\ Samples\C++\DirectShow\BaseClasses\ReleaseD:\DXSDK\ Samples\C++\DirectShow\BaseClasses\Release_Unicode添加过程和Include内容相似,只是在下拉框中选择“库文件”选项。
3.添加链接库支持上面的设置是在VC2005的开发环境的目录(Directories)中,添加用户在开发中可能用到的库或头文件“路径”,需要明确的事文件夹,而不是具体的文件。
所以,要使用相关的库支持,还要用户明确地把要使用的库包含、添加到开发环境中。
基于DirectShow SDK开发流媒体应用程序,一般需要链接strmiids.lib和quartz.lib,前者定义了DirectShow标准的类标识符CLSID和接口标识IID,后者定义了导出函数AMGetErrorText(如果应用程序中没有使用这个函数,也可以不链接这个库)。
在编译生成DirectShow的BaseClasses库strmbasd.lib、STRMBASE.lib 时,由于该工程是生成库而不是应用程序,所以在编译该项目时VC++2005没有“链接器”选项。
但是在开发其他应用可执行程序时,需要添加DirectShow SDK 库的支持。
添加路径:项目→属性→配置属性→链接器→输入→附加依赖项,输入strmiids.lib quartz.lib,库名之间用空格分开。
另外,在程序中使用DirectShow SDK类或接口的代码程序中,还要添加#include<dshow.h>。
在添加链接库时,除了以上配置VC的开发环境外,也可以在源程序文件开头部分,直接语句编程引入#pragma comment(lib,”strmiids.lib”)。
如果程序中没有使用dshow.h,而是包含了stream.h,则库文件需要链接strmbased.lib、winmm.lib,在源程序文件开头添加:#pragma comment(lib,”strmbasd.lib”)#pragma comment(lib,”winmm.lib”)#include <streams.h>不过,编译器会报出以下的错误。
error C2146:语法错误为缺少“;”(在标识符“m_pString”的前面)。
问题定位在wxdebug.h(329)中。
经分析得知,由于某种原因,编译器认为PTCHAR没有定义,那用户可以在类外定义:typedef WCHAR *PTCHAR; 再编译项目。
三、开发过程DirectShow SDK的视频采集经典技术是使用ICaptureGraphBuilder2标准接口,利用其方法RenderStream自动建立、连接滤波器链表。
RenderStream方法在预览、捕获视频时引脚的类型分为PIN_CATEGORY_PREVIEW和PIN_CATEGORY_CAPTURE,媒体类型均为MEDIATYPE_Video。
此实例要完成的目的有两个:一是实时预览采集的视频数据;二是在预览图像的同时,实时地把捕获数据保存到文件中。
首先我们使用GraphEdit模拟实现该过程。
1、GraphEdit模拟实现步骤一、添加"Video Capture Sources"视频捕获设备,如图1所示。
图1、添加视频捕获设备步骤二、视频捕获滤波器只有一个Pin,而我们要求在预览数据的同时还能够保存数据,即需要一个组件把捕获的流分成两个。
DirectShow SDK为此提供了Smart Tee滤波器,把捕捉的视频流分成两个流供使用。
在GraphEdit中单击"DirectShow Filters"按钮,插入"Smart Tee"滤波器,如图2所示图2添加Smart Tee滤波器步骤三、采集捕捉的视频数据保存到文件,以AVI格式写文件。
插入"AVI Mux"滤波器,如图3所示。
图3添加AVI Mux滤波器步骤四、插入"File writer"滤波器,保存文件命名为"a.avi"。
如图4所示图4插入File writer步骤五、插入"SampleGrabber"和"Video Renderer"滤波器,如图5所示图5插入SampleGrabber和Video Renderer滤波器步骤六、最后把所有的滤波器用鼠标连接起来,完成构建滤波器链表,如图6所示图6视频预览、保存滤波器链表步骤七、运行滤波器链表,单击"Graph"→"Play"按钮执行视频数据的预览、保存。
1、视频捕获类CCaptureClass的实现详细讲述CCaptureClass类的成员变量和其他成员方法的实现,剖析其完成视频采集、保存的技术过程。