




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
局域网视频监控系统的设计摘要:视频监控融合了信息技术、计算机技术、网络技术以及流媒体技术,一直是人们关注的应用技术热点之一,它以其直观方便、信息内容丰富而被广泛应用于许多场合。本文针对视频捕获和传输回放的功能要求,讨论了其软件系统的主要任务及解决方案。视频采集部分使用VFW函数进行。数据传输部分采用UDP协议,它提供面向无连接,不可靠的通信,相较于TCP有传输速率高,延迟小的优点。本文的视频采集、传输和显示是基于MicrosoftVisualC++6.0环境,利用MFC开发的。VisualC++作为一个可视的集成开发工具,提供了软件代码自动生成和可视化的资源编辑功能。与传统的一些编程平台相比,它能够使系统具有较高的效率和可用性。初步的实验结果表明,该软件系统在主要的功能上已接近实用化,并且操作简便、工作可靠。关键词:VFW;UDP;WinSockTheDesignofLAN-VideoMonitoringSystemAbstract:VideoMonitoringhasamalgamatedtechnologyofinformation,computer,networkandmediastream.Sopeoplegivemuchattentiontovideomonitoringeverytime.Ithasbeenahotspotbecauseofitsconvenienceandabundanceinformation.Thisarticlediscussedthetaskandsolutionaboutvideocapture,transmissionanddisplay.VideodatahasbeencapturedsuccessfullybyVFWanduseprotocolofUDPwhentransport.UDPprovideconnectionlessanduncertaintycommunication.ComparedwithTCP,UDPhashighspeedandshorttimemeasurement.Videocapture,transmissionanddisplayarebasedonthedevelopmentenvironmentofMicrosoftVisualC++6.0andprogrammedbyMFC.VisualC++6.0isavisualizedintegrateddevelopmenttool,whichcanproducesoftwarecodeautomaticallyandsuppliedintegratededitor.Ithashigherefficiencyandmoreusabilitythantraditionalprogrammingterrace.Experimentresultshowsthatthissoftwaresystemisnotonlypractical,butalsohassimplyoperationandreliablework.Keywords:VFW,UDP,WinSock目录第1章绪论...................................................................................................................11.1课题背景..............................................................................................................11.2课题的发展现状..................................................................................................11.3课题目的和意义..................................................................................................31.4论文的主要内容..................................................................................................3第2章基本概念介绍.......................................................................................................42.1VC++介绍............................................................................................................42.1.1C++............................................................................................................42.1.2VC++.........................................................................................................42.2MFC简介.............................................................................................................52.3VFW的体系结构................................................................................................52.4TCP/IP协议简介.................................................................................................62.5SOCKET套接字..................................................................................................82.5.1SOCKET套接字的引入...........................................................................82.5.2异步非阻塞...............................................................................................92.6本章小节..............................................................................................................9第3章局域网视频监控系统方案设计.........................................................................103.1系统总体方案设计............................................................................................103.2视频捕获方案的设计........................................................................................113.2.1视频捕获方案的选择.............................................................................113.2.2AVICap窗口类.......................................................................................123.2.3视频传输软件流程的设计.....................................................................133.3视频传输方案设计............................................................................................143.3.1传输层协议的选择.................................................................................143.3.2UDP协议的详细介绍............................................................................153.3.3套接字方案设计.....................................................................................173.3.4视频传输软件流程的设计.....................................................................173.4视频回放方案设计............................................................................................183.4.1视频回放方案选择.................................................................................183.4.2位图信息头介绍.....................................................................................183.5开发平台和工具的选择....................................................................................203.6本章小节............................................................................................................20第4章局域网视频监控系统实现.................................................................................214.1视频采集实现....................................................................................................214.1.1视频捕获.................................................................................................214.1.2视频捕获程序的测试与分析.................................................................234.2视频传输的实现................................................................................................234.2.1视频传输.................................................................................................234.2.2传输系统的测试与分析.........................................................................264.3视频接收还原的实现........................................................................................284.3.1视频接收还原.........................................................................................284.3.2视频接收还原的测试与分析.................................................................284.4局域网视频监控系统的测试与分析................................................................294.5本章小结............................................................................................................33结论.............................................................................................................................34致谢.............................................................................................................................35参考文献.............................................................................................................................361第1章绪论本章主要根据当今社会的发展状况,介绍了该课题的背景,发展以及意义。同时也简述了本文所写的主要内容。让我们对本课题的研究有一个初步的认识。该课题随着计算机通讯的发展也逐步成为了热门的话题1.1课题背景21世纪是信息时代,出于对安全的考虑,怎样将自己希望掌握的信息以最快最准确的方式传输一直是人们关注的热点。近年来,随着经济和科技的发展,在工业,商贸和金融等领域的企事业单位中都已经基本实现基于局域网的计算机网络化管理。与此同时出于安全的考虑,这些企事业单位又迫切希望能以图象等多煤体信息对重要目标进行不间断的安全监视,并及时将有关信息传送给监视中心。传统的网络主要提供数据业务,而在多媒体技术日新月异使得文本,语音,图形,图象和视频综合进入网络的需求日益增长。其中视频应用已经以其高数据量,连续性,实时性强,需要精确的时间控制,占用较大的网络带宽等特点,给学术界和工业界提出了巨大的挑战,也成为研究的热点和难点。无论对图象和视频的压缩技术,网络的传输控制技术还是视频传输相关网络协议方面都提出了新的要求。视频图象传输与传统的文件传输有明显的区别,传统文件传输对于传输的延迟,抖动没有过多的要求,但是要求有严格的差错控制和重传机制,视频图象传输在传输的实时性和同步性上要求很高,并且要求传输延迟小,视频图象传输能够忍受分组,丢失造成的差错或反常,也可以忍受由于没有重传或者纠错机制引起的显示不连续或显示混乱[1]。一直以来由于视频数据量大和网络带宽有限的矛盾,使得视频传输技术的应用受到很大的制约,必须根据视频传输的特点采用合适的网络协议和传输算法,才能达到较好的传输效果。因此研究远程有限带宽的多媒体通信具有很大的现实意义。所以利用现有的局域网资源实现基于视频图象的安全监控已经成为了一个很有发展前景的研究方向。1.2课题的发展现状视频监控技术发展经历了模拟监控、数字监控正在向大规模网络监控发展,视频监控系统的各组成部分――前端视频采集、视频传输、视频记录、控制、显示部分技术发展很快。为了和电脑对应,传统的模拟设备已经开始向数字设备转换;数字资料已经开始方便地传送和管理;可以借助安防网络设备连接其他的数字产品来扩大应用范围;远程传送的需求也越来越大,这表明视频监控技术已全面进入数字时代。网络信息的发展;许多建筑物已经具备局域网和广域网;有许多要求是在PC控制下的升级系统;图象处理用PC有许多的弹性;多种的数据保存硬件(硬盘、备份光盘等)发展很快,基础设施的发展为视频监控技术的发展创造了条件。监控技术的发展呈现出了他的许多新特点:监控点数量多且分散;网络化建设使网络视频传输变得经济、可行;海量数据传输和存储的需求;设备管理重要性增强甚至超过图象监控本身;管理者流动性增强;施工、布线成本昂贵,要求简化布线降低投资;同时信息安全受到普遍关注。所有这些市场的需求不断的呼唤着视频监控技术变革。视频监控的关键技术主要有视频采集压缩、视频信号可靠地传输、信息存储调用的智能化与系统的集中管理。视频监控系统的发展趋势包括:1)前端一体化;2)视频数字化,数字化是21世纪的特征,是以信息技术为核心的电子技术发展的必然,数字化是迈向成功的通行证,随着时代的发展,我们的生存环境将变得越来越数字化[2]。视频监控系统的数字化首先应该是系统中信息流(包括视频、音频、控制等从模拟状态转为数字状态,这将彻底打破“经典闭路电视系统是以摄像机成像技术为中心”的结构,根本上改变视频监控系统从信息采集、数据处理、传输、系统控制等的方式和结构形式。信息流的数字化、编码压缩、开放式的协议,使视频监控系统与安防系统中其它各子系统间实现无缝连接,并在统一的操作平台上实现管理和控制,这也是系统集成化的含义。3)监控网络化,视频监控系统的网络化将意味着系统的结构将由集总式向集散式系统过渡。集散式系统采用多层分级的结构形式,具有微内核技术的实时多任务、多用户、分布式操作系统以实现抢先任务调度算法的快速响应。组成集散式监控系统的硬件和软件采用标准化、模块化和系列化的设计,系统设备的配置具有通用性强、开放性好、系统组态灵活、控制功能完善、数据处理方便、人机界面友好以及系统安装、调试和维修简单化,系统运行互为热备份,容错可靠等优点。系统的网络化在某种程度上打破了布控区域和设备扩展的地域和数量界限。系统网络化将使整个网络系统硬件和软件资源的共享以及任务和负载的共享,这也是系统集成的一个重要概念。4)系统集成化也是视频监控系统公认的发展方向,而数字化是网络化的前提,网络化又是系统集成化的基础,所以,视频监控发展的最大两个特点就是数字化和网络化。1.3课题目的和意义通过做毕业设计题目“局域网视频监控设计”,可以从中学习VC++编程,这是课堂之外学的编程知识,通过对它的学习,可以比其他很多同学多掌握一种非常有用的编程工具。还可以从此次设计中学习视频捕获和显示技术和视频传输技术,视频传输技术是Internet发展的必然产物,学习它很有必要;而视频的捕获和显示也是视频处理的最基础的技术,学习他可以让我们在以后对视频图象处理的研究中更快的掌握其实质。本课题可以方便的构建局域网中的两台计算机之间的监视系统,达到实时监控的目的。可用于学校考场、幼儿园教室、工厂车间、小区别墅、宾馆酒店、办公楼、实验室、高速公路收费站等地方,以达到视频监视的目的。它能够实时的将被监视地点的情况传输到监视端,使监控人员能够及时的掌握情况并采取措施。1.4论文的主要内容本论文是针对视频监视系统当前的研究现状,主要研究视频捕获,传输及在接收端显示。本论文根据网络应用的具体情况,在VC++平台上,设计并实现了两台计算机之间的实时视频传输,达到了远程监视的目的。第2章基本概念介绍本章介绍了与本次课题研究有关的一些基本概念,这是在参与本次课题研究之前必须要了解和熟悉的内容。其中位图的概念在进行图象处理的时候尤为关键。2.1VC++介绍2.1.1C++C++是BarneyStrousrtup博士在贝尔实验室开发出来的一种编程语言[3],它在C语言的基础上融入面向对象能力及其他增强性能。与C相比它有许多优点,主要体现在封装性、继承性和多态性,这也是C++作为面向对象编程语言(OOP的主要特性。封装性把数据与操作数据的函数组织在一起不仅使程序结构更加紧凑,并且提高了内部数据的安全性;继承性增加了软件的可扩充性及代码重用性;多态性使设计人员在设计程序时可以对问题进行更好的抽象,有利于代码的维护和可重用。2.1.2VC++VisualC++不仅是一个C++编译器,而且是一个基于Windows操作系统的可视化集成开发环境(integrateddevelopmentenvironment,IDE。它由许多组件组成,包括编辑器、编译器、调试器以及程序向导Appwizard类、类向导ClassWizard等开发工具。这些组件通过一个名为DeveloperStudio的组件集成和谐的开发环境。其特点如下:1)利用Appwizard可以简单快速地生成一个应用程序框架,而不需程序员加入一句程序代码;2)利用AppStudio资源编辑器可以使用户界面的创建简单直观,所见即所得;3)利用ClassWizard可以使消息或命令自动与消息处理函数或控制函数相联系,程序员只需考虑函数核心代码的实现;4)利用VisualC++的ComponentsGallery和ControlsGallery可以加入现成的组件和控制。诸如ActiveX控制、闪烁窗口、定制状态条等组件。VisualC++贯穿了面向对象的程序思想,其核心是Microsoft基本类库(MicrosoftFoundationClass,MFC。现在的我们普遍用的是VisualC++6.0版本。2.2MFC简介Microsoft提供的MFC是放置WindowsAPI的面向对象的包装C++类库[4]。封装了大约200个类,其中的一些可以直接使用,而另一些则主要作为您自己的类的基础类。MFC也是一个应用程序的框架结构。它不仅仅是一个类的集合,它还帮助定义了应用程序的结构并为应用程序处理许多杂务。使用MFC编写Windows应用程序简单方便,代码量小,是VC编程环境最重要的组成部分,它为用户提供了一大批预先定义的类和成员函数,封装了大量的WindowsAPI。同时VC环境还提供了与MFC对象和代码一起工作的专用工具:AppStudio源程序编辑器、AppWizard和ClassWizard。应用MFC,可以使Windows程序员用较少的时间和精力开发出复杂的通讯应用程序。MFC包含了两个设计目标:1)给Windows操作系统提供一个面向对象的接口,支持可重用性,自包含性以及其他OOP原则。2)实现上述目标的前提是不需要强加给系统过多的工作,或不增加应用程序对内存的不必要开销。MFC的优点也正体现了上述的设计思想。MFC是一个非常优秀的类库,使OOP减少了程序员编写代码的数量。这正是它成功的地方。MFC提供了我们所需要的大量的代码,从而简化了开发。应用MFC,可以使Windows程序员用较少的时间和精力开发出复杂的通讯应用程序。比如在MFC中使用COM、OLE、和ActiveX时很少有人知道如何从头开始编写这些代码。使用MFC的另一个优点是框架结构使用了很多技巧是Windows对象,如窗口、对话框变得如同C++中的对象了。2.3VFW的体系结构VFW,称为vedioforwindows,是微软为Windows操作系统增设的多媒体服务库,包含在VC++6.0中。VFW是Microsoft公司为开发Windows平台下的视频应用程序提供的软件工具包,提供了一系列应用程序编程接口(API),它以消息驱动方式对视频设备进行存取,可以很方便地控制设备数据流的工作过程。目前,大多数的视频采集卡驱动程序都支持VFW接口,它主要包括多个动态连接库,通过这些组件间的协调合作,来完成视频的捕获、视频压缩及播放功能。VFW所包含的动态连接库如下所示[5]:1)AVICAP.DLL:主要实现视频捕获功能,包含了用于视频捕获的函数,为音像交错AVI(Audiovideointerleaved格式文件和视频、音频设备程序提供一个高级接口。2)MSVIDEO.DLL:能够将视频捕获窗口与获驱动设备连接起来,支持ICM视频编码服务。3)MCIAVI.DRV:包含MCI(Mediacontrolinterface)命令解释器,实现回放功能。4)AVIFILE.DLL:提供对AVI文件的读写操作等文件管理功能。5)ICM(Installablecompressionmanager:即压缩管理器,提供对存储在AVI文件中视频图像数据的压缩、解压缩服务。6)ACM(AudioCompressionManager:即音频压缩管理器,提供实时音频压缩及解压缩功能。2.4TCP/IP协议简介TCP/IP协议(TransmissionControlProtocol/InternetProtocol叫做传输控制/网际协议,又叫网络通讯协议,这个协议是Internet国际互联网络的基础。TCP/IP是网络中使用的基本的通信协议[6]。虽然从名字上看TCP/IP包括两个协议,传输控制协议(TCP和网际协议(IP,但TCP/IP实际上是一组协议,它包括上百个各种功能的协议,如:远程登录、文件传输和电子邮件等,而TCP协议和IP协议是保证数据完整传输的两个基本的重要协议。通常说TCP/IP是Internet协议族,而不单单是TCP和IP。TCP/IP是用于计算机通信的一组协议,我们通常称它为TCP/IP协议族。它是70年代中期美国国防部为其ARPANET广域网开发的网络体系结构和协议标准,以它为基础组建的INTERNET是目前国际上规模最大的计算机网络,正因为INTERNET的广泛使用,使得TCP/IP成了事实上的标准。之所以说TCP/IP是一个协议族,是因为TCP/IP协议包括TCP、IP、UDP、ICMP、RIP、TELNETFTP、SMTP、ARP、TFTP等许多协议,这些协议一起称为TCP/IP协议。以下是协议族中一些常用协议:TCP(TransmissionControlProtocol传输控制协议IP(InternetProtocol网际协议UDP(UserDatagramProtocol用户数据报协议ICMP(InternetControlMessageProtocol互联网控制信息协议SMTP(SimpleMailTransferProtocol简单邮件传输协议SNMP(SimpleNetworkmanageProtocol简单网络管理协议FTP(FileTransferProtocol文件传输协议ARP(AddressResolationProtocol地址解析协议TCP/IP协议实际上就是在物理网上的一组完整的网络协议。其中TCP是提供传输层服务,而IP则是提供网络层服务。TCP/IP包括以下协议:如图所示图2-1TCP/IP协议族从协议分层模型方面来讲,TCP/IP由四个层次组成:网络接口层、网络层、传输层、应用层。如下图所示:图2-2协议族的四个层次1)网络接口层:这是TCP/IP协议族的最低层,负责接收IP数据报并通过网络发送,或者从网络上接收物理帧,抽出IP数据报,交给IP层。网络接口层包括了硬件接口和协议ARP、RARP,这两个协议主要是用来建立送到物理层上的信息和接收从物理层上传来的信息。2)网际层:负责相邻计算机之间的通信。其功能包括三方面。一、处理来自传输层的分组发送请求,收到请求后,将分组装入IP数据报,填充报头,选择去往信宿机的路径,然后将数据报发往适当的网络接口。二、处理输入数据报。首先检查其合法性,然后进行寻径,假如该数据报已到达信宿机,则去掉报头,将剩下部分交给适当的传输协议。假如该数据报尚未到达信宿,则转发该数据报。三、处理路径、流控、拥塞等问题。网络层中的协议主要有IP,ICMP,IGMP等,由于它包含了IP协议模块,所以它是所有机遇TCP/IP协议网络的核心。在网络层中,IP模块完成大部分功能。ICMP和IGMP以及其他支持IP的协议帮助IP完成特定的任务,如传输差错控制信息以及主机/路由器之间的控制电文等。网络层掌管着网络中主机间的信息传输。3)传输层:提供应用程序间的通信。其功能包括:格式化信息流;提供可靠传输。为实现后者,传输层协议规定接收端必须发回确认,并且假如分组丢失,必须重新发送。传输层上的主要协议是TCP和UDP。正如网络层控制着主机之间的数据传递,传输层控制着那些将要进入网络层的数据。这两个协议就是它管理这些数据的两种方式:面向连接的TCP协议和面向无连接服务的UDP协议。4)应用层:位于协议栈的顶端,它向用户提供一组常用的应用程序,比如电子邮件、文件传输访问、远程登录等。远程登录TELNET使用TELNET协议提供在网络其它主机上注册的接口,TELNET会话提供了基于字符的虚拟终端。文件传输访问FTP使用FTP协议来提供网络内机器间的文件拷贝功能。2.5SOCKET套接字2.5.1SOCKET套接字的引入为了能够方便的开发网络应用软件,由美国克利大学在UNIX上推出了一种应用程序访问通信协议的操作系统调用套接字(Socket)[7]。Socket的出现,是TCP/IP网络环境下的编程接口,提供了不同主机间进程的双向通信端点,开发Socket的目的是屏蔽网络低层复杂的结构与协议,使编程人员能够简单的对网络进行操作,使程序员可以很方便的访问TCP/IP,从而开发各种网络应用的程序。随着UNIX的应用推广,套接字在编写网络软件中得到了极大的普及。后来,套接字又被引进了Windows等操作系统,成为开发网络应用程序非常有效快捷的工具。利用它可以构造任意跨操作系统跨网络协议的分布式处理系统。Socket面象客户/服务器模型,客户随机申请一个Socket,系统为之分配一个随机的Socket号;服务器拥有全局公认的Socket号,任何客户都可以向它发出连接请求。2.5.2异步非阻塞在进行网络编程时,我们常常见到同步、异步、阻塞和非阻塞四种调用方式。这些方式彼此概念并不好理解。下面是我对这些术语的理解。异步的概念和同步相对,异步方式就是当发送方发送一个数据包以后,一直等到接受方响应后,才接着发送下一个数据包。非阻塞和阻塞的概念相对应。阻塞调用是指调用结果返回之前,当前线程会被挂起。函数只有在得到结果之后才会返回。有人也许会把阻塞调用和同步调用等同起来,实际上他是不同的。对于同步调用来说,很多时候当前线程还是激活的,只是从逻辑上当前函数没有返回而已。以此推之,非阻塞指在不能立刻得到结果之前,该函数不会阻塞当前线程,而会立刻返回。2.6本章小节通过对各种基本概念的介绍使我们更加的容易理解后续章节中系统的设计。MFC是可视化编程的最重要的工具。VFW是进行视频采集和处理的最普遍的手段之一。现在局域网普遍采用的体系结构是TCP/IP,通过对他各层协议的说明让我们在后面的传输层的方案选择上显得更加的清晰。这些概念有一个总体的认识是阅读本文的基础。第3章局域网视频监控系统方案设计本章详细说明了此次研究要达到的目标、所用的开发环境和工具的简单情况、整个系统的总体方案,也分模块讲解了针对每一个任务所采取的相应措施以及具体的实现方案。针对本课题的研究内容一共分为三个模块:视频捕获、传输和显示。3.1系统总体方案设计本系统是利用现有的局域网,在硬件上构成简单且投入不大,只需使用市面上普通的USB摄象头加在电脑上作为视频采集设备,采集的图象大小为320×240。整个系统如图3-1。服务器(发送端)客户机(接收端)图3-1局域网视频监控系统本系统利用VC++6.0平台开发,实现视频采集图象在一个局域网中的两台计算机之间的实时传输,采用不压缩的方式直接传输位图。软件系统是该系统的核心部分,分为图象数据采集,图象传输,图象显示三个部分[8]。在接收端和发送端的软件流程分别如下图3-2和图3-3所示接收端的程序使用的是单线程。以上的图只是处理一帧的流程。程序一直等待接收数据,然后把每次接收到的数据移到另一个缓冲区,但每次接收到的数据只是一帧中数据的一部分,所以将他们移到另一个缓冲区后必须判断是否已接收完一帧,一旦确定缓冲区已有完整的一帧图象数据以后就立刻调用显示函数将图象送到显示器显示,以达到实时的效果。显示完毕后线程立刻返回继续接收数据。发送端程序也是使用单线程。将捕获到的每一帧图象数据送显示器显示的同时,也存储在固定的缓冲区中等待发送。当程序没有执行发送的命令时,在固定的缓冲区中前一帧的数据将被下一帧数据覆盖和刷新。当程序执行了发送的命令时,捕获到的每一帧数据将被立刻发送,如果一帧数据不被发送完,程序将被阻塞在那里不会再次捕获下一帧图象。即程序会将捕获到的每一帧图象数据完整的发送出去以后才返回,继续捕获下一帧。这样每一帧视频数据都能保证被实时发送出去。3.2视频捕获方案的设计3.2.1视频捕获方案的选择当前,在Windows平台下开发视频应用程序一般采用两种方式:一种是基于软件开发包DirectShowSDK(Softwaredevelopmentkit)进行。DirectShow是一个windows平台上的流媒体框架,提供了高质量的多媒体流采集和回放功能。它支持多种多样的媒体文件格式,包括ASF、MPEG、AVI、MP3和WAV文件,DirectShow整合了其它的DirectX技术,能自动地侦测并使用可利用的音视频硬件加速,也能支持没有硬件加速的系统。DirectShow大大简化了媒体回放、格式转换和采集工作。DirectShow是建立在组件对象模型(COM)上的,因此当你编写DirectShow应用时,你必须具备COM客户端程序编写的知识。对于大部分的应用,你不需要实现自己的COM对象,DirectShow提供了大部分你需要的DirectShow组件,但是假如你需要编写自己的DirectShow组件,你还需要具备编写COM组件的知识。这个开发包通常都会包含所需要的API函数、帮助文档、使用手册、辅助工具等资源。也就是说SDK实际上就是这些开发资源的一个集合。使用这种方式要求在电脑上安装上相应的组件。另一种方式是基于上一节中介绍的VFW(VideoforWindows进行的。VFW做为Windows平台下的视频应用程序提供的软件工具包,用户可以通过它们很方便地实现视频捕获、视频编辑及视频播放等通用功能,还可利用回调函数开发更复杂的视频应用程序。它将开发者从硬件的底层束缚中解放出来,大大简化了数字视频捕获这一原本很复杂的工作,利用它可以很方便的将模拟视频信号数字化,并支持进一步处理和播放,为开发实时视频应用程序开辟了道路。它的特点是播放视频时不需要专用的硬件设备,而且应用灵活,可以满足视频应用程序开发的需要。Windows操作系统自身就携带了VFW,系统安装时会自动安装VFW的相关组件。VC++自4.0以来就支持VFW,大大简化了视频应用程序的开发。我经过认真仔细的从各个方面对两个方案进行了比较。基于系统的开发环境,也为了开发的简单方便,最后决定采用VFWAPI进行视频捕获。因为如果用DirectShow的话,系统需要安装相应的SDK,配置相应的开发环境,还要具备COM组件的基础知识,将要比用VFW要花费更多的时间;本系统只是利用USB摄相头实现视频捕获的功能,所以从所要实现的功能来看,用VFW已经足够了。3.2.2AVICap窗口类在第二章中的VFW介绍中有一个avicap.dll。这个库中提供了功能强大、简单易行的窗口类AVICap[9]。它为应用程序提供了一个简单的,基于消息的接口,使之能够访问视频和波形音频硬件,并能够在视频流捕获到硬盘上的过程进行控制。这些接口函数是高级的,经过了优化的,我们利用它们来创建自己的应用程序具有较大的灵活性[11]。下面是视频捕捉以及处理过程中涉及到的几个很重要的结构:1)CAPSTATUS此结构定义了捕获窗口的当前状态,如:以象素为单位表示图象的高,宽,预览和重叠方式的标志量,尺寸缩放的标志量等等。2)CAPDRIVERCAPS此结构定义了捕获驱动器的能力,如有无视频叠加能力,以及能否通过用户直接操作捕获窗口而查看视频源,视频格式,视频显示。3)CAPTRUEPARMS此结构包含控制视频流捕获过程的一些参数,如捕获时间限制,指定键盘或者鼠标键以终止捕获,捕获视频帧等。以上3个结构都专门有对应的函数来设置和获得相应的信息。4)LPVIDEOHDR此结构用于定义视频数据块的头信息。在视频数据回调处理是尤为重要。LPVIDEOHDR结构一共有六个域如下lpVHdr->dwBufferLengthlpVHdr->dwBytesUsedlpVHdr->dwFlagslpVHdr->dwReservedlpVHdr->dwTimeCapturedlpVHdr->dwUserlpVHdr->lpData其数据成员lpData表示指向数据缓存的指针,dwBufferLength表示数据缓存的大小。这两个数据成员很重要,在编写回调函数时用到。3.2.3视频传输软件流程的设计通过AVIcap类实现视频捕获的流程图如下:整个流程的每一步都是调用的AVIcap类函数,详细的实现方法将在第4章中的4.1节介绍。图3-4视频捕获流程3.3视频传输方案设计3.3.1传输层协议的选择局域网[10]是基于TCP/IP体系结构的,为了保证适用本系统也采用TCP/IP协议。实现局域网视频图象的传输,传输协议是最为关键的。本文传输层用了两种方案,控制采用TCP协议,传输采用UDP协议,下面分别对这两个方案做介绍。1)根据传输所使用的协议是TCP,称之为TCP报文段。传输控制协议TCP中包含了专门的传递保证机制,提供可靠的全双工通信。当数据接收方收到发送方传来的信息时,会自动向发送方发出确认消息;发送方只有在接收到该确认消息之后才继续传送其它信息,否则将一直等待直到收到确认信息为止。数据传输结束后要释放连接。因此,通常人们把TCP协议称为可靠的传输协议。2)UDP和TCP协议的主要区别是两者在如何实现信息的可靠传递方面不同。根据传输所使用的协议是UDP,称之为UDP用户数据报。UDP协议不提供数据传送的保证机制。如果在从发送方到接收方的传递过程中出现数据报的丢失,协议本身并不能做出任何检测或提示。因此,通常人们把UDP协议称为不可靠的传输协议。在TCP协议中发送方和接收方必须交换额外的信息以保证接收方已经接收到所发送的数据包并且所接收到的数据和发送方所发送的数据在内容和顺序上是完全一致的。我们在视频发送之前,要先确定两端已经建立了连接,如果有一端没有打开,或者程序出错,另一方必须确保能知道这个事件。所以确立连接和结束连接这部分只能是TCP协议。TCP为了保证可靠,所以有很多额外的信息交换,虽然提高了数据传输的可靠度却也给网络带来了额外的负担,导致数据交换的延迟,从而降低整个网络数据交换能力。UDP协议省去了建立连接和拆除连接的过程,取消了重发检验机制,所以能够达到较高的通信速率,但是其代价是不能保证可靠性,在强调传输速率而不是传输的完整性的时候就应该选择UDP协议。视频传输系统强调的是图象传输的实时性,在局域网内数据传输的可靠性已经很高了,图象数据在传输中出错的机率是很小的。即使某一帧出现了错误,它也能很快的被下一帧图象刷新。综合各方面的因素,进行视频传输时,传输层协议选择UDP。3.3.2UDP协议的详细介绍用户数据报协议UDP只在IP的数据报服务之上增加了很少的一点功能,这就是端口的功能和差错校验的功能。在传输的时候,UDP数据报的结构如图3-5:数据报之前增加了12个字节的伪首部,它并不是UDP用户数据报真正的首部,只是在计算检验和时,临时和UDP用户数据报连接在一起,得到一个过渡的UDP用户数据报。检验和就是按照这个过渡的UDP用户数据报来计算的。伪首部仅仅是为了计算校验和[11]。UDP协议使用报头中的校验和来保证数据的安全。校验和首先在数据发送方通过特殊的算法计算得出,在传递到接收方之后,还需要再重新计算。如果某个数据报在传输过程中被第三方篡改或者由于线路噪音等原因受到损坏,发送和接收方的校验计算值将不会相符,由此UDP协议可以检测是否出错。这与TCP协议是不同的,后者要求必须具有校验和。整个UDP用户数据报的结构如图3-5所示,可以看到在UDP用户数据只是IP数据报里面的数据。下面我们来讲解一下UDP的首部,即报头。UDP协议的主要作用是将网络数据流量压缩成数据报的形式。一个典型的数据报就是一个二进制数据的传输单位。每一个数据报的前8个字节用来包含报头信息。剩余字节则用来包含具体的传输数据。UDP报头由4个域组成,其中每个域各占用2个字节,具体如下:源端口号,目标端口号,数据报长度,校验值。UDP协议使用端口号为不同的应用保留其各自的数据传输通道。UDP和TCP协议正是采用这一机制实现对同一时刻内多项应用同时发送和接收数据的支持。数据发送一方(可以是客户端或服务器端)将UDP数据报通过源端口发送出去,而数据接收一方则通过目标端口接收数据。有的网络应用只能使用预先为其预留或注册的静态端口;而另外一些网络应用则可以使用未被注册的动态端口。因为UDP报头使用两个字节存放端口号,所以端口号的有效范围是从0到65535。一般来说,大于49151的端口号都代表动态端口。数据报的长度是指包括报头和数据部分在内的总的字节数。因为报头的长度是固定的,所以该域主要被用来计算可变长度的数据部分(又称为数据负载)。数据报的最大长度根据操作环境的不同而各异。从理论上说,包含报头在内的数据报的最大长度为65535字节。不过,一些实际应用往往会限制数据报的大小,有时会降低到8192字节。3.3.3套接字方案设计在MFC库中提供了对Socket的封装,有两个类:1)异步类CAsyncSocket[12],它封装了异步、非阻塞Socket的基本功能,用它做常用的网络通信软件很方便。但它屏蔽了Socket的异步、非阻塞等概念,开发人员无需了解异步、非阻塞Socket的原理和工作机制。服务器端和客户端的应用程序均是基于MFC的标准对话框,网络通信部分基于CAsyncSocket实现。当你获得了一个异步连接后,实际上你扫除了发送动作与接收动作之间的依赖性。所以你随时可以发包,也随时可能收到包。发送、接收函数都是异步非阻塞的,顷刻就能完成,所以收发交错进行着,你可以一直工作,保持很高的效率。2)CSocket类是CAsyncSocket导出的类,提供了更高层次的抽象,封装了Socket实现中的许多细节。局域网实时视频传输采用服务器/客户机模式。我采用了异步非阻塞套接字来进行此次网络通信程序的开发。而CAsyncSocket正封装了这个功能,它完全可以满足该系统的需要。所以我们选用CAsyncSocket套接字。3.3.4视频传输软件流程的设计本文中文件传输采用的传输协议是TCP控制,UDP传输,在建立客户/服务端连接是采用的TCP协议,建立连接后视频传输开始就采用UDP协议了。根据传输层在不同的功能使用不同的协议,也分别使用了两个套接字和两个端口。传输部分的软件流程图3-6首先在客户端和服务端运行程序后,用基于TCP的套接字建立连接,接下来执行视频传输时再创建一个基于UDP的套接字,结束时断开连接。3.4视频回放方案设计3.4.1视频回放方案选择通过网络传输到接收端的是一幅又一幅的位图[13],显示位图数据可以通过设备上下文CDC对象的成员函数CDC::Bitblt(或CDC::StretchBlt(来实现,也可以通过API函数SetDIBBitsToDevice(或StretchDIBBits(来实现,函数中具体所用到的各个参数的意义可以参考MSDN。其中StretchDIBBits(和CDC::StretchBlt(可以将图像进行放大和缩小显示。可以在该函数中实现对视图尺寸的设置。因为系统不需要对所接收到的图象进行改动,直接送到显示器显示,所以我们采用SetDIBBitsToDevice(这个函数来实现位图(DDB)的显示。3.4.2位图信息头介绍在对位图进行显示的时候,涉及到了位图信息头BITMAPINFOHEADER结构体,这个结构体对视频处理很重要。现简单说明如下:位图信息头BITMAPINFOHEADER,其定义如下:typedefstructtagBITMAPINFOHEADER{DWORDbiSize;LONGbiWidth;LONGbiHeight;WORDbiPlanes;WORDbiBitCountDWORDbiCompression;DWORDbiSizeImage;LONGbiXPelsPerMeter;LONGbiYPelsPerMeter;DWORDbiClrUsed;DWORDbiClrImportant;}BITMAPINFOHEADER;这个结构的长度是固定的,为40个字节(LONG为32位整数,各个域的说明如下:biSize指定这个结构的长度,为40。biWidth指定图象的宽度,单位是象素。biHeight指定图象的高度,单位是象素。biPlanes必须是1,不用考虑。biBitCount指定表示颜色时要用到的位数,常用的值为1(黑白二色图,4(16色图,8(256色,24(真彩色图(新的.bmp格式支持32位色,这里就不做讨论了。BiCompression指定位图是否压缩,有效的值为BI_RGB,BI_RLE8,BI_RLE4,BI_BITFIELDS(都是一些Windows定义好的常量。要说明的是,Windows位图可以采用RLE4,和RLE8的压缩格式,但用的不多。我们今后所讨论的只有第一种不压缩的情况,即biCompression为BI_RGB的情况。biSizeImage指定实际的位图数据占用的字节数,其实也可以从以下的公式中计算出来:biSizeImage=biWidth’×biHeight要注意的是:上述公式中的biWidth必须是4的整倍数(所以不是biWidth,而是biWidth’,表示大于或等于biWidth的,最接近4的整倍数。举个例子,如果biWidth=240,则biWidth’=240;如果biWidth=241,则biWidth’=244。如果biCompression为BI_RGB,则该项可能为零biXPelsPerMeter指定目标设备的水平分辨率,单位是每米的象素个数。biYPelsPerMeter指定目标设备的垂直分辨率,单位同上。biClrUsed指定本图象实际用到的颜色数,如果该值为零,则用到的颜色数为2biBitCount。biClrImportant指定本图象中重要的颜色数,如果该值为零,则认为所有的颜色都是重要的。3.5开发平台和工具的选择软件开发平台的选择首先取决于程序将要运行的环境。用户使用的计算机及操作系统,以及用户运用计算机的专业化程度等,影响着软件开发人员可选择的范围。就我们所要开发的系统而言,其用户是对系统的先进性、可靠性、经济性等要求较为苛刻的高新技术企业,而具体操作者则主要是从未接受过计算机专业培训的普通技工,因而对系统的易操作性和易维护性等同样有很高的要求。因此,选用运行Windows操作系统的PC机作为该系统的基本开发平台几乎是目前唯一的选择。同样,为了保证系统的先进性、易操作性、易维护性和易升级性,我们选择Microsoft公司出品的面向对象的程序设计语言VisualC++6.0作为开发工具,它是目前为止Windows环境下进行大型软件开发的首选。Windows操作系统和面向对象的VisualC++6.0程序设计语言是非常适合于该系统研制的开发环境和编程工具。3.6本章小节本章主要从总体到局部详细分析了整个课题的方案以及实现方法,分三个模块来分别对局部设计进行阐述,介绍了所要使用的概念,画出了流程图并明确且详细的做出了分析。为后面第四章的方案实现奠定了基础。第4章局域网视频监控系统实现在完成系统方案论证和软件开发方法的介绍之后,这一章主要介绍视频监控软件系统的实现。用VC++6.0来实现每一部分的软件编程。对于视频监控软件系统的程序设计主要分三部分,一部分是发送端利用USB摄象头进行视频采集程序设计,一部分是视频传输从发送到接程序的设计,还有一部分是在接收端对接收到的数据进行处理后显示的程序。下面将详细介绍它们的实现过程。4.1视频采集实现4.1.1视频捕获视频数据的实时采集,主要通过AVICAP模块中的消息、宏函数、结构以及回调函数来完成。根据图3-4视频捕获的流程图来说明视频捕获每一步的具体实现的具体:1)建立捕获窗口利用AVICAP组件函数capCreateCaptureWindow(建立视频捕获窗口,它是所有捕获工作及设置的基础,其主要功能包括:①动态地同视频和音频输入器连接或断开;②设置视频捕获速率;③提供视频源、视频格式以及是否采用视频压缩的对话框;④设置视频采集的显示模式为Overlay或为Preview;⑤实时获取每一帧视频数据;⑥将一视频流和音频流捕获并保存到一个AVI文件中;⑦捕获某一帧数字视频数据,并将单帧图像以DIB格式保存;⑧指定捕获数据的文件名,并能将捕获的内容拷贝到另一文件。2)连接捕获窗口与视频捕获卡通过宏capDriveConnect(hWndc,0来完成。3)设置捕获窗口的预览速率视频捕获后会在捕获窗口显示捕获到的图象,这时我们需要对视频捕获和显示的速率进行设置,否则它就是默认的。4)设置捕获窗口显示模式视频显示有Overlay(叠加和Preview(预览两种模式。在叠加模式下,捕获视频数据布展系统资源,显示速度快,视频采集格式为YUV格式,capOverlay(hWndc,TRUE来设置;预览模式下要占用系统资源,视频由系统调用GDI函数在捕获窗显示,显示速度慢,它支持RGB视频格式。此次程序我们选择Preview(预览模式[11]。5)登记回调函数登记回调函数用来实现用户的一些特殊需要。在以一些实时监控系统或视频会议系统中,需要将数据流在写入磁盘以前就必须加以处理,达到实时功效。应用程序可用捕获窗来登记回调函数,以便及时处理以下情况。我们登记capSetCallbackOnFrame(hWndc,FrameCallbackProc)这个回调函数。6)捕获图像到缓存或文件并作相应处理利用回调机制,由capSetCallbackOnFrame(hWndc,FrameCallbackProc)完成单帧视频采集;获取实时数据缓冲区的首址和长度并对图象数据进行处理。VFW中的这条宏函数如用于设置在发生某件事情后能作出反应的回调函数时,和中断服务机制很相似,条件一满足,程序会自动进入相应的回调函数替中,该函数究竟要做什么全由开发者借助其参数自行编制程序来确定。使用capSetCallbackOnFrame(hWndc,FrameCallbackProc)时只要一启动视频捕获,一帧结束就立刻产生回调动作,怎样响应就由登记在函数capSetCallbackOnFrame()里面的FrameCallbackProc(HWNDhWnd,LPVIDEOHDRlpVHdr)来处理。值得注意的是回调函数要提前定义在程序的头部。7)终止视频捕获,断开与视频采集设备的连接调用capCatureStop(hWndc停止采集,调用capDriverDisconnect(hWndc,断开视频窗口与捕获驱动程序的连接。实现视频捕获的主要代码段如下:hWndc=capCreateCaptureWindow("李萍",WS_VISIBLE|WS_CHILD,3,0,320,240,this->m_hWnd,1;//创建捕获窗口capDriverConnect(hWndc,0;//连接摄相头驱动capPreviewRate(hWndc,40;//设置捕获速率capPreview(hWndc,true;//设置显示模式capSetCallbackOnFrame(hWndc,FrameCallBack;//登记回调函数4.1.2视频捕获程序的测试与分析程序执行后的界面如图:图4-1视频捕获界面这里一共有四个按纽,按下“开始传输”后,程序将捕获的图象发送到接收端。按下“显示设置”按纽后,可以调节所捕获的图象的亮度、灰度、对比度等,还可以选择捕获源。按下“格式设置”按纽以后会出现可以调节分辨率的界面。程序运行后在捕获窗口中不断的动态显示着一帧又一帧捕获的图象。在这里要注意一个问题:视频窗口大小设置为320×240,因为这里显示的图象是VFW函数捕获到的原始大小图象,而它的原始大小正好为320×240。4.2视频传输的实现4.2.1视频传输针对建立连接这部分,CAsyncSocket类针对字节流型套接字的编程模型[14]简述如下[7]:1)构造一个CAsyncSocket对象,并用这个对象的Create成员函数产生一个Socket句柄。第一种方法在栈上产生一个CAsyncSocket对象,而第二种方法在堆上产生CAsyncSocket对象。第一种Create成员函数用缺省参数产生一个字节流套接字,第二种Create成员函数用指定的端口和地址产生一个数字报套接字。我们采用的是第二中方法。Create的参数有:①端口,UINT类型。注意:如果是服务方,则使用一个众所周知的端口供服务方连接;如果是客户方,典型做法是接受默认参数,使套接字可以自主选择一个可用端口;②socket类型。SOCK-STREAM(默认值)或SOCK-DGRAM;③socket地址。例如“”或“3”。2)如是客户方程序,用CAsyncSocket∷Connect成员函数连接到服务方;如是服务方程序,用CAsyncSocket∷Listen成员函数开始监听,一旦收到连接请求,则调用CAsyncSocket∷Accept成员函数开始接收。注意:CAsyncSocket∷Accept成员函数要用一个新的并且是空的CSocket对象作为它的参数,这里所说的“空的”指的是这个新对象还没有调用Create成员函数。3)调用其他的CAsyncSocket类成员函数进行通讯管理。4)通讯结束后,销毁CAsyncSocket对象。如果是在栈上产生的CAsyncSocket对象,则对象超出定义的范围时自动被析构;如果是在堆上产生,也就是用了new这个操作符,则必须使用delete操作符销毁CAsyncSocket对象。使用CAsyncSocket传输的流程[15]如图:图4-2Socket建立连接的模型服务器端的主要代码如下:voidCTCP_SERVERDlg::OnButton1({//TODO:AddyourcontrolnotificationhandlercodehereCStringstr;CTCP_SERVERDlg*dlg=(CTCP_SERVERDlg*::AfxGetMainWnd(;::AfxSocketInit(;//初始化套接字dlg->m_start.GetWindowText(str;//指定按纽内字体if(str=="开始传输"{dlg->m_start.SetWindowText("停止传输";//将按纽的字体设置为停止传输c_listensock.Create(1000,SOCK_STREAM,FD_ACCEPT;//初始化监听套接字c_listensock.Listen(;//开监听}else{dlg->m_start.SetWindowText("开始传输";//将按纽的字体设置为开始传输c_listensock.Close(;//关闭套接字c_listensock.Listen(;//开监听m_connected=false;}}建立连接后服务端的调用函数执行代码如下:voidClistensock::OnAccept(intnErrorCode{//TODO:Addyourspecializedcodehereand/orcallthebaseclassCTCP_SERVERDlg*dlg=(CTCP_SERVERDlg*::AfxGetMainWnd(;Accept(dlg->l_resocket;dlg->l_resocket.AsyncSelect(FD_READ|FD_WRITE;//为套接字请求事件dlg->m_connected=true;if(ready==0dlg->l_udpsocket.Create(5000,SOCK_DGRAM;//创建UDP套接字CAsyncSocket::OnAccept(nErrorCode;}客户端的主要代码如下:voidCTcp_c2Dlg::Onconnect({//TODO:Addyourcontrolnotificationhandlercodehere::AfxSocketInit(;//初始化套接字c_clientsock.Create(0,SOCK_STREAM,FD_CONNECT|FD_READ|FD_WRITE;//初始化监听c_clientsock.Connect("",1000;//连接用户数据报套接字}4.2.2传输系统的测试与分析完成视频捕获后,在发送端点击“开始传输”按纽后,在接收端点击“视频请求”按纽,这时就会在接收端回就不断的回放发送端捕捉到的图象。如图所示是发送端和接收端在同一时间显示的图象。这说明发送是成功的。发送端:图4-3发送端传输界面接收端:图4-4接收端传输界面如果要停止传输,在接收端点击停止传输按纽,此时看到接收端图象停止不动了,说明没有收到新的图象对以前的图象进行刷新。停止传输已经成功,如图所示:在发送端按下“停止传输”按纽后,发送端和接收端在同一时间所显示的图象是不同的,接收端已经在按纽按下那一刻起停止不动了。发送端:图4-5停止传输后发送端界面接收端:图4-6停止传输后接收端界面需要注意的是“开始传输”与“停止传输”按纽是同一个按纽,在两个之间切换的。当点击“开始传输”后,按纽就变成“停止传输”。4.3视频接收还原的实现4.3.1视频接收还原这部分相对前两部分比较简单。因为接收到的数据在接收缓冲区中,将其取出显示就不需要加载位图数据了。只需要以下几个步骤:1)定义一个兼容DC指针并指向设备描述符表。2)通过指定的函数将接收到的数据送到设备显示。主要代码如下:c_count=0;CTcp_c2Dlg*pDlg=(CTcp_c2Dlg*::AfxGetMainWnd(;CDC*pDC=pDlg->GetDC(;获得DC句柄SetDIBitsToDevice(pDC->GetSafeHdc(,10,10,320,240,0,0,0,240,buffer,&(pDlg->m_info,DIB_RGB_COLORS;//显示位图4.3.2视频接收还原的测试与分析通过测试,接收端成功显示了图象,接收端接收到发送端的图象后,显示状态如图4-7图4-7接收端的显示界面4.4局域网视频监控系统的测试与分析前面三节中,已经分别实现了视频捕获、传输和显示的功能。这一节要实现视频捕获后在网络中传输然后回放的功能,即实现本次设计最终所要求的功能。既然视频捕获、传输和回放功能都分别实现了,那么现在要做的就是把这两部分连接起来,构成一个整体。此次实验在VC++中的MFC环境中,利用AppWizard生成Dialog类型的应用程序。在Dilog中设置程序所需要的全部控件和函数。将两部分代码整合,调试运行。接收端用VFW函数捕获图象后采用异步非阻塞套接字进行传输,在接收端用位图显示函数进行显示。软件的调试是将IP设置为“”,在一台计算机上实现自发自收的。做到了图象实时传输,无缺失,没有停顿感。所设计的系统已经具备主要的预期功能。在调试过程中遇到了一个问题:视频数据传输的时候,程序的编译、链接没有出现问题,能正常执行并弹出Dialog界面,但是在发送端点击了“开始传输”按纽,在接收端也点击了“视频请求按纽”以后,在接收端并没有象预期的那样接收到数据。经过分析,我看到SendTo(函数的返回值是“WSAEMSGSIZE”,这个错误在MSDN里面的解释是“Thesocketismessageoriented,andthemessageislargerthanthemaximumsupportedbytheunderlyingtransport”。所以发现问题在于一次性传输数据量过大导致传输失败。所以针对这个问题我采用了分段传输的方法,将一帧图象分成割成了四个UDP可以传输的最大包,传输到接收端后也分段接收。这里因为捕获到的是视频图象,也就是说捕获到每一幅图象都是一幅位图,根据分段传输的需要,我定义了一个结
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2023年主管护师社区讲义社区重点人群保健
- 工矿产品购销合同参考模板2025年
- 生物识别技术在2025年智能穿戴设备心率监测中的应用研究报告
- 农产品质量安全追溯体系在2025年农业产业升级中的应用路径
- 二零二五版国际合作科研合作协议书
- 二零二五年度防水材料研发与市场推广合作协议
- 二零二五年度数据中心基础设施运维与维保一体化协议
- 二零二五年度地下综合管廊建设制式合同
- 2025版美容院美容院线产品代理权与股权投资合同
- 2025版仓库场地租赁合同范本
- 乳制品企业食品安全培训
- DB21-T 2935-2018辽西北退化农田防护林修复技术规程
- 2024年云南省康旅控股集团有限公司招聘笔试参考题库含答案解析
- 文创研学商业计划书
- 《咖啡生豆烘焙》课件
- 工程检验检测机构安全培训
- 2023年保定市易县社区工作者招聘考试真题
- 成都师大附中外国语学校学校初一新生分班(摸底)语文考试模拟试卷(10套试卷带答案解析)
- ISO工厂程序文件
- 急慢性心力衰竭治疗
- 单值-移动极差X-MR控制图-模板
评论
0/150
提交评论