视频开发资料.docx
- 文档编号:11279076
- 上传时间:2023-02-26
- 格式:DOCX
- 页数:14
- 大小:25.88KB
视频开发资料.docx
《视频开发资料.docx》由会员分享,可在线阅读,更多相关《视频开发资料.docx(14页珍藏版)》请在冰豆网上搜索。
视频开发资料
笔者最近做视频监控系统的开发,走了不少弯路.不过费了九牛二虎之力,还算弄明白了一些问题,与朋友们分享一下,希望对朋友们有所帮助。
我们先简单讨论一下视频采集卡(下面简称:
采集卡)的功能。
采集卡实质上就是把连续的模拟视频信号转换为离散的数字视频信号的组芯片组。
为了让大家对采集卡有一个比较清晰的认识,我们来把采集卡简单分一下类:
1)按照通道来分:
常见的有单卡单路\4路\8路\16路\32路;一般卡都支持多卡组合,比如你需要16路,你可以买一张单卡16路的、也可以买4张4路的、2张8路的;
2)按照驱动来分类:
主流是支持WindowsDirectShowInterface由VFW和WDM驱动的采集卡;不过在大陆,由厂商自己开发的驱动程序来驱动的采集卡,也是比较常见的,这类采集卡自带的驱动程序一般不支持DirectShowInterface,有的甚至连驱动程序的Interface也不对外公布,一般只有配套他们自己的软件才能使用;不过也有专业卖卡的厂商,他们提供自己的二次开发SDK,如果要做二次开发,需要用他们提供的专用接口函数;
3)按照用途来分类,一般有用于数码编辑(DV制作、视频录制等)用的采集卡,这类卡的质量和性能要求都比较高,当然价格也较高;还有一类就是安防监控系统用的采集卡,这类卡又分为工厂用的用于监控仪器仪表用的采集卡和用于楼宇监控用的采集卡,前者要求精度比较高,性能和价格都要略高于后者;
现在市面上的视频采集卡总体看还是比较乱的,没有一个统一的硬性标准。
大家基本都有自己的从硬件到软件的一整套的系统,一般都是自己有自己的标准,接口互不公开,互不兼容。
总体来说,大陆产的视频采集卡几乎没有自己本身就配套VFW或WDM驱动的。
像天敏(10moons)、海康威视等都是提供自己的SDK,供二次开发用。
还有一些小厂产的采集卡,干脆就不支持二次开发,虽然网站上介绍说是支持二次开发。
这一点朋友们要注意了,买卡之前要问清楚了,笔者就从这个地方摔了个跟头,买了块卡,居然被告知,不支持二次开发,接口保密,是他们的技术秘密。
如果读者也买了这样的采集卡,也不要着急,先看一下卡的芯片是什么(我手上这块是philips7130芯片),然后到网上找一下有没有适用于这套芯片的公用驱动程序(我就是在那个传说中的128M的公用驱动程序包中找到的),这个驱动可能会是电视卡之类的驱动,不过别担心,它同样可以驱动采集卡;如果没有找到,就要考虑自己写驱动了(我在没找到公用驱动之前,曾有此意),主要保证驱动为WDM模型就行了,有专用的写驱动的工具(DDK)。
不过像比利时Euresys产的picolo系列、台湾ProVideo产的SecurityEyes系列均自带的有WDM驱动。
picolo主要是工厂用于监控仪器仪表,ProVideo主要用于安防监控。
基于VFW的视频应用程序开发
发表日期:
2004-10-25作者:
huaboy408[转贴]出处:
CSDN
当前,在Windows平台下开发视频应用程序一般采用两种方式:
一种是基于视频采集卡所附带的二次软件开发包SDK(Softwaredevelopmentkit)进行。
这种方式的优点是应用方便,容易上手,缺点是对硬件的依赖性较强,灵活性差,且功能参差不齐,不能充分满足各种视频应用程序的开发需要;
另一种方式是基于VFW(VideoforWindows)进行的。
VFW是Microsoft公司为开发Windows平台下的视频应用程序提供的软件工具包,提供了一系列应用程序编程接口(API),用户可以通过它们很方便地实现视频捕获[1]、视频编辑及视频播放等通用功能,还可利用回调函数开发更复杂的视频应用程序。
它的特点是播放视频时不需要专用的硬件设备,而且应用灵活,可以满足视频应用程序开发的需要。
Windows操作系统自身就携带了VFW,系统安装时,会自动安装VFW的相关组件。
VC++自4.0以来就支持VFW,大大简化了视频应用程序的开发。
目前,PC机上多媒体应用程序的视频部分,大都是利用VFWAPI开发的。
1VFW的体系结构
VFW以消息驱动方式对视频设备进行存取,可以很方便地控制设备数据流的工作过程。
目前,大多数的视频采集卡驱动程序都支持VFW接口,它主要包括多个动态连接库,通过这些组件间的协调合作,来完成视频的捕获、视频压缩及播放功能。
VFW体系结构如图1所示。
1)VICAP.DLL:
主要实现视频捕获功能,包含了用于视频捕获的函数,为音像交错AVI(Audiovideointerleaved)格式文件和视频、音频设备程序提供一个高级接口。
2)MSVIDEO.DLL:
能够将视频捕获窗口与获驱动设备连接起来,支持ICM视频编码服务。
3)MCIAVI.DRV:
包含MCI(Mediacontrolinterface)命令解释器,实现回放功能。
4)AVIFILE.DLL:
提供对AVI文件的读写操作等文件管理功能。
5)ICM(Installablecompressionmanager):
即压缩管理器,提供对存储在AVI文件中视频图像数据的压缩、解压缩服务。
6)ACM(AudioCompressionManager):
即音频压缩管理器,提供实时音频压缩及解压缩功能。
2视频捕获
视频数据的实时采集,主要通过AVICAP模块中的消息、宏函数、结构以及回调函数来完成。
视频捕获的一般过程如下:
2.1 建立捕获窗口
利用AVICAP组件函数capCreateCaptureWindow()建立视频捕获窗口,它是所有捕获工作及设置的基础,其主要功能包括:
①动态地同视频和音频输入器连接或断开;②设置视频捕获速率;③提供视频源、视频格式以及是否采用视频压缩的对话框;④设置视频采集的显示模式为Overlay或为Preview;⑤实时获取每一帧视频数据;⑥将一视频流和音频流捕获并保存到一个AVI文件中;⑦捕获某一帧数字视频数据,并将单帧图像以DIB格式保存;⑧指定捕获数据的文件名,并能将捕获的内容拷贝到另一文件。
2.2 登记回调函数[2]
登记回调函数用来实现用户的一些特殊需要。
在以一些实时监控系统或视频会议系统中,需要将数据流在写入磁盘以前就必须加以处理,达到实时功效。
应用程序可用捕获窗来登记回调函数,以便及时处理以下情况:
捕获窗状态改变、出错、使用视频或音频缓存、放弃控制权等,相应的回调函数分别为capStatusCallback(),capErrorCallback(),capVideoStreamCallback(),capWaveStreamCallback(),capYieldCallback()。
2.3 获取捕获窗口的缺省设置
通过宏capCaptureGetSetup(hWndCap,&m_Parms,sizeof(m_Parms))来完成。
2.4 设置捕获窗口的相关参数
通过宏capCaptureSetSetup(hWndCap,&m_Parms,sizeof(m_Parms))来完成。
2.5 连接捕获窗口与视频捕获卡
通过宏capDriveConnect(hWndCap,0)来完成。
2.6 获取采集设备的功能和状态
通过宏capDriverGetCaps(hWndCap,&m_CapDrvCap,sizeof(CAPDRIVERCAPS))来获取视频设备的能力,通过宏capGetStatus(hWndCap,&m_CapStatus,sizeof(m_CapStatus))来获取视频设备的状态。
2.7 设置捕获窗口显示模式
视频显示有Overlay(叠加)和Preview(预览)两种模式。
在叠加模式下,捕获视频数据布展系统资源,显示速度快,视频采集格式为YUV格式,可通过capOverlay(hWndCap,TRUE)来设置;预览模式下要占用系统资源,视频由系统调用GDI函数在捕获窗显示,显示速度慢,它支持RGB视频格式。
2.8 捕获图像到缓存或文件并作相应处理
若要对采集数据进行实时处理,则应利用回调机制,由capSetCallbackOnFrame(hWndCap,FrameCall-backProc)完成单帧视频采集;由capSetCallbackOnVideoStream(hWndCap,VideoCallbackProc)完成视频流采集。
如果要保存采集数据,则可调用capCaptureSequence(hWnd);要指定文件名,可调用capFileSetCap-ture(hwnd,Filename)。
2.9 终止视频捕获 断开与视频采集设备的连接
调用capCatureStop(hWndCap)停止采集,调用capDriverDisconnect(hWndCap),断开视频窗口与捕获驱动程序的连接。
3视频编辑和播放
利用VFW,不仅可以实现视频流的实时采集,还提供了编辑和播放功能,主要通过AVIFILE、ICM、ACM、MCIWnd等组件之间的协作来完成。
1)AVIFileInit();//初始化;
2)AVIFileOpen();//打开一个AVI文件并获文件的句柄;
3)AVIFileInfo();//获取文件的相关信息,如图像的Width和Height等;
4)AVIFileGetStream();//建立一个指向需要访问的数据流的指针;
5)AVIStreamInfo();//获取存储数据流信息的AVISTREAMINFO结构;
6)AVIStreamRead();//读取数据流中的原始数据,对AVI文件进行所需的编辑处理;
7)AVIStreamRelease();//释放指向视频流的指针;
8)AVIFileRelease();AVIFileExit();//释放AVI文件。
若数据是压缩过的,则用AVIStreamGetFrameOpen(),AVIStreamGetFrame()和AVIStreamGetFrameClose()来操作,可以完成对视频流的逐帧分解。
3.2视频播放
对于实现视频流的播放,VFW提供了MCIWnd窗口类[4],主要用于创建视频播放区,控制并修改MCI窗口当前加载媒体的属性。
一个由函数、消息和宏组成的库与MCIWnd相关联,通过它们可以进行AVI文件操作,很方便地使应用程序完成视频播放功能。
1)MCIWndCreate();//注册MCIWnd窗口类,创建MCIWnd窗口,并指定窗口风格;
2)AVIFileInit();//初始化;
3)AVIFileOpen();//打开AVI文件;
4)AVIFileGetStream();//获得视频流;
5)运用相关函数进行各种播放任务:
MCIWndPlay()正向播放AVI文件内容,MCIWndPlayReverse()反向播放,MCIWndResume()恢复播放,MCIWndPlayPause()暂停播放,MCIWndStop()停止播放等等。
6)AVIStreamRelease();//释放视频流;
7)AVIFileRease();AVIFileExit();//断开与AVI文件的连接,释放视频源。
由以上步骤可以看出,视频播放是视频编辑其中的一种操作。
4结束语
随着社会的发展,人们对多媒体技术的需求也越来越高,已经不满足单一的通信功能,要求影像与声音的同步服务,如可视电话、视频会议、各种实时监控系统、报警系统等,而数字视频技术则是多媒体技术的核心之一。
微软推出的数字视频处理软件开发包VideoforWindows,将开发者从硬件的底层束缚中解放出来,大大简化了数字视频捕获这一原本很复杂的工作,利用它可以很方便的将模拟视频信号数字化,并支持进一步处理和播放,为开发实时视频应用程序开辟了道路。
参考文献:
[1]周长发.VC++多媒体编程技术与实例[M].北京:
电子工业出版社,1999.
[2]张星明.视频图像捕获及运动检测技术的实现[J].计算机工程,2002,28(8):
130-132.
[3]肖永隆,王理.利用VFW库函数快速分解AVI数据流[J].信息工程大学学报,2001,2(3):
39-42.
[4]喻其炳.多媒体信息处理在Windows中的应用[J].重庆工商大学学报,2003,20
(1):
64-66.
WDM 视频捕获介绍
-孙 涛-
摘要:
该文主要提供一些在Win98,win2K及以上操作系统中,进行WindowsDriverModel(WDM)视频捕获的相关知识介绍。
如果你对WDM视频捕获感兴趣,可以来看看这些东西。
欢迎到我的博客
目 录
Windos下视频捕获简史
WDM和视频捕获
VfWWDMMapper
WDM 视频捕获结构
DirectShow应用程序
DirectShowFilterGraph
WDM数据流
视频捕获 Minidrivers
Pins,Streams,Formats
视频流命名约定
DirectShow 视频捕获的接口和属性
捕获数据流类型
流输出数据格式
结束语
Windos下视频捕获简史
VFW(VideoForWindows)1.0版本在1992年11月发布,它是为在Windows3.1下将电影最优化地捕获到磁盘上而发布的。
从那以后,视频捕获技术就越来越受到关注了。
VFW技术同样受到了很多批评,它捕获的数据保存到磁盘上会占用大量磁盘空间,每秒数据量超过20M,同时需要大量的客户端支撑软件,VFW体系架构上的不足在视频会议应用上和PC/TV应用上被暴露无遗,这样就要求一种新的视频捕获技术来弥补这些不足。
VFW的体系结构缺乏为视频会议,电视浏览,视频区域捕获和VBI(VerticalBlankingInterval)数据流提供强而有效的支持。
一些视频卡等设备开发商在设计自己的产品时,针对这些缺陷,对VFW进行了功能扩展。
由于没有统一的标准,我们的应用程序在使用这些扩充的功能时,就必须要写一些基于特定硬件的代码。
这就意味着当要改变捕获驱动程序时,就必须要对显卡的驱动程序进行修改。
WDM和视频捕获
WDM 视频捕获设计就是为了来解决VFW体系结构中存在的这些问题。
WDM视频捕获主要的好处体现在:
● 可以为设备(如基于USB,IEEE1394通讯方式的摄像头 )提供32位的驱动程序。
● 允许DirectShow 和 WDM 流协同工作。
● 可以在视频捕获设备和DVD/MPEG设备间,为硬件(如videoports 和 chipsets)共享一个分类的驱动程序结构(Stream.sys)。
● 支持多个数据流。
● 允许电视信号调频和输入选择。
● 支持视频区域捕获,区域显示和VBI。
● 允许使用DirectDraw®VPE (VideoPortExtensions)管理视频输入。
在一个单独设备上可能会有多个组件共存的情况,这些组件包括DVD解码器,MPEG解码器,视频解码器,调谐器,音频解码器。
WDM数据流就是用于解决这种情况而创建的。
它是个统一的驱动模型,可以支持所有的这些设备和去处理它们的资源分配。
WDM数据流为标准数据类型和用户自定义数据类型提供了统一的数据模型,同样,它定义了大部分的标准设备的属性,并且根据需要可以很容易地实现扩充。
因为按WDM数据流的协议,它支持在设备内核间进行数据传输,而不需要在用户模式下进行数据转换。
这样可以获得较高的效率,减少不必要的工作。
操作系统仍然支持VfW驱动程序,但是依赖于VFW的开发将逐渐减少,这是因为下面三个原因:
● WDM数据流为基于电视浏览和视频会议的捕获设备提供了优化支持。
● DirectShow提供了更强的功能。
● Microsoft 将不会对VFW进行持续开发。
VfWWDMMapper
VfWWDMmapper是Windows98 和 Windows2000 操作系统的一部分。
它提供了WDM 驱动程序到基于VfW程序的向后兼容。
对于Windows98, 有一个驱动程序文件和一个动态链接库Vfwwdm.drv和 Vfwwdm32.dll。
Windows2000只要求一个DLL文件。
典型的 mapper应用于显示视频捕获设备对话框、视频源选择对话框、摄像头控制面板和视频格式设置。
VfWWDMmapper 不是全面兼容并且不支持旧VFW的所有功能。
例如不支持视频覆盖,也不支持视频端口implementations 。
WDM 视频捕获结构
WDM 视频捕获结构图如下:
DirectShow应用程序
DirectShow 用于控制多媒体数据流;它可以在运行时允许用户播放数字电影和对不同格式的声音进行解码,包括MPEG-1。
这种播放性能可以让音视频卡支持MicrosoftDirectX®的API,DirectShow 同样可以播放AVI电影文件和AppleQuickTime(.mov)格式文件。
DirectShow 被广泛地应用于Windows95,Windows98, 和Windows2000应用程序。
DirectShow 直接和驱动程序通讯,DirectShow 不使用AVICap, 因为AVICap分配了数据缓冲区,如果一个DirectShow层没有放在AVICap 顶层,那么缓存区数据必须要通过转化去指向它,这样会造成效率地下。
DirectShowFilterGraph
DirectShow结构定义了标准的组件去控制处理带时间标记(time-stamped)的多媒体数据流,这些组件被称为过滤器(Filter)。
把这些Filter放在一个容器中,这个容器就是FilterGraph。
可能有三种类型的Filter:
Source ,transform 和render。
(注:
有些资料将Filter翻译为过滤器,FilterGraph翻译为过滤器图表,这里我都用原单词)
应用程序可以通过FilterGraph管理器来进行数据访问。
FilterGraph 管理器会对FilterGraph配置进行管理,同时还会通过FilterGraph控制数据的转移。
FilterGraph 管理器提供了一套COM接口,去允许应用程序与FilterGraph实现通讯。
应用程序可以直接调用FilterGraph管理器接口去控制媒体流或者去获得Filter事件。
还可以使用DirectShowActiveX的OCX控件进行程序设计。
,还有一套MCI子集命令可以用来向后兼容MicrosoftVFW1.x版本和遵循OM-1MPEGMCI 规范。
WDM数据流
WDM数据流主要应用包括视频捕获,电视浏览,VBI数据编码支持和DVD电影播放。
DirectShow可以非常容易地使用这些数据。
视频捕获 Minidrivers
视频卡由一些组件构成,比如电视信号调谐器,AM/FM调谐器,视频解码器,音频解码器等,它们都由WDMMinidriver控制。
使用Minidrivers ,就可以允许硬件开发商为不同的卡开发器驱动程序,他们只需要把Minidriver写到他们的卡上,当硬件设计修改后,不需要对修改驱动做更多的修改。
在Windows98 和Windows2000下,视频设备使用WDM 的Minidriver去控制视频数据流,视频捕获Minidrivers 相当与一个客户端,它会去控制处理硬件设备的图像数据和其他相关数据。
Minidrivers提供了如下的功能:
∙捕获压缩和非压缩的视频数据流,VBI数据,时间编码和其他辅助数据流。
∙控制视频流相关设备,比如电视信号调谐器,视频路由设备,电视音频控制器和视频压缩编码器。
∙在流内核中完成处理工作,减少操作过程提高效率。
Pins,Streams,Formats
数据流视频捕获驱动程序可以同时支持多个压缩数据,非压缩数据,时间编码, VBI解码数据以及自定义数据。
为了保证每种数据同步匹配,捕获驱动程序为这些数据创建了一个新的数据流。
每个流都会用一个WDM流针脚(Pin)来传递,通过针脚,单个数据流就可以把它的数据连接到不同的流Filter中去,还可以通过DirectShow 用户Filter的输出针脚,把数据转换输出给用户。
(前面我们提到Filter的3种类型:
Source ,transform 和render。
Source只有输出针脚,而transform有输入、输出2个针脚,render只有输入针脚)
每个针脚都可以支持多种不同的数据格式。
比如,一个针脚它可以提供RGB16,RGB24,YVU9,和 JPEG 数字视频。
针脚可以连接到一个共享的系统内存的数据缓存区,它还可以直接连接到硬件设备。
视频流命名约定
通常,DirectShow 和 WDM 流会共享媒体的格式定义和流命名约定。
但是基于内核模式(Kernel-mode)和用户模式(User-mode)下的命名约定有一些小的命名差异。
比如,内核模式下的很多格式定义和GUID定义会在名称前加个”KS”前缀,BITMAPINFOHEADER就是用户模式下的定义,而KS_BITMAPINFOHEADER就是内核模式下的相同结构的定义。
在内核模式下,流格式使用KSDATAFORMAT数据结构。
这个结构可以被扩展去包含其它特别的数据格式信息。
typedefunion{
struct{
ULONG FormatSize;
ULONG Flags;
ULONG SampleSize;
ULONG Reserved;
GUID MajorFormat;
GUID SubFormat;
GUID Specifier;
};
ULONGLONG Alignment;
}KSDATAFORMAT,*PKSDATAFORMAT,KSDATARANGE,*PKSDATARANGE;
DirectShow 视频捕获的接口和属性
DirectShow 提供了与许多视频相关的接口,它们中的一些还有附带相关的属性。
下面列出的这些接口是实际应用较多,并不带相关属性的:
∙ IAMAudioInputMixer
∙ IAMDroppedFrames
∙ IAMStreamConfig
∙ IAMVfwCaptureDialogs
∙ IAMVfwCompressDialogs
∙ IcaptureGraphBuilder
∙ ICreateDevEnum
下表列出了DirectShow 接口与捕获驱动程序通讯的相关属性。
.
DirectShow 接口
相关属性
IAMTuner
PROPSETID_VIDCAP_TUNER
IAMTVAudio
PROPSETID_VIDCAP_TVAUDIO
IAMCrossbar
PROPSETID_VID
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 视频 开发 资料