毕业设计(论文)-基于VFW的监控系统软件设计.doc

上传人:哈尼dd 文档编号:3283554 上传时间:2019-08-08 格式:DOC 页数:59 大小:575.52KB
返回 下载 相关 举报
毕业设计(论文)-基于VFW的监控系统软件设计.doc_第1页
第1页 / 共59页
毕业设计(论文)-基于VFW的监控系统软件设计.doc_第2页
第2页 / 共59页
毕业设计(论文)-基于VFW的监控系统软件设计.doc_第3页
第3页 / 共59页
毕业设计(论文)-基于VFW的监控系统软件设计.doc_第4页
第4页 / 共59页
毕业设计(论文)-基于VFW的监控系统软件设计.doc_第5页
第5页 / 共59页
点击查看更多>>
资源描述

《毕业设计(论文)-基于VFW的监控系统软件设计.doc》由会员分享,可在线阅读,更多相关《毕业设计(论文)-基于VFW的监控系统软件设计.doc(59页珍藏版)》请在三一文库上搜索。

1、存档日期:_ 存档编号:_ 徐 州 师 范 大 学 本科生毕业论文(设计)论文题目: 基于VFW的监控系统软件设计 姓 名: 院 系: 电气工程及自动化学院 专 业: 自动化 班 级: 07电51 指导老师: 徐州师范大学教务处印刷52摘 要该设计的目的在于设计一种具有较强实用性、扩展功能丰富、成本低廉、适用于多数低端用户的监控系统软件。该软件可以满足小型书店、报亭、餐饮场所以及家庭室内的监控需求,同时又不需要专门添置专业监控设备。本设计采用讨论比较的方法,通过对多种视频捕捉技术的比较和多种编译语言的比较,选择出一组较为合适的方案,结合方案内容设计实现软件主要功能和扩展功能。文中首先在Wind

2、ows和Linux两种调试运行环境之间进行了讨论和取舍,接着比较了VFW和DirectShow等等集中视频捕捉技术的优劣,最后简要介绍了C+,Java,C#等几种可以用于编译的语言,比较了他们的优缺点,从而确定设计方案。通过VFW提供的接口函数,设计实现了软件的主要功能。使用C#语言在VS2008可视化编译程序上进行了编写和设计了截图、录像、定时录像等扩展功能。结合IIS技术,提出了一种新颖的远程通讯方案,设想了一种可行的远程监控方案,并对远程监控实施中可能遇到的技术难题提出了解决方案。 由于采用Windows系统的个人计算机作为平台,平台本身的可靠性安全性不高,所以软件的稳定性和安全性存在固

3、有缺陷。由于采用C# 语言设计和编译使得程序本身具有很好的移植和跨平台潜力,如果能将程序移植到Linux嵌入式系统的平台上则可以使得软件的可靠性安全性以及设置成本都有很大的飞跃。关键字: VFW视频技术 Window操作系统 C# C+AbstractThis project holds a clear objective to design video monitoring software with highly functional features, variable extensions and low expense .It can be used in many conseque

4、nces which acquire less monitoring demands such as small bookshops, Restaurants or home-using.It figures out a particular way to design the main function and extensions though the choosing of video processing technology and compile code such as C + and C #.At the first, it discusses the working circ

5、umstances between Windows and Linux. And then, it puts out the advantages and disadvantages of several video processing technology and compile code. And eventually , to make sure the plan.It can take screenshot to save or make a backup with video files automatically with the extensions. It can even

6、achieve the potential of the remote monitoring ability with the help of Internet Information Services (IIS) though the World Wide Web. As built with the Windows working circumstances , it do have the weakness of unstable and unsafe features as the Windows itself. But we can still deal with it by the

7、 high portability of C# language. To transplant to the Linux embedded system is the next generation upgrades.Keywords: VFW technology Window OS C+ C目 录摘 要IAbstractII1绪论11.1设计的背景11.1.1信息时代下的监控11.1.2监控软件和硬件平台的快速发展11.1.3现阶段监控系统存在的问题11.2设计面向的对象和意义21.2.1设计面向的对象22设计方案的选择与确定32.1程序调试环境的选择32.1.1 Linux 环境32.1

