基于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的驱动,我们的软件对映美精相机的识别是如此的容易。
接下来我们将继续开发基于其它驱动的图像捕获软件,为最终实现在一个软件中识别各种相机而努力。
基于DirectShow的视频采集和传播系统
基于DirectShow的数字视频采集与传输系统内容摘要:本文简单介绍了DirectShow技术,研究了利用DirectShow实现视频采集、压缩和网络传输技术。
并利用第三方提供的编解码器实现了MPEG-4视频数据的网络传输系统,在该系统中利用RTP 协议进行视频数据传输,同时实现了远端帧率的控制。
1 引言近年来,随着国民经济的发展,社会各个部门对于视频监视系统的需求越来越多。
但目前的很多监视系统都跟具体的硬件相关,必须要具体的采集卡的支持才能实现。
所以有必要开发一种具有通用性的视频监视系统,用普通的摄像头就能实现视频的采集。
基于DirectShow的开发能很灵活地控制音视频的效果,所以选择DirectShow这种可扩展性好的技术做开发对以后的应用升级很有帮助。
此外,为了实现流媒体传输控制的策略,流媒体的传输和回放也是应解决的问题之一。
由Microsoft提供的DirectShow技术基于组件对象模型技术,支持宽松的格式变化,提供高品质的多媒体流回放。
利用它可以在普通微机中实现流媒体的客户端处理,并可以提高系统的通用性和可扩展性。
对于视频数据的传输,压缩率是一个必须考虑到的因素。
MPEG-4是由ISO和IEC的MPEG组制定的一个关于活动图像和声音的编码国际标准。
它在基于内容的交互性、压缩率、通用访问能力等方面提供了一系列新的或改进的功能。
MPEG-4视频在提供较好的图像质量的同时拥有较高的压缩率,适合于作为传输的图像压缩标准。
2相关技术2.1 DirectShow技术简介DirectShow是Microsoft为开发高性能多媒体应用而开发的底层应用程序接口(API),它是DirectX家族的核心成员之一。
DirectShow自身是通过一种系统内置的或程序员开发的过滤器(Filter)来控制和处理多媒体数据的体系结构。
该体系结构定义了如何处理和控制过滤器内部及相互之间的多媒体数据流。
每个过滤器都有输入或输出针(Pin), 或两者都有。
基于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的驱动,我们的软件对映美精相机的识别是如此的容易。
接下来我们将继续开发基于其它驱动的图像捕获软件,为最终实现在一个软件中识别各种相机而努力。
利用C ++ Builder实现基于DirectShow的视频捕获
b s d o f甜 o rs ne .T e s p c pu ig ra —t i e a e n D r c h w n a e n Di e w i p ee td h t so a tr l i vd b s do i t o wig C s e f n e me o eS
( a .o ltn o t fEer i co c西 魄
,N n m gH nK n n e i , ad n 30 6 ) ad n ag ogU irt N n m g 303 v sy
Ke r s vd o pa n a t r  ̄ i cS o C M; y wo d : ie lya d e pue D r th w; O C’’ B i e e udr l
Vie ly ra d c p u ห้องสมุดไป่ตู้b sd o r c h w t d o pa e n a t r a e n Die tS o wi C h
DE NG i bn,XI Hu — i ONG n Ba g— s u,z NG ig h HA yn
Bul e i r d
b esm l. y p h t a e
随着计算机网络的普及和多媒体技术的发展 , 多媒体应用如视频会议、 远程教育、 远程医疗、 视频网络监 控等迅速兴起。视频播放和捕获成为多媒体应用 中的关键环节和重要前提。就软件实现而言, 目前要实现 计算机 视频捕 获有 3 可选方 案 J() 种 :1用厂家 提供 的和硬件 相应 的 S K来进 行二 次开 发 , D 但是 用这 种方 式 开发程序和硬件相关 , 当替换硬件时, 要改动相应 的程序 , 限性很大。() 局 2 使用 Ⅵ ( i o o Wi os中 Vd r n w ) e f d
基于Directshow的VMR视频捕获的实现
时 , 捉 图像 帧 , 捕 然后 从 颜 色空 间 RG 转换 到 Y 4 0 12 , B UV 2 /4 0 供视 频 图像 处 理 算 法作 直接 处 理 。 如 : 码 、 别 等 。 比 编 识
关键词 : VMR ; rcso 视 频 捕 获 Di t w; e h
中 图分 类 号 : P 1 T 31
文 献标 识 码 : A
文 章编 号 :0 9 3 4 (0 0 2 — 1 0 0 1 0 — 0 42 1 )5 7 1 — 2
TheR e lz ton h de ai a i oft e Vi o Capt e Ba e lD ie tho ' ur s d Oi r cs w s VM R ZEN G ua h n. H —s a So N G u Y
I SSN 1 0 — 0 4 09 34
E ma l e u @C C .e . — i d f C Cn t a : c
h t : w w.n s e.a t / w dz. t p/ n c T l 8 — 5 - 6 0 6 5 9 94 e: 6 5 1 5 9 9 3 + 6O 6
Ke r s VM R ; i cs o v d o cp u e y wo d : dr t w; ie a t r e h
随 着 多媒 体 技 术 的 不断 发 展 , 于 视 频 技 术 的项 目已广 泛 应 用 于 数 字 监 控 、 视 电话 等 领 域 , 些 领 域 最 首 要 的 问题 是 实 时 图 基 可 这 像 捕 获 , 得 良好 的 视 频 图 像 以 供 数字 图像 处 理 , 典 的 D r t o ie n e 视频 捕 获 技 术 存 在 诸 多 局 限 性 , 对 这 一 现 象 , 获 经 i es w v or dr e h d e 针 本 文 提 出 了一 个 基 于 Dre hw 的 V i to es MR技 术 的 视频 捕 获 方 案 , 获 图 像 帧 , 换 颜 色空 间 , 视 频 图 像处 理算 法 处 理 。 捕 转 供
基于DirectShow的P2P网络视频采集传输与播放系统
软件技术课程设计实验报告基于 DirectShow 的 P2P 网络视频采集、传输与播放系统)一. 概述DirectShow 是一个windows 平台上的流媒体框架,提供了高质量的多媒体流采集和回放功能。
它支持多种多样的媒体文件格式,包括ASF、MPEG、AVI、MP3 和WAV 文件。
同时DirectShow 支持使用WDM 驱动或早期的VFW 驱动来进行多媒体流的采集。
DirectShow 整合了其它的DirectX 技术,能自动地侦测并使用可利用的音视频硬件加速,也能支持没有硬件加速的系统。
DirectShow 大大简化了媒体回放、格式转换和采集工作。
但与此同时,它也为用户自定义的解决方案提供了底层流控制框架,从而使用户可以自行创建支持新的文件格式或其它用途的DirectShow 组件。
DirectShow 的主要功能是提供对多媒体流的捉捕与回放。
这种多媒体流既可以来自本地磁盘文件,也可以来自网络上的远程服务器。
也就是说,它提供了一种“在线播放”的功能,在远程数据尚未完全传输到本地机器上的同时,本地应用程序可不必等待数据完全传输完毕再进行播放,可以一边传输,一边播放。
这就为网络化的视频采集数据的实时解码显示提供一个方便的开发平台。
点对点技术(peer-to-peer ,简称P2P)又称对等互联网络技术,是一种网络新技术,依赖网络中参与者的计算能力和带宽,而不是把依赖都聚集在较少的几台服务器上。
P2P 网络通常用于通过连接来连接节点。
这类网络可以用于多种用途,各种文件共享软件已经得到了广泛的使用。
P2P 技术也被使用在类似VoIP 等实时媒体业务的数据通信中。
二. 需求分析2.1 开发要求1. 熟悉、掌握vs2010 开发工具,以及DirectShow SDK9.0 软件开发包。
2. 熟悉了解Socket 网络编程;3. 开发基于DirectShow 的应用软件,要求能够完成P2P 的网络视频采集、视频传输、视频播放的功能。
最新DirectShow视频采集开发指南
卡,为 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;
基于DirectShow的DV视频实时采集系统的实现
基于DirectShow的DV视频实时采集系统的实现作者:薛勇来源:《电脑知识与技术》2009年第24期摘要:随着计算机技术和视频编码技术的发展,现在DV摄像机已越来越多地进入了大众生活,特别是在教育教学中得到了广泛的应用,迫切需要把DV摄像机中的DV数据采集到计算机中进行浏览和处理,为此,笔者在Visual C++ 6.0环境下,运用DirectShow编程技术,编写了一个DV视频实时采集系统,可以实现DV视频的回放和数据的采集,具有良好的实时性、可扩展性。
关键词:DV;DirectShow;AVI中图分类号:TP37文献标识码:A文章编号:1009-3044(2009)24-6768-03Realization of Real-time Digital Video Collecting System Based on DirectShowXUE Yong(Information and Technology Education Center, Jiangsu Teachers University of Technology, Changzhou 213001, China)Abstract: With the development of computer technology and video encoding technology, DV vidicons have been more and more popular in people's daily lives; therefore, it is urgent that the DV data be transferred from DV vidicons to the computer to be browed and processed. For this reason, a real-time DV video collecting system is to be built with DirectShow under Visual C++ 6.0, whose purpose is to realize DV playback and data collecting. The system has a good characteristic of being real time and extendable.Key words: DV; DirectShow; AVI1 DV技术综述DV(Digital Video)是一种专门用来在专用盒式录像带上记录和播放数字视频的压缩格式标准,它是由日本索尼,松下十多个国际性大公司于1996年联合推出,并由国际电信联盟(ITU)批准使用。
基于DirectShow的多路视频采集系统
图1 DirectShow架构DirectShow系统使用一种叫做过滤器图表(FilterGraph)的结构模型,对整个多媒体数据流的处理过程进行统一管理,参与数据处理的功能模块叫做过滤器(Filter),每个Filter通过引脚(Pin)在Filter Graph中按照一定的顺序连接成一条“流水线”协同工作[3]。
依照功能来划分,Filter可以划分为三类:Source Filters、陶崇峻(1974-),男,辽宁丹东人,本科,网络工程师。
研究方向:信息安全、银行卡技术与风险。
图2 多路视频采集系统演示效果图3 系统结构TCHAR szCaptureFile[_MAX_PATH]; //捕获到文件的存储路径WORD wCapFileSize; //捕捉文件的大小IVideoWindow *pVW; //视频显示的指针,利用该指针将视频显示在界面上double FrameRate; //用户设定的帧速率,即每秒帧数int iNumVCapDevices; //现有视频捕捉设备数量BOOL fPreviewGraphBuilt; //是否已建立了预filter graph的布尔变量首先,需要在GraphEdit中添加视频捕捉器件,系统将捕捉器件的Filter添加到可视化界面中的方法是:h r=g c a p.p F g->A d d F i l t e r(g c a p.p V C a p,g c a p. wachFriendlyName);为了显示视频图像,需要一个视频预览的Filter,这样就添加了一个视频渲染器(Video Renderer)的Filter。
从图4中可以看出,每个Filter的框架上都内嵌了小矩形方块,这些小矩形方块就代表每个Filter的Pin,位于左边的是输入Pin,位于右边的是输出Pin。
若要让整个Filter链路运行起来,首先要把上游Filter的输出Pin与下游Filter的输入Pin连接起来,在连接的过程中,需要协商能够共同使用的多媒体格式,若没有相同的多媒体格式可用,连接将会出错[10]。
DirectShow编程实现摄像头视频捕捉
第三步、配置Sample Grabber以捕获数据。
视频捕捉类CCaptureVideo的具体实现
// CCaptureVideo视频捕捉类头文件/////////////////////////////////////////////////////////////////////#if !defined(AFX_CAPTUREVIDEO_H__F5345AA4_A39F_4B07_B843_3D87C4287AA0__INCLUDED_)#define AFX_CAPTUREVIDEO_H__F5345AA4_A39F_4B07_B843_3D87C4287AA0__INCLUDED_/////////////////////////////////////////////////////////////////////// CaptureVideo.h : header file/////////////////////////////////////////////////////////////////////#if _MSC_VER > 1000#pragma once#endif // _MSC_VER > 1000#include <atlbase.h>#include <windows.h>#include <dshow.h>#ifndef SAFE_RELEASE#define SAFE_RELEASE( x ) /if ( NULL != x ) /{ /x->Release( )
DirectShow流媒体数据的采集及图片的捕获
DirectShow流媒体数据的采集及图片的捕获DirectShow流媒体数据的采集及图片的捕获建议你用DirectShow它可以帮你从视频采集设备中取得数据,并通过Sample Grabber过滤器进行抓图DirectShow流媒体数据的采集及图片的捕获用DirectShow来使用摄像头,一般要求摄像头的驱动是WDM 格式的,当然,一些比较老的驱动格式DirectShow也可支持。
在DirectShow中,有一个Sample Grabber过滤器,它是一个可以被插入流的过滤器,它有自己的缓冲,存放采样。
我们就可以用它来从一个视频文件中简单的扑获一桢。
DirectShow通过图形过滤管理器(Filter Graph Manager)来与上层应用程序和下层的驱动进行联系。
DirectShow通过捕获过滤器(Capture Filter)来支持对摄像头的捕获,一个捕获过滤器有多个插口(pin),其中的预览(preview)插口可用来进行显示祯图象。
1、创建图形过滤管理器Filter Graph如上面原理所述,首先要创建Filter Graph:CComPtr< IGraphBuilder > m_pGraph;hr=m_pGraph.CoCreateInstance( CLSID_FilterGraph );2、连接设备还要创建系统枚举器组件对象:CComPtr<ICreateDevEnum>pCreateDevEnum;pCreateDevEnum.CoCreateInstance( CLSID_ SystemDeviceEnum );然后使用接口方法CreateClassEnumerator ()为指定的Filter注册类型目录创建一个枚举器,并获得IenumMoniker接口:CComPtr< IEnumMoniker > pEm;pCreateDevEnum->CreateClassEnumerator(CLSID_VideoInputDeviceCategory, &p Em, 0 );接着在调用BindT oObject()以后,可以将设备标识生成一个DirectShow Filter,将其加到Filter Graph中就可以参与工作了。
DirectShow在视频捕获中的应用
#T 6 7 / # $ ’ / 5 < , % 8 % / 9‘ 5 , 7 < 9 0 1 % Y5 8. , < 1 5 9 7 < 9 + , 7/ % ,8 9 , 7 . M 5 7 2 5 .% -b 5 2 % Y 8Z & . 9 / % , M’ c 9 3M M . K 7 8 9 1 7 9 . 8 K% / < , 7 . 9 5 9 , 7 . M 5 7 2 5 . . & 5 < . 9 5 % 8M % , 7 7 / / 5 < 5 7 9 X 5 8 % & . 9 5 & 5 < . 9 5 % 8 / , % M 38 3M Z Z : 3. Z Z $ $ . , 2 Y . , 72 5 / / 7 , 7 < 7 8. 28 < 1 , % 5 e . 9 5 % ’ c 9 5 8 5 9 , % 2 + < 7 25 9 1 7 < % M & 7 V 5 9 5 7 8% /2 . 9 .9 , . 8 % , 9 8 1 : Z Z . 8Y 7 & & . 88 % M 7% 9 1 7 , 9 1 5 8 . , 9 5 < & 71 % Y9 %< . 9 + , 76 5 2 7 %2 . 9 . / , % M.4 0 O< . M 7 , .Y 5 9 1‘ 5 , 7 < 9 0 1 % Y$ Z $ $ 9 7 < 1 5 + 7 8 5 < & + 2 5 , 7 6 5 7 Y$ 6 5 2 7 % < % M , 7 8 8 5 % . 2Y , 5 9 5 5 2 7 %2 . 9 . 5 9 % / 5 & 7 ’ 0 % M 7 5 M % , 9 . 9 [ 3Z Z 36 Z < % 2 7 / , . M 7 9 9 % 5 M & 7 M 7 9 9 1 7 8 7 9 . 8 K 8 5 -T 5 < , % 8 % / 9$ 5 8 + . &Djj’ ( 7 9 5 8 . & 8 %Z , % 6 5 2 7 2 ’ 3 Z #$ % 8 " ) # 4 7 5 2 7 %D . 9 + , 7 ‘ 5 , 7 < 9 0 1 % Y% D GT Z 1+ 9 7 , 7 9的 普 及 和 多 媒 体 技 术 的 发 展 $ !! 随着c 基于 c 如在线直播 & 视频 会 9 7 , 7 9的多媒体应用 $ 议& 远程教育 & 远程医疗 & 网络电话 & 网络监控等如 雨后春笋般涌出 ’ 在这些应用中 $ 视频捕获是一项 重要的基础工作 ’ 就软件实现来说 $ 目前要实现计
- 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类的成员变量和其他成员方法的实现,剖析其完成视频采集、保存的技术过程。