最新DirectShow视频采集开发指南
- 格式:pdf
- 大小:851.32 KB
- 文档页数:41
第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开发视频解码插件
李晓静;刘爱玉;李舜昌;邵兰英
【期刊名称】《现代制造技术与装备》
【年(卷),期】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是微软公司提供的一套在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是微软公司提供的一套在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的多摄像头视频采集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连接相机时的插件使用,通过本套插件可连接海康的工业相机。
一、环境配置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版本。
音视频采集主要内容:●Directshow的概述和系统组成●Directshow中的音视频同步机制●Directshow应用程序开发流程●Directshow实现音视频的采集程序●Fliter的开发(RTP实时传输和H.264编解码)整个系统的设计:一、Directshow概述和系统组成1.DirectShow介绍DirectShow是一个windows平台上的流媒体框架,提供了高质量的多媒体流采集和回放功能。
它支持多种多样的媒体文件格式,包括ASF、MPEG、AVI、MP3和WAV文件,同时支持使用WDM驱动或早期的VFW驱动来进行多媒体流的采集。
DirectShow整合了其它的DirectX技术,能自动地侦测并使用可利用的音视频硬件加速,也能支持没有硬件加速的系统。
DirectShow是建立在组件对象模型(COM)上的,因此编写DirectShow应用时,必须具备COM客户端程序编写的知识。
对于大部分的应用,需要实现自己的COM对象,DirectShow提供了大部分你需要的DirectShow组件,但是假如需要编写自己的DirectShow组件(RTP传输Fliter以及H.264编解码Fliter),还需要具备编写COM组件的知识。
2.DirectShow系统组成如图所示,最大一块就是DirectShow系统,虚线以下是Ring 0(内核模式)特权级别的硬件设备,虚线以上是Ring 3(用户模式)特权级别的应用层。
Dshow系统位于应用层中。
它使用一种叫做Fliter Graph的模型来管理整个数据流的处理过程;参与数据处理的各个功能模块叫做Fliter,一组Fliter按一定的顺序连接成一条“流水线”协同工作,就组成一个Fliter Graph。
3.Fliter Graph和Fliter每个Fliter与一个或多个其它的Fliter相连,其中的连接点也是一个COM对象,称作Pin,Fliter使用Pin将数据从一个Fliter转移到另一个,图中的箭头指示了数据流动的方向。
基于DirectShow技术实现视频采集
郭昊
【期刊名称】《火控雷达技术》
【年(卷),期】2008(037)002
【摘要】介绍DirectShow技术的基本概念,提出了基于DirectShow技术采集视频数据的软件设计方案,文中详细叙述了软件开发的实现框架.
【总页数】4页(P97-100)
【作者】郭昊
【作者单位】西安电子工程研究所,西安,710100
【正文语种】中文
【中图分类】TP274+.2
【相关文献】
1.基于DirectShow RTMP协议的视频采集传输系统的设计与实现 [J], 孙盼;康维新
2.基于DirectShow的视频采集的实现 [J], 邵敏敏;胡碧金;赵琳
3.基于DirectShow技术的视频采集方案的实现 [J], 虢莉敏;陈宁;刘宏刚;张向东
4.基于DirectShow的视频采集系统的设计与实现 [J], 魏立诚;朱桂林
5.基于DirectShow的视频采集与压缩存储的实现 [J], 张明杰
因版权原因,仅展示原文概要,查看原文内容请购买。
图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流媒体数据的采集及图片的捕获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中就可以参与工作了。
C#实现DirectShow技术开发准备时间:2009-10-21 23:45 点击:73次字体:[大中小]DirectShow组件在“C:WINDOWSsystem32”目录下的Quartz.dll动态库中,要使C#代码引用COM对象和接口,必须将COM类型库转换为.NET框架元数据,从而有效地创建一个可以从任何托管语言调用的托管包装。
在转换过程中需要使用FrameWork SDK自带的TlbImp命令工具,该命令工具在“D:Program FilesMicrosoft Visual Studio 8SDKv2.0BinTlbImp.exe”目录下(取决于Visual Studio 2005的安装路径)。
该命令的使用方法为:TlbImp C:WINDOWSsystem32quartz.dll out:C:WINDOWSsystem32quartzDriectShow.dll在DOS命令下执行转换成功。
转换完成后需在应用程序引用quartzDriectShow,引用quartzDriectShow.dll组件步骤如下:(1)在Visual Studio 2005开发环境中,选择菜单“项目”/“添加引用”命令,弹出“添加引用”对话框。
(2)选择“浏览”选项卡,通过浏览找到引用quartzDriectShow.dll所在的位置,并引用到程序中来。
(3)最后引入using quartzDriectShow,在程序中可以开发相关多媒体程序了。
开发人员还可以通过编写自己的过滤器扩展DirectShow多媒体支持。
下面是DirectShow组件的接口。
l IFilterGraph:过滤通道接口。
l IFilterGraph2:增强的IfilterGraph。
l IGraphBuilder:最为重用的COM接口,用于手动或者自动构造过滤通道Filter Graph Manager。
l IMediaControl:用来控制流媒体(如流的启动和停止暂停等)播放控制接口。
windows视频捕获DirectShow/DirectSound API 高清PCI-E视频采集卡T620E根据使用的驱动程序的不同来分类,目前市场上大致有两种视频采集卡:VFW (Video for Windows)视频卡和WDM (Windows Driver Model)视频卡。
在windows 里面实现视频捕获,微软提供了两个SDK库,一个是avicap,一个是directshow。
Video for Windows简介VFW是Microsoft 1992年推出的关于数字视频的一个软件包,它能使应用程序数字化并播放从传统模拟视频源得到的视频剪辑。
VFW的一个关键思想是播放时不需要专用硬件,为了解决数字视频数据量大的问题,需要对数据进行压缩。
它引进了一种叫A VI的文件标准,该标准未规定如何对视频进行捕获、压缩及播放,仅规定视频和音频该如何存储在硬盘上,在A VI文件中交替存储视频帧和与之相匹配的音频数据。
VFW给程序员提供.VBX和A VICap窗口类的高级编程工具,使程序员能通过发送消息或设置属性来捕获、播放和编辑视频剪辑。
现在用户不必专门安装VFW了,Windows95本身包括了Video for Windows1.1,当用户在安装Windows时,安装程序会自动地安装配置视频所需的组件,如设备驱动程序、视频压缩程序等。
VFW六个组成模块:(1)A VICAP.DLL:包含了执行视频捕获的函数,它给A VI文件I/O和视频、音频设备驱动程序提供一个高级接口;(2)MSVIDEO.DLL:用一套特殊的DrawDib函数来处理屏幕上的视频操作;(3)MCIA VI.DRV:此驱动程序包括对VFW的MCI命令的解释器;(4)A VIFILE.DLL:支持由标准多媒体I/O(mmio)函数提供的更高的命令来访问.A VI文件;(5)压缩管理器(ICM):管理用于视频压缩-解压缩的编解码器(CODEC);(6)音频压缩管理器ACM:提供与ICM相似的服务,不同的是它适于波形音频。