8、.2 Windows 环境32.1.3 环境的选定42.2视频处理技术的选择42.2.1 DS视频技术42.2.2 VFW技术42.2.3 MF技术52.3编译语言的初步考察52.3.1 B语言52.3.2 C语言62.3.3 C+语言72.3.4 Java语言72.3.5 C sharp语言72.4 编译语言的比较和选择92.4.1 C#与C+简单性的比较92.4.2 C#与Java的比较102.4.3编译语言的选定112.5方案选定小结和假设条件113基本功能的类和功能的实现123.1基本功能的分析123.2基本功能的实现和代码的设计123.2.1VFW技术概述123.2.2调用视频硬件接

9、口的功能203.2.3 播放视频213.2.4 打开摄像头223.2.5关闭硬件设备的函数234主程序和基础控件设计244.1软件系统框图244.2 程序和控件的设计244.2.1 主框体设计244.2.2 Picturebox控件284.2.3 “打开视频”按钮控件294.2.4 “关闭视频”的按钮控件294.2.5关闭窗口的按钮控件304.3调试和运行程序315扩展功能的实现和设计335.1 扩展功能综述335.2 截图功能335.2.1功能简介335.2.2 功能的实现和设计335.3 录像功能345.3.1 功能简介345.3.2 功能的实现和设计345.4 自动录像保存功能365.4

10、.1 功能简介365.4.2 功能的实现和设计375.5 远程网络监控415.5.1功能的简介415.5.2 方案的设计415.5.3 方案示意图425.5.4子程序和客户端设计425.5.5 IIS服务器架设435.5.6实时同步的问题解决445.5.7缓冲校验环节456设计优缺点和改进方向的讨论476.1该设计的优点优势476.2 该设计的缺点不足476.3改进方案与发展前景47致 谢48参考文献49徐州师范大学 基于VFW的监控系统软件设计1绪论1.1设计的背景1.1.1信息时代下的监控随着信息技术的飞速发展,人类已经进入一个高速发展的信息社会。在人类获取的信息中,视觉信息约占60%,听

11、觉约占20%,其它约占20%。由此可见,视觉信息对人类的重要性,而图像是人类获取视觉信息的主要途径。通过视觉感官进行监视最为直接最为有效,因此视频监控技术也成为监控领域中重要的课题。在信息技术和智能控制技术的支持下,在硬件技术硬件平台的不断促进下,在各种全新监控领域的新要求下,传统意义上的视频监控受到了计算机软件技术的冲击已经发展为信息化、网络化、智能化的多功能监视平台。类似智能识别,智能跟踪等等大量次世代监控技术随着新时期的监控要求应运而生,极大的满足了现代监控领域对监控技术的新要求。1.1.2监控软件和硬件平台的快速发展在电子技术和计算机软、硬件技术发展的同时,硬件平台和软件平台处理也都在

12、不断的更新,相应的视频处理技术也在不断发展和完善。市场上流通着各种监控硬件平台,从第一代模拟视频监控系统,到第二代数字视频监控系统,再到第三代基于IP的网络视频监控系统,品种繁多,而且都配有相应的监控软件平台作为监控系统软件的支持。1.1.3现阶段监控系统存在的问题虽然市场上常见的视频监控系统品种繁多,但是绝大多数都需要添加相应的硬件设施,然后通过专用的视频软件才能实现监控。硬件平台的设备从一个视频采集卡,到一个专业摄像头,再到一套完整的数据传输线,无不需要大量成本的投入,少则几百,多则上千甚至上万。而且系统的软件多为专用,不具有通用性,改变一个品牌的视频采集卡,就可能需要重新安装新的监控软件

13、。在某些特定的监控场合如小型书店、报亭和小型餐饮场所,存在着简单的监控需求,如果采用上述专业的监控系统,大量专业的功能都将被闲置,就好象用牛刀杀鸡,用大炮打蚊子,把简单的事复杂化不说,还要搭上大量的安装成本;巨额的监控成本远远超过监控本身的收益,或者本身的设备条件无法安装专业监控设备,使得用户不得不放弃监控设施,造成了监控领域的真空。1.2设计面向的对象和意义1.2.1设计面向的对象对于一些小型书店、报亭、小型餐馆或者对特定对象有监控需求的一般家庭,他们存在对监控系统的需求,如书店报亭用于防盗,餐馆等公共场所用于纠纷的取证,一般家庭可能会遇到各房间之间的监控(一边工作一边照顾婴幼儿);这些场合

14、虽然对监控存在需求,但是监控使用的摄像头不多(一般一到两个),摄像头对于监控设备之间的距离不远(5米之内),也不需要各种专业的信息处理功能(比如对象识别、对象跟踪),如果购买和安装专业的监控设备,不仅成本高昂难以接受,而且可能会遇到安装和兼容性问题(上述场合多数以使用便携式个人计算机,这种计算机无法兼容安装视频采集卡等专业设备)。这些监控场合需要一种通用性强,成本低,无需专业硬件设备支持的监控系统软件。本设计应上述监控场合的监控需求,设计了一种具有通用性高(可以在大多数计算机上安装使用),使用简便无需安装,无需专业设备等特点的监控软件,弥补了当前监控领域的真空;这种成本低廉,操作人员无需掌握相

15、关知识就可以实现监控的实用监控系统软件,只要配合各种专业功能扩展也可以实现各种特殊功能,如录像、截图等等,具有庞大的扩展空间和深厚的发展潜力。2设计方案的选择与确定2.1程序调试环境的选择2.1.1 Linux 环境典型代表: Ubuntu 8.0 RedHat 。Linux是一种受到广泛关注和支持的操作系统。包括国际商用机器公司和惠普、戴尔在内的一些信息业巨头也开始陆续支持Linux,并且成立了一些组织支持其发展,如Open Invention Network(OIN)购买了微软专利,允许任何个体以开放的原则使用。很多人认为,和微软的Windows相比,作为自由软件的Linux具有低软件成本

16、、高安全性且可更加信赖等优势,但是同时却需要更多的人力成本。优点:有很多便宜甚至免费的开源代码和成熟的技术可供利用,而且系统本身可靠性高,安全性高。缺点:在国内的一般个人计算机上普及程度不高,仅在相关爱好者和计算机专业应用上有所普及。2.1.2 Windows 环境典型代表:windows 7 windows 98 。视窗操作系统是微软公司推出的一系列操作系统。它问世于1985年,当时是DOS之下的操作环境,而后其后续版本作逐渐发展成为个人电脑和服务器用户设计的操作系统,并最终获得了世界个人电脑操作系统软件的垄断地位。视窗操作系统可以在几种不同类型的平台上运行,如个人电脑、服务器和嵌入式系统等

17、等,其中在个人电脑的领域应用内最为普遍。优点:民用个人电脑中的普及度相当高,各种技术非常成熟。缺点:Window系统稳定性一直为人所诟病,安全性也较低。2.1.3 环境的选定由于本设计强调了视频监视软件的便捷性和通用性,为了使得监控软件能够快捷的在大部分民用计算机上安装使用,故选择民用个人计算机普及度较高的Windows 操作系统比较妥当。同时,后文中的一些扩展功能,在Windows平台上也较容易实现。2.2视频处理技术的选择 2.2.1 DS视频技术DirectShow(DS),开发代号 Quartz ,是一种由微软公司开发的能够让软件开发者对媒体文件执行各种不同处理的应用程序设计接口。它是

18、微软公司对早先 Windows 视频科技的一次更新。基于微软公司 Windows 组件对象模型(COM)框架,DirectShow 为大部份微软公司程序设计语言提供了一个媒体的普遍接口,而且是一个可扩展的,能在用户或开发者的命令下播放或记录媒体文件的,以Filter为基础的框架。优点:历史悠久视频处理技术,有很多类似的视频软件设计可供参考和比较。缺点:播放一段视频本身不是一个复杂的的任务,而用DS播放视频通过创建用户自己的Filter,使得整个过程复杂化。同时DS技术仅支持微软自身的播放器系统WMP,对其它的播放器不够开放。同时在扑捉视频方面不够有效。2.2.2 VFW技术VFW 是Micro

19、soft公司为开发Windows平台下的视频应用程序提供的软件工具包,提供了一系列应用程序编程接口(API),用户可以通过这些接口很方便地实现视频捕获、视频编辑及视频播放等通用功能,还可利用回调函数开发比较复杂的视频应用程序。该技术的特点是播放视频时不需要专用的硬件设备,而且应用灵活,可以满足视频应用程序开发的需要。Windows操作系统自身就携带了VFW技术,系统安装时,会自动安装VFW的相关组件。优点:通过相应的硬件驱动程序可以方便的扑捉视频并且播放。缺点:比较老的视频技术,已经有较新的技术可供替换。2.2.3 MF技术Media Foundation是微软所推出新一代的 COM-base

20、d 多媒体应用平台,用来替代 DirectShow, Windows Media SDK, DirectX Media Objects (DMOs)等,并即将在 Vista上展现其影响。优点:较新的视频扑捉播放技术,各项功能都更加完善更加丰富。缺点:很多技术优势只有在最新windows平台才能体现,对于一般的用户而言不需要较为复杂花哨的功能,使用此技术反而是问题复杂化。根据便捷通用性高的软件要求,本设计选择了VFW处理方式。2.3编译语言的初步考察2.3.1 B语言即BASIC(Beginners All-purpose Symbolic Instruction Code)语言。意思就是“初学

21、者的全方位符式指令代码”,是一种设计给初学者使用的程序设计语言。BASIC是一种直译式的编程语言,在完成编写后不须经由编译及连结等手续即可运行,但如果需要单独运行时仍然需要将其创建成可执行文件。BASIC语言本来是为校园的大学生们创造的高级语言,目的是使大学生容易使用计算机。尽管初期的BASIC仅有几十条语句,但由于BASIC在当时比较容易学习,它很快从校园走向社会,成为初学者学习计算机程序设计的首选语言。随着计算机科学技术的迅速发展,特别是微型计算机的广泛使用,计算机厂商不断地在原由的BASIC基础上进行功能扩充,出现了多种BASIC版本,例如TRS-80 BASIC、Apple BASIC

22、、GWBASIC、IBM BASICA(即BASICA)、True BASIC。此时BASIC已经由初期小型、简单的学习语言发展成为功能丰富的使用语言。它的许多功能已经能与其他优秀的计算机高级语言相媲美,而且有的功能(如绘图)甚至在当时超过其他语言。在单片机上亦可以使用BASIC编程(一般是行号类型的BASIC),不过多数情况下要安装BASIC的ROM。BASIC语言的8个设计原则分别是:-让初学者容易使用。 -成为通用编程语言。 -允许为熟练者添加高级的功能(与此同时对初学者保持简单)。 -成为交互式语言。 -提供清楚的和友好的错误信息。 -对小型的程序反应迅速。 -不需要对硬件的了解。 -

23、将用户和操作系统隔离。正因为直译的编译模式,和为了适应初学者便于学习所做出的设计原则上的调整,使得Basic编译出的程序并非以高效紧凑为目标,并不追求效率。因此在实现同样功能时 BASIC语言编译出的程序效率只有C语言的几百甚至几千分之一。2.3.2 C语言 C语言是20世纪70年代由Dennis Ritchie 在基于UNIX操作系统上创建的。C语言的产生标志着现代程序设计时代的开始。在一定意义上,20世纪60年代的结构化程序设计造就了C语言。在结构化程序设计语言产生之前,大型的程序是很难编写的。因为往往在编写大型程序的时候,会由于存在大量的跳转、调用和返回,很难进行跟踪调试。结构化的程序设

24、计语言加入了优化定义的控制语句,子程序中采用了局部变量和其他的改进,使得这种问题得到了解决。C语言是结构化程序设计中最成功的一种,至今仍为常用的语言之一。2.3.3 C+语言 由于C语言自身的局限性,到了20世纪70年代末,很多项目的代码长度都接近或者达到了结构化程序设计方法和C语言能够处理的极限。为了解决这个问题,出现了新的程序设计方法,即面向对象程序设计(Object Oriented Programming ,OOP),程序员使用OOP可以编写出更大型的程序。推出C语言的面向对象程序设计版本成为迫切需要,最终导致了C+ 的出现。1979年初,Bjarne Stoustrup 在贝尔实验室

25、创造了 C+。C+是C的面向对象的版本。对于C程序员,可以方便地过渡到C+,从而进行面向对象的程序设计。20世纪90年代中期,C+成为使用广泛的程序设计语言。2.3.4 Java语言 随着网络的发展,程序设计语言的下一个主流指向了Java。Java的创造工作与1991年在Sun公司开始,主要的发明者是James Gosling。Java是一种面向对象的语言,它的语法和思想起源于C+。Java最重要的特点是具有编写跨平台、可移植代码的能力,Java能够将一个程序的代码转换到被称为字节码的中间语言,实现了程序的可以执行。该字节码在Java虚拟机上被执行。因此,Java程序可移植到有Java虚拟机的

26、任何环境中。由于Java虚拟机比较容易实现,因此它适用于大部分的环境。2.3.5 C sharp语言 即C# 语言,原Borland公司的首席研发设计师安德斯海尔斯伯格(Anders Hejlsberg)在微软开发了Visual J+ 1.0,很快的Visual J+由1.1版本升级到6.0版。SUN公司认为Visual J+ 违反了Java开发平台的中立性,对微软提出了诉讼。2000年6月26日微软在奥兰多举行的“职业开发人员技术大会”(PDC 2000)上,发表新的语言C#。C#语言取代了Visual J+,语言本身深受 Java、C 和 C+ 的影响,因此C# 不仅具有C+ 一贯的设计风

27、格很容易被C+的程序员掌握使用,同时C#也具有Java的一部分特点,拥有一定的可移植代码能力,使用C# 编译的程序具有较高的可移植性。 C# 简单易学,衍生于C+ 的C# 语言,出去了C+ 中不容易理解和掌握的部分,如最典型的指针操作、ALT与#define宏等,降低了学习的难度;同时C#的基本语法部分与C+,Java语言几乎一模一样。这样,无论是学过C#再学C+、Java,还是已经掌握了C+,Java再来学C# ,都会感到易于入门。C# 是一种面向对象的程序设计语言。面向对象技术较好的适应了当今软件开发过程中新出现的问题,包括软件开发的规模扩大、升级加快、维护量增大,以及开发分工日趋细化、专

28、业化和标准化等,是一种迅速成熟并推广的软件开发方法。面向对象技术的核心是以更接近于人类思维的方式建立计算机逻辑模型,它利用类和对象的机制将数据与其上的操作封装在一起,并通过统一的接口与外界交互,使反应现实世界实体的各个类在程序中能独立、自治、继承。这种方法非常有利于提高程序的可维护性和可重用性,大大提高了开发效率和程序的可管理性,使得面向过程语言难以操纵的大规模软件可以很方便地创建、使用和维护。C#程序能方便的与Web程序进行集成。利用ASP.NET的强大功能,C# 能与Web标准,如HTML和XML相结合。C#还能方便地开发Web服务,紧密地结合SOAP(Simple Object Acce

29、ss Protocol),使得C#开发大规模深层次的分布式应用成为可能。C#具有较高的安全性和稳定性。对网络上应用的程序的另一个需求是较高的安全性和可靠性。用户通过网络获取并在本地运行的应用程序必须是可信赖的,不会充当病毒或者其他恶意操作的传播者而攻击用户本地的资源;同时它也应该是稳定的,轻易不会产生错误导致程序无响应。C# 特有的机制是其安全性的保障,同时它去除了C+中易造成错误的指针,增加了自动内存管理等措施,保证了C#程序运行的可靠性。C#还支持多线程程序处理,同时具有丰富的类库。具有很强的灵活性和兼容性。2.4 编译语言的比较和选择 由于Basic语言本身的缺陷导致编译后的程序效率低下

30、,不适合对运算处理速度要求较高的视频处理应用,因此Basic首先被排除在考虑范围之外,本节仅对C、C+、Java和C#语言进行比较。 C、C+、Java和C#之间的发展衍生如下图。图 2-1 C语言的衍生框图 2.4.1 C#与C+简单性的比较 使用C+ 最大的烦恼莫过于操作符的使用,为了正确的使用操作符,用户不得不去跟踪每一个类变量的声明。而在C# 中只有一个“.”的操作符,无论是一个空间、一个类、一个结构、枚举变量、引用等,都是用“.”操作符。在使用C+时,用户不得不指出字符串是UniCode或者是Ansi类型的字符串,在C#中,一个UniCode字符本身就是一个Char类型的字符,它没有

31、wchar_t字符,也没有unsigned char、singed char;64位整数类型对应的是long,C# 中没有_int64。 使用C+和C还有一个复杂之处是把整数作为布尔类型来使用,这样往往会导致很多赋值错误。在C#中一个布尔类型只能为Ture或者为False,它不能被转换成其他类型。因此C#在简单性上远远优于C+语言。2.4.2 C#与Java的比较 C#与Java在很多方面具有相似性,同时也有一些重要的差别。1. 相似之处:(1) 二者都编译成跨平台的、跨语言的代码,并且代码只能在一个受控制的环境中运行。(2) 自动回收垃圾内存,并且消除了指针。(3) 都不需要头文件,所有的代

32、码都被限制在某个范围之内,并且因为没有头文件所以消除了类定义的循环依赖。(4) 都是严格的面向对象的语言。(5) 都支持异常处理。(6) 都有接口的概念。(7) 都支持多线程。(8) 都支持类定义的嵌套。2 差别(1) C# 中的所有数据类型都是Object的子类型,而Java中的数据类型成分基本数据类型和引用数据类型。(2) C# 中的数据类型中增加了Struct结构类型,而Java中没有结构类型。(3) C# 中的属性(Property)概念与域(Field)概念相分离,而Java中属性和域和域的使用同一个概念。(4) C#中的指代、事件机制能更好地处理函数指针和回调函数,而Java中只有

33、依靠接口等方法来实现。 2.4.3编译语言的选定从软件开发本身来讲 C+ 和C# 都适应开发要求,但C#具有更高的跨平台性便于软件进一步的改进,由于和Java的相似性,使用C# 语言编译可以让软件获得更大的可移植空间,以便向更加便宜便捷的嵌入式系统方向开发。 为了便于设计的方案的比较,主要功能将采用C+和C# 同时开发,由于C# 具有优势,故将C#作为主要开发方向,扩展功能将采用C# 规范设计代码和类。2.5方案选定小结和假设条件综合上述讨论,本设计将采用Windows7 Utimate 作为软件调试环境,主要功能实现采用的编译语言为C#3.0和C+,扩展功能的实现将采用C#;在Visual

34、Studio 2008上进行编译。硬件方面假设使用市场上常见的普通摄像头(USB接口即可),且配备完备的驱动程序可以任由程序的API接口方便调用。 3基本功能的类和功能的实现3.1基本功能的分析不同的视频监视软件可以具有截图录像存储等不同的功能,但是它们都具这样的基本功能,即备调用硬件,创建窗口播放视频和关闭硬件停止播放视频的功能。本章节旨在讨论如何调用系统的硬件,如何创建窗口播放视频,如何关闭硬件停止播放。基本功能将采用C+和C# 语言同步开发,由于篇幅限制,仅给出C#开发过程。3.2基本功能的实现和代码的设计3.2.1VFW技术概述1.VFW简介是Microsoft 1992年推出的关于数

35、字视频的一个软件包,它能使应用程序数字化并播放从传统模拟视频源得到的视频剪辑。VFW的一个关键思想是播放时不需要专用硬件,为了解决数字视频数据量大的问题,需要对数据进行压缩。它引进了一种叫AVI的文件标准,该标准未规定如何对视频进行捕获、压缩及播放,仅规定视频和音频该如何存储在硬盘上,在AVI文件中交替存储视频帧和与之相匹配的音频数。VFW给程序员提供.VBX和AVICap窗口类的高级编程工具,使程序员能通过发送消息或设置属性来捕获、播放和编辑视频剪辑。现在用户不必专门安装VFW了,Windows95本身包括了Video for Windows1.1,当用户在安装Windows时,安装程序会自

36、动地安装配置视频所需的组件,如设备驱动程序、视频压缩程序等。 VFW主要由以下六个模块组成:(1)AVICAP.DLL:包含了执行视频捕获的函数,它给AVI文件I/O和视频、音频设备驱动程序提供一个高级接口;(2)MSVIDEO.DLL:用一套特殊的DrawDib函数来处理屏幕上的视频操作;(3)MCIAVI.DRV:此驱动程序包括对VFW的MCI命令的解释器;(4)AVIFILE.DLL:支持由标准多媒体I/O(mmio)函数提供的更高的命令来访问.AVI文件;(5)压缩管理器(ICM):管理用于视频压缩解压缩的编解码器(CODEC);(6)音频压缩管理器ACM:提供与ICM相似的服务,不同

37、的是它适于波形音频。Visual C+在支持VFW方面提供有vfw32.lib、 msacm32.lib 、winmm.lib等类似的库。特别是它提供了功能强大、简单易行、类似于MCIWnd的窗口类AVICap。AVICap为应用程序提供了一个简单的、基于消息的接口,使之能访问视频和波形音频硬件,并能在将视频流捕获到硬盘上的过程中进行控制。2.AVICap编程简介AVICap支持实时的视频流捕获和单帧捕获并提供对视频源的控制。虽然MCI也提供数字视频服务,比如它为显示.AVI文件的视频提供了avivideo命令集,为视频叠加提供了overlay命令集,但这些命令主要是基于文件的操作,它不能满足

38、实时地直接从视频缓存中取数据的要求,对于使用没有视频叠加能力的捕获卡的PC机来说,用MCI提供的命令集是无法捕获视频流的。而AVICap在捕获视频方面具有一定的优势,能直接访问视频缓冲区,不需要生成中间文件,实时性很强,效率很高。同时,它也可将数字视频捕获到文件。在视频捕获之前需要创建一个捕获窗,所有的捕获操作及其设置都以它为基础。用AVICap窗口类创建的窗口(通过capCreateCaptureWindow函数创建)被称为“捕获窗”,其窗口风格一般为WS_CHILD和WS_VISIBLE。在概念上,捕获窗类似于标准控制(如按钮、列表框等)。捕获窗具有下列功能:(1)将一视频流和音频流捕获到

39、一个AVI文件中;(2)动态地同视频和音频输入器件连接或断开;(3)以Overlay或Preview模式对输入的视频流进行实时显示;(4) 在捕获时可指定所用的文件名并能将捕获文件的内容拷贝到另一个文件;(5)设置捕获速率;(6)显示控制视频源、视频格式、视频压缩的对话框;(7)创建、保存或载入调色板;(8)将图像和相关的调色板拷贝到剪贴板;(9)将捕获的一个单帧图像保存为DIB格式的文件。3.AVICap在显示视频时提供的两种模式:(A)预览(Preview)模式:该模式使用CPU资源,视频帧先从捕获硬件传到系统内存,接着采用GDI函数在捕获窗中显示。在物理上,这种模式需要通过VGA卡在监视

40、器上显示。(B)叠加(Overlay)模式:该模式使用硬件叠加进行视频显示,叠加视频的显示不经过VGA卡,叠加视频的硬件将VGA的输出信号与其自身的输出信号合并,形成组合信号显示在计算机的监视器上。只有部分视频捕获卡才具有视频叠加能力。4.除了利用捕获窗的九个功能外,灵活编写AVICap提供的回调函数还可满足一些特殊需求,比如将宏capCaptureSequenceNoFile同用capSetCallbackOnVideoStream登记的回调函数一起使用可使应用程序直接使用视频和音频数据,在视频会议的应用程序中可利用这一点来获得视频帧,回调函数将捕获的图像传到远端的计算机。应用程序可用捕获窗

41、来登记回调函数(由用户编写,而由系统调用),以便在发生下列情况时它能通知应用程序作出相应的反应:(1)捕获窗状态改变;(2)出错;(3)视频帧和音频缓存可以使用 ;(4)在捕获过程中,其它应用程序处于让步(Yield)地位。5.与普通SDK编程一样,视频捕获编程也要用到涉及视频捕获的结构、宏、消息和函数。发送AVICap窗口消息所能完成的功能都能调用相应的宏来完成。例如,SendMessage(hWndCap,WM_CAP_DRIVER_CONNECT,0,0L)与capDriverConnect(hWndCap,0)的作用相同,都是将创建的捕获窗同视频输入器件连接起来。6.在利用AVICap

42、编程时,应该熟悉与视频捕获相关的结构,下面对常用的四个结构作一简要介绍,对于前三个结构都有对应的函数来设置和获得结构包含的信息:(1)CAPSTATUS:定义了捕获窗口的当前状态,如图像的宽、高等;(2)CAPDRIVERCAPS:定义了捕获驱动器的能力,如有无视频叠加能力、有无控制视频源、视频格式的对话框等;(3)CAPTUREPARMS:包含控制视频流捕获过程的参数,如捕获帧频、指定键盘或鼠标键以终止捕获、捕获时间限制等;(4)VIDEOHDR:定义了视频数据块的头信息,在编写回调函数时常用到其数据成员lpData(指向数据缓存的指针)和dwBufferLength(数据缓存的大小)。7.

43、与视频捕获相关代码。1)定义全局变量:HWND ghWndCap ; /捕获窗的句柄CAPDRIVERCAPS gCapDriverCaps ; /视频驱动器的能力CAPSTATUS gCapStatus ; /捕获窗的状态2)处理WM_CREATE消息:/创建捕获窗,其中hWnd为主窗口句柄ghWndCap = capCreateCaptureWindow(LPSTR)Capture Window,WS_CHILD | WS_VISIBLE, 0, 0, 300,240, (HWND) hWnd, (int) 0);/登记三个回调函数,它们应被提前申明capSetCallbackOnErro

44、r(ghWndCap, (FARPROC)ErrorCallbackProc); capSetCallbackOnStatus(ghWndCap, (FARPROC)StatusCallbackProc); capSetCallbackOnFrame(ghWndCap, (FARPROC)FrameCallbackProc);capDriverConnect(ghWndCap,0); / 将捕获窗同驱动器连接/获得驱动器的能力,相关的信息放在结构变量gCapDriverCaps中capDriverGetCaps(ghWndCap,&gCapDriverCaps,sizeof(CAPDRIVER

45、CAPS) ;3)处理WM_CLOSE消息:/取消所登记的三个回调函数capSetCallbackOnStatus(ghWndCap, NULL);capSetCallbackOnError(ghWndCap, NULL);capSetCallbackOnFrame(ghWndCap, NULL);capCaptureAbort(ghWndCap);/停止捕获capDriverDisconnect(ghWndCap); /将捕获窗同驱动器断开4)处理菜单项Preview:capPreviewRate(ghWndCap, 66); / 设置Preview模式的显示速率capPreview(ghW

46、ndCap, TRUE); /启动Preview模式5)处理菜单项Overlay:if(gCapDriverCaps.fHasOverlay) /检查驱动器是否有叠加能力capOverlay(ghWndCap,TRUE); /启动Overlay模式6)处理菜单项Exit:SendMessage(hWnd,WM_CLOSE,wParam,lParam);7)分别处理Setting下的三个菜单项,它们可分别控制视频源、视频格式及显示:if (gCapDriverCaps.fHasDlgVideoSource)capDlgVideoSource(ghWndCap); /Video source 对话框if (gapDriverCaps.fHasDlgVideoFormat)capDlgVideoFormat(ghWndCap); / V

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 研究报告 > 信息产业


经营许可证编号:宁ICP备18001539号-1