《毕业设计论文基于ARM的视频监控系统上位机的设计.doc》由会员分享,可在线阅读,更多相关《毕业设计论文基于ARM的视频监控系统上位机的设计.doc(43页珍藏版)》请在三一办公上搜索。
1、洛阳理工学院毕业设计(论文)基于ARM的视频监控系统上位机的设计摘 要现在电子技术、计算机技术以及通信技术等飞速的向前发展,网络视频监控系统在民用、军事、工业等各个领域得到越来越广泛的应用,视频监控系统已经逐步渗透到了社会生活中的各个领域。随着视频压缩技术、数据传输等相关技术的不断发展,传统的视频监控方式很难满足用户的需要。文中介绍了一种基于S3C2440 嵌入式平台的视频监控系统,并通过局域网传输使得网内的计算机可以实时地获得视频图像,从而可以达到远程监控的目的。鉴于Linux 内核的开源及其稳定性,采用其作为操作系统,从而使整个系统具有较好的实时性和稳定性。该系统以高佳能的ARM处理器、嵌
2、入式WEB服务器为核心,以互联网为支撑,通过浏览网页访问Web服务器的方式,观看视频监控图像。该系统有着广泛的发晨前景,对其进行研究有着重要的现实意义。关键词:ARM,S3C2440,Linux,WEB,USB Video Surveillance System Based on ARMABSTRACTThe electronic technology, computer technology and communications technology, the development of fast forward, network video monitoring system in th
3、e civil, military, industrial and other fields are more widely used. The video surveillance system has permeated into various fields in our life step by step. Along with the continuous development of many techniques such as the video compression technique, the data transmission technique, and so on,
4、 many traditional methods of video surveillance can hardly satisfy our requirement. A method of the video surveillance system based on S3C2440 is introduced, and any computers which are under the same network can capture the real - time video image through the LAN, by this means, a method of remote
5、monitor can be achieved. In view of the feature of open source and the stability of the Linux core, this program adopts the Linux OS to make the whole system attain a higher feature of real - time and stability. Take the video surveillance system as a whole and present the principle of the system, t
6、he core of system is ARM micro processor and embedded by web server. And Internet is needed to support it, and the server can be visited in the way of web-view. Video surveillance system is very useful in the true life, so it is important to research it.KEY WORDS: ARM,S3C2440,Linux,WEB,USB5目录前言1第1章
7、视频监控系统总体设计方案31.1 系统总体方案31.2 上位机设计方案5第2章 软件设计方案62.1VC+简介62.2 基础知识和理论92.3上位机软件设计142.4上位机程序设计162.4.1 视频数据接收端的实现172.4.2压缩图像解码显示19第3章 系统调试与运行233.1测试环境233.2测试内容233.2.1 VC程序测试233.2.2系统测试273.3测试结果29结论30谢 辞31参考文献32外文资料翻译34前言网络视频监控技术是一门集电子技术、计算机网络技术和视频技术于一体的综合技术,具有方便、直观、丰富等特点。目前计算机网络技术以及多媒体技术正在飞速向前发展,远程自动控制技术
8、也逐渐融入到视频监控系统中,同时视频监控技术也得到了快速的发展。传统视频监控系统大多是以模拟图像监控为主,对视频图像的处理和传输都采用了模拟技术,但是通过这种传统监控技术得到的图象质量比较低,并且系统资源浪费,可扩展性比较差。当前的视频监控系统正由模拟化向数字化转换,并且向系统网络化以及管理智能化等方向不断的发展。视频监控系统是一种防范能力非常强的综合系统,在安防系统起着越来越重要的作用。交通、工业生产、银行、智能办公大楼等多种领域都广泛用到了视频监控系统。在视频监控系统的发展史上,主要出现了三种类型的视频监控系统。根据系统出现的年代先后顺序,这三种监控系统依次是基于模拟视频的电视监控系统,基
9、于数字视频的多媒体监控系统以及基于嵌入式技术的网络视频监控系统。前面两种技术己经发展的非常成熟,并且在实际工程中有着广泛的应用,而嵌入式监控系统则是以计算机网络技术和视频压缩技术为核心的一种新型数字视频监控系统。这类系统能够实时压缩采集到得视频数据,可以将数据通过网络传输到世界各地,实时性得到了很大的提高。嵌入式网络监控系统因为解决了模拟监控系统的部分弊端而得到了快速发展,但仍然需进一步的完善。与传统的模拟视频监控系统相比,嵌入式视频监控系统其具有体积小、携带方便、布控区域大等特点,具有良好的应用发展前景1。20世纪90年代末,随着嵌入式技术、图像处理技术、网络技术的迅速发展,基于嵌入式的网络
10、视频监控系统出现了。嵌入式系统是指以计算机技术为基础,以应用为目标,软件硬件可裁剪,适用于各个专业领域的专用计算机系统。嵌入式系统是由嵌入式处理器、外围的硬件电路、嵌入式操作系统以及应用程序等四个部分组成的,主要实现对其他设备或各种环境的控制以及管理等。基于嵌入式的网络视频监控系统的主要实现原理是:通过摄像头采集过来的模拟信号经过内部处理转换为数字信号,然后通过软件或者硬件将数字视频信号压缩,接着将压缩后的数字信号发送到网络或服务器上,经授权用户的可以在任意联网的PC机上实时得到监控数据。嵌入式网络视频监控系统极大的提高了系统的实时性以及稳定性,数据可以直接接入网络,只需一个授权的IP地址即可
11、远程监测。同时用户不需要专门的监视播放器,比传统视频监控系统容易实现的多,而且也价格便宜,易于扩展。正是由于这类监控系统具有易于使用、可靠稳定、经济实用等特性,使得它有很好的发展前景。本设计提出了以S3C2440芯片为处理器的嵌入式网络监控系统实现方案。该方案采用ARM硬件模块编码,软件解码播放相结合的方法实现视频图像的采集、编码、传输、解码、显示以及远程控制。本文首先分析了嵌入式网络监控系统的背景和意义,接着分析了视频监控系统的发展趋势,提出一种基于ARM的嵌入式网络监控系统的解决方案。接下来详细的介绍了视频监控系统中主要软件模块的设计方案。最后介绍了整个系统的集成测试结果。在一般的网络远程
12、监控实现方案中,客户只能被动的接收数据。在本设计中,客户可以通过网页主动要求数据的传输,改变监控图像的参数等。同时在本方案中,用户可以通过WEB控制模块来实现客户与服务器之间的互动,在客户端可以通过网页来完成视频监控的启动、参数设置、图像裁剪和伸缩处理等。该系统具有高性能、低成本、易安装、可扩展等优点,有着非常广泛的实用前景。 第1章 视频监控系统总体设计方案1.1 系统总体方案系统的总体设计方案,把系统设计分为硬件设计和软件设计两大部分,硬件设计部分主要介绍了S3C2440处理器模块,存储器模块,网络接口模块,USB接口模块。软件设计部分首先论述了嵌入式Linux系统的移植过程,接着讨论了嵌
13、入式Linux下USB摄像头驱动的实现,然后论述了视频图像的采集和网络传输过程,最后通过构建嵌入式WEB服务器的方法实现客户端的网络WEB访问功能。系统总体设计方案如下图所示:图 1-1 视频监控系统总体框图网络视频监控系统通常包括远程视频采集和本地视频查看及控制两部分,二者通过网络通信线路连接。涉及到视频图像采集、视频压缩、视频传输、计算机网络、视频解码及显示、多点控制等多方面内容和技术。本系统的总体结构见图1-1所示。ARM微处理器负责驱动加载、初始化等工作,并将图像帧压缩成视频帧通过以太网络发送至监控中心。同时,远程现场时刻保持与监控中心的通信:接收、解析、执行来自监控中心的指令,并向监
14、控中心发送反馈信息,如服务器退出时通知客户端断开连接等。监控中心负责将接收到的压缩视频进行视频存储、解码、显示等,并发送相应的指令信息,如连接请求或对远程端进行控制等。接收端的控制指令通过视频显示器中显示的用户界面进行操作,如通过鼠标对相关控件进行点击等2。上位机主要设计视频接收程序,视频解码程序,视频显示程序。本课题使用VC等开发工具来进行网页程序设计,程序设计主要包括整个系统的软件部分分成了六个模块:视频前端处理模块、视频采集模块、视频压缩编码模块、视频传输模块、视频解压显示模块、WEB控制模块。1.2 上位机设计方案上位机工作流程如下图所示:图1-2 上位机工作流程图上位机主要设计视频接
15、收程序,视频解码程序,视频显示程序!系统平台实现网络通信功能主要是和Internet的直接接入,在整个网络环境中,嵌入式平台这端作为服务器端,网络中连接的主机作为客户机。把作为服务器端的嵌入式平台上采集并经过JPEG压缩后的图像进行网络传输,客户机端进行接收、解压显示并可对摄像头实现远程控制。第2章 软件设计方案2.1 VC+简介Microsoft Visual C+是Microsoft公司推出的开发Win32环境程序,面向对象的可视化集成编程系统。它不但具有程序框架自动生成、灵活方便的类管理、代码编写和界面设计集成交互操作、可开发多种程序等优点,而且通过简单的设置就可使其生成的程序框架支持数
16、据库接口、OLE2,WinSock网络、3D控制界面。它以拥有“语法高亮”,IntelliSense(自动编译功能)以及高级除错功能而著称。比如,它允许用户进行远程调试,单步执行等。还有允许用户在调试期间重新编译被修改的代码,而不必重新启动正在调试的程序。其编译及建置系统以预编译头文件、最小重建功能及累加连结著称。这些特征明显缩短程式编辑、编译及连结的时间花费,在大型软件计划上尤其显著。Visual C+作为一个功能非常强大的可视化应用程序开发工具,是计算机界公认的最优秀的应用开发工具之一。Microsoft的基本类库MFC使得开发Windows应用程序比以往任何时候都要容易。1. 理解VC工
17、程Visual C+作为一种程序设计语言,它同时也是一个集成开发工具,提供了软件代码自动生成和可视化的资源编辑功能。在使用Visual C+开发应用程序的过程中,系统生成了大量的各种类型的文件,在本节中详细介绍Visual C+中这些不同类型的文件分别起到什么样的作用,在此基础上对Visual C+如何管理应用程序所用到的各种文件有一个全面的认识。首先要介绍的是扩展名为dsw的文件类型,这种类型的文件在VC中是级别最高的,称为Workspace文件。在VC中,应用程序是以Project的形式存在的,Project文件以.dsp扩展名,在Workspace文件中可以包含多个Project,由Wo
18、rkspace文件对它们进行统一的协调和管理。与dsw类型的Workspace文件相配合的一个重要的文件类型是以opt为扩展名的文件,这个文件中包含的是在Workspace文件中要用到的本地计算机的有关配置信息,所以这个文件不能在不同的计算机上共享,当我们打开一个Workspace文件时,如果系统找不到需要的opt类型文件,就会自动地创建一个与之配合的包含本地计算机信息的opt文件。上面提到Project文件的扩展名是dsp,这个文件中存放的是一个特定的工程,也就是特定的应用程序的有关信息,每个工程都对应有一个dsp类型的文件。以clw为扩展名的文件是用来存放应用程序中用到的类和资源的信息的,
19、这些信息是VC中的ClassWizard工具管理和使用类的信息来源。对应每个应用程序有一个readme.txt文件,这个文件中列出了应用程序中用到的所有的文件的信息,打开并查看其中的内容就可以对应用程序的文件结构有一个基本的认识。在应用程序中大量应用的是以h和cpp为扩展名的文件,以h为扩展名的文件称为头文件。以cpp为扩展名的文件称为实现文件,一般说来h为扩展名的文件与cpp为扩展名的文件是一一对应配合使用的,在h为扩展名的文件中包含的主要是类的定义,而在cpp为扩展名的文件中包含的主要是类成员函数的实现代码。在应用程序中经常要使用一些位图、菜单之类的资源,VC中以rc为扩展名的文件称为资源
20、文件,其中包含了应用程序中用到的所有的windows资源,要指出的一点是rc文件可以直接在VC集成环境中以可视化的方法进行编辑和修改。最后要介绍的是以rc2为扩展名的文件,它也是资源文件,但这个文件中的资源不能在VC的集成环境下直接进行编辑和修改,而是由我们自己根据需要手工地编辑这个文件。对于以ico,bmp等为扩展名的文件是具体的资源,产生这种资源的途径很多。使用rc资源文件的目的就是为了对程序中用到的大量的资源进行统一的管理。VC集成开发环境中集成了编辑器、编译器、连接器以及调试程序,覆盖了的开发应用程序的整个过程。VC不仅有编辑、编译、链接、运行、调试为一体的集成环境,还包括了Spy+消
21、息监测工具,ActiveX Control Test Container控件测试工具等。程序员无需脱离这个开发环境就可以开发出完整的应用程序。2. VC+主界面介绍VC+主界面是一个由窗口、工具条、菜单、工具及其他部分组成的一个集成界面,如图2-1所示。工作区窗口工具条主菜单文档窗口输出窗口 图2-1 VC+主界面图通过这个界面,用户可以在VC环境中创建、测试、调试和运行应用程序,界面的主要部分介绍如下。(1)工具条和菜单,用于提供用户操作的命令接口。菜单以文字和层次化的方式提供命令接口。图2-1中显示的主菜单栏,每一个主菜单下面有相关的二级菜单,可以选择二级菜单执行相应的功能,或是根据二级菜
22、单后显示的快捷键,在操作中直接使用工具条上的快捷按钮完成同样的功能。工具条由一系列按钮组成,使用工具条上的按钮与选择某一个二级菜单项执行同样的操作,但更加方便,默认情况下Standard工具栏自动打开,上面有文件操作、编辑操作等常用的15个按钮。(2)工作区窗口,这个窗口包含关于正在开发的这个项目的有关信息。VC+6以项目管理程序,每一个程序都应该属于一个项目,如果一个程序由多个文件组成,则这些文件都在同一个项目中,因此项目名与文件名可以不相同。当打开一个项目以后,工作区窗口将会显示关于当前项目的文件、类、和资源的信息。图2-1所示的项目名为ttt,包含1个名为例2-2.c的源文件,放在Sou
23、rce Files文件夹下,0个头文件(即Head Files文件夹下为空),0个资源文件(即Resource Files文件夹下为空)。(3)文档窗口区,这是编辑器所提供的编辑窗口。这个区域可以编辑、显示各种类型的文档,如源代码文件、头文件、资源文件等。可以同时打开多个文档,在图2-1的文档容器中打开了1个文件例2-2.c。实际上,在VC的文档容器中允许同时打开很多文件,用户可以选择其中一个作为当前编辑文件。(4)输出窗口,输出窗口用来显示几种信息,可以通过选择不同的标签显示不同的信息。这些信息有编译连接结果信息(Build标签)、调试信息(Debug标签)和查找结果信息(Find in F
24、iles标签)。其中,查找结果信息有两个标签,可以显示两次在文件中查找指定内容的结果。图2-1所示的输出窗口中显示的是项目ttt经编译和链接后生成了ttt.exe文件,没有错误和告警。2.2 基础知识和理论1. 嵌入式Linux系统 嵌入式 Linux 操作系统的特点及优势。 Linux 操作系统的最大优势就是其免费和源码开放性,同时其稳定性和可靠性也为大家所推崇。Linux 操作系统因为其开放性而得到相当大部分公司的支持,用户可以根据自己需要进行修改,还可以借助众多的网上资源和在线开发者,方便的获得所需技术支持。很多开发商本身并不希望在操作系统方案上受制于人而增加产品开发成本,因此源代码开放
25、的 Linux 是最好的切入点。Linux 具有最大的自由开发群。此外,由于其开放性使工程师可以对系统有更深入的了解,并能针对特定硬件方案和产品需求进行优化。目前在业界已经达成共识:即嵌入式 Linux 是大势所趋,其巨大的市场潜力与酝酿的无限商机必然会吸引众多的厂商进入这一领域3。 Linux 是一个类似于 Unix 的操作系统。起源于芬兰的一个名为 Linux Torvalds 的业余爱好者,但是现在己经是最为流行的一款开放源码的操作系统。Linux 从 1991 年问世到现在,在短短的十多年的时间已发展成为一个功能强大、设计完善的操作系统,伴随网络技术进步而发展起来的 Linux 系统己
26、成为 Microsoft 公司 Windows 系列产品的强劲对手。 Linux 系统不仅能够运行于 PC 平台,还在嵌入式系统中大放光芒。由于Linux 其自身的特点,在嵌入式系统领域可以说取得了飞速的发展,该操作系统有以下优势:(1)Linux 是开放源码的,不存在黑箱技术,遍布全球的众多 Linux 爱好者都是 Linux开发者的强大技术支持者,而其他嵌入式操作系统如 Windows CE, VxWorks 是非开放性的OS,使第三方很难实现产品的定制。(2)Linux 的源代码随处可得,注释丰富,文档齐全,易于解决各种问题。(3)Linux 的内核小、效率高,而 WindowsCE 在
27、这方面是笨拙的,占用过多的 RAM,应用程序庞大。(4)Linux 内核结构在网络方面是非常完整的,它提供了对包括十兆位、百兆位及千兆位的以太网络,还有无线网络、Token Ring(令牌环)和光纤甚至卫星的支持。(5)Linux 是开放源代码的操作系统,在价格上极具竞争力,适合中国国情。(6)Linux 在内核结构的设计中考虑适应系统的可裁减性的要求,使使用者可以按照自身的使用要求对内核进行裁减。(7)Linux 的可靠性高,可以说是经过验证,可以用在关键任务和场合的多应用的操作系统。比如说全世界的 Web 服务器,绝大多数都是 Linux 操作系统。我们每天通过 Web 浏览的时候,都是
28、24 小时运转的,足以证明 Linux 的可靠性。 Linux 内核对网络协议栈的设计是从简洁实用的角度出发,实现了一个较完整的网络协议集。在高层的网络协议中,Linux 支持 telnet 和 riogin 协议,Linux 还能提供对网络上其他机器内文件的访问(NFS,网络文件系统)。Linux 还可以支持 SLIP(Serial Line Interface Protocol)和 PLIP(Parallel Line Interface Protocol)协议,使得通过串口和并口线进行连接成为可能。另外 Linux 还支持 AX.25 协议、IPX 协议、AppleTalk、Samba等
29、网络协议。除此之外,Linux 对网络中最常用的 TCP/IP 协议提供了最完备的支持。Linux内核结构在网络方面是非常完整的,它提供了对包括十兆位、百兆位及千兆位的以太网络,还有无线网络、Token Ring(令牌环)和光纤甚至卫星的支持4。2.TCP/IP协议 TCP/IP是Transmission Control Protocol/Internet Protocol(传输控制协议/网际互联协议)的缩写。它是1978年1979年由美国国防部高级研究计划局开发的用于异构网络的通信协议,协议包含了远程登录(Telnet)、文件传送(F11P)、电子邮件(SMTP)等,适用于各种不同的计算机系
30、统的互联。TCP/IP是目前十分流行的一种网络协议,它可提供任意互连的网络间的通信,几乎所用的网络操作系统都支持TCP/IP协议。它是目前广泛使用的Internet的基础,虽然它不是国际标准,但事实上已成为计算机网络的工业标准。 TCP/IP通讯协议采用了4层的层级结构。每一层都呼叫它的下一层所提供的网络来完成自己的需求。这4层分别为: 应用层:应用程序间沟通的层,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等。 运输层:在此层中,它提供了节点间的数据传送服务,如传输控制协议(TCP)、用户数据报协议(UDP)等,TCP和UDP给数据包加入传输数据并
31、把它传输到下一层中,这一层负责传送数据,并且确定数据已被送达并接收。 网际层:负责提供基本的数据封包传送功能,让每一块数据包都能够到达目的主机(但不检查是否被正确接收),如网际协议(IP)。 网络接口层:对实际的网络媒体的管理,定义如何使用实际网络(如Ethemet、Serial Line等)来传送数据。 嵌入式Linux操作系统包括了TCP/IP网络协议栈,这样在整个网络环境中将嵌入式系统平台作为服务器端,网络中的其它主机作为客户机。应用层编程调用Linux套接字接ISl(SOCKET)实现TCP/IP通信。3. RTP 协议 视频信息的网络传输与文本数据等非实时信息的传输不同,它对实时性远
32、高于可靠性,当网络拥塞时,对于非实时传输而言,只是延长了传输时间,而对于视频传输,数据不能按时到达将导致难以忍受的视频服务质量。由于TCP是可靠的、面向连接的传输控制协议,需要较多的开销,不适合传输实时数据,为此IETF(Internet Engineering Task Force)的工作组制订了针对多媒体数据流的RTP(Real-time Transport Protocol,实时传输协议),它提供实时媒体数据端到端的传输服务。 RTP由RTP数据协议和RTCP(RTP Control Protocol,RTP控制协议)组成,RTP数据协议38负责实时媒体数据传输,它被定义在一对一或一对多
33、的传输情况工作,提供时间信息和实现流同步。RTCP负责控制实时媒体数据传输,提供可靠的传送机制、流量控制和拥塞控制。应用程序开始一个RTP会话将使用两个端口,一个给RTP,一个给RTCP,会话期间,各参与者周期性地传送RTCP包,RTCP包中含有已发送数据包的数量、丢失数据包的数量等统计资料,服务器将利用这些信息动态地改变传输速率,甚至改变有效载荷类型,所以,RTP和RTCP的配合使用能以有效的反馈和最小的开销使传输效率最佳化,可以较好的解决目前流媒体实时传输问题5。 RTP通常使用UDP进行多媒体数据的传输,但如果需要的话可以使用TCP或ATM等其它协议。 由于RTP和RTCP处于应用层,I
34、ETF(互联网工程任务组, The Internet Engineering Task Force)并没有为其提供一个统一的模块,而只是提供了一个协议框架,此框架覆盖了目前网络流媒体应用的绝大多数内容。此RTP和RTCP协议框架的代码实现必须建立在UDP/TCP层之上,把实时多媒体数据转化为RTP包,并产生RTCP包,同时具有收发RTP/RTCP包的功能, 并为上层的应用程序提供接口。 上层的应用程序主要是Linux下的Socket API,通常以RTP/UDP/IP的形式发送数据。实时传输协议RTP(Real-time Transport Protocol)是用于互联网上针对多媒体数据流的一
35、种传输协议,它主要为实时数据的应用提供点到点或点到多点的通信传输服务。RTP通常使用UDP来传送数据,RTP是在UDP封装之前多加了12字节的报文头。RTP协议主要包括两个部分:一部分定义RTP的数据报文格式(见图6.1) 和使用规则,主要是传送具有实时属性的数据; 另一部分为RTP控制协议(RTCP), 采用与数据包相同的分发机制,将控制包周期性地传输到所有会话参与者中,提供数据分发质量反馈信息,以制定流量控制策略6。 RTP的这些特点使它具有较好的实时性,在视频传输方面得到了广泛的应用。RTP通常使用UDP进行多媒体数据的传输,但如果需要的话可以使用TCP或ATM等其它协议4.MPEG-4
36、 简介 MPEG-4是一种压缩标准,国际标准化组织于1986年成立运动图像专家组MPEG(Motion Picture Experts Group),在1993年8月正式制定了MPEG-1,在1994年又发布了MPEG-2标准,1999年2月正式公布了为国际标准的MPEG-4(ISO/IEC14496)第一版本。同年年底,MPEG-4第二版亦告底定。MPEG-4使多媒体内容更多元化、更具有弹性,且多媒体组件更容易被再利用。它能将现今各自发展的技术及应用,如互联网、动画、视频、音频、交互电视等,整合至单一架构之下,进而提供更佳的资源管理方法和保护著作权的机能。因此,应用前景十分广阔。 MPEG-
37、4标准采用了基于对象的视频压缩编码方法,它不仅可以实现对视频图像数据的高效压缩,还可以提供基于内容的交互功能,支持对多媒体信息的内容访问,提供灵活的时域和空域扩展。除此之外,为了使压缩码流具有抗信道误码的特性,方便应用于带宽受限、误码易发的无线网络和Internet,MPEG-4还提供用于误码检测和误码恢复的一系列工具。 数字化视频采集与处理系统是嵌入式系统的典型应用,涉及嵌入式系统技术和视频图像信息的编码技术。特别是在视频图像信息的编码技术方面,为了提高系统的视频图像质量与通用性,国际通信联盟(ITU)为视频图像信息的压缩编码制定了很多标准,新的编码技术被迅速应用到图像与视频压缩上8。 JP
38、EG是目前最常用的图像压缩格式之一,广泛应用于图像信息的传递与存储领域,H.263和H.264是目前常用的视频压缩标准,可以在窄带信道上传递流畅的视频影像。应用JPEG格式可以进行图像压缩,如果想要进一步提高系统性能,可以考虑使用H.263来进行视频压缩。2.3上位机软件设计上位机程序流程图如下图所示: 图2-3 上位机程序流程图上位机的主要功能是向远程服务器发送连接请求,建立通信之后,实时接收视频数据并进行存储、播放。相关辅助功能有状态显示、时间显示、视频存档路径显示及设置、视频存档所在存储空间监控、压缩比远程设置、服务器IP地址显示及设置、退出及远程服务器连接。以下介绍主功能和部分辅助功能
39、的具体实现。上位机的结构和服务器端相似,设计了一个类CTCPSock对网络套接字的相关操作进行了封装,其提供的主要接口方法如下: bool Init(CHClientDlg*pDlg,DWORD inRemoteIP, int inRemotePort, HWND inwnd=NULL); bool Reconnect(void);Void Disconnect(void); Void SetCountWnd(HWNDinwnd); int Sendlnfo(unsigned int nMsgType);其中Init()接口方法主要进行网络套接字的相关初始化,主要工作有:将接口方法中所传递过来
40、的相关参数赋值给对应成员;通信协议的版本协商;创建客户端TCP套接字;创建退出和数据接收事件;远程套接字地址填充;连接远程服务器等。一旦与远程端服务器连接成功,Init()函数接下来会将套接字置为阻塞状态,并开启接收线程(该线程负责接收服务器端反馈的命令以及视频数据)。接收线程开启后,创建一个死循环。在循环内部,每次接收数据之前,先判断退出事件和数据接收事件,若退出事件有效则退出该循环,只有当退出事件无效并且数据接收事件有效时,该线程才不断接收来自服务器端的数据信息,并解析该信息。当解析到已接收完一帧数据(信息类型为DATA_AFRAME),则给主窗口发送一条数据准备好消息。接着由主程序对收到
41、的压缩视频数据进行存储、解压缩、显示等操作。解析结果为其他类型时程序会做出相应的处理13。Reconnect(void)接口方法为客户端暂停接收数据后,继续接收数据时所调用的接口方法。SetCountWnd(HWND inWnd)接口方法为数据帧计数传递一个窗口句柄,本系统中每接收到一帧数据,则会更新状态栏窗口中的帧的总数目。由于客户端向服务器端所发送的数据仅仅是通信消息,如:数据请求,断开请求,重连请求等。而不涉及其他诸如视频数据的发送,介于发送的数据包类型比较单一,设计了SendInfo(unsigned int nMsgType)接口方法来负责通信消息的发送。该类的使用流程见图2-3-1
42、。图2-4 CTCPSock类的使用流程图2.4上位机程序设计上位机服务器应用程序主要是完成图像数据的接收、显示和存储功能,同时也给终端发送简单的控制命令。这里不对其实现的具体过程进行详细的介绍, 主要进行两部分的说明:上位机完成网络连接和数据接收的部分,以及JPEG图像的解码和显示。上位机服务器网络连接和数据接收的实现服务器程序必须设置好sinport属性,作为侦听端口,该值为一个整数(只要是一个其它TCP/IP应用程序没有使用过的值即可)。使用“Listen方法进入侦听状态,等待客户机程序的连接请求。客户机程序发出连接请求,使服务器程序产生Connection Request事件,该事件得
43、到一个参数requestID。服务器程序用Accept方法接受客户机程序的requestID请求(Accept方法必须用上一步得到的requestID作为其参数)。这样,服务器程序就可以用SendData方法发送数据了。当服务器程序接收到数据时,产生OnRecvData事件,通过消息把包含接收到的数据的地址传进来。在该事件中,处理接受数据的保存和显示等。如果接受到Close事件,则用Close方法关闭TCP/IP连接。Socket还有两个重要的属性,即所用协议族(选用TPC/IP协议)和协议状态(设定使用的协议是TCP还是UDP),对应的设置在Socket类的建立是给以初始化。2.4.1 视频
44、数据接收端的实现视频数据接收端的主要功能是接受来自于TCP 端口的RTP 数据包,并将其还原成视频数据流。1. 数据包的接收数据包的接收过程比较简单,主要由一系列SOCKET编程接口的调用所组成,主要有以下几个过程:(1) 通过socket()调用创建TCP套接口。(2) 在指定的端口等待RTP数据包的到来。(3) 通过recvfrom()接受RTP数据包。(4) 将接收到的数据包放入缓冲区。2. 视频数据的重组因为进行数据的传输有可能会出现数据包的丢失与乱序。数据重组的主要目的就是在出现丢失和乱序时可以尽最大可能将接收到的数据恢复到它原来的状态。为了方便对数据进行重组,在数据包接收缓冲区之外
45、又设立了一个数据重组缓冲区,数据包的重组过程就在这个缓冲区中进行。 在考虑具体的重组方法前,先介绍一下MPEG-4的解码过程。因为MPEG-4 数据的解码是以VOP为单位进行的,多个VOP 的解码结果才构成一帧完整的图像,简单的说就是以流的形式进行的,而不是视频帧的方式。针对解码方式的这种特点采用比较特殊的数据重组方式。重组程序以5个VOP 为一个单位从RTP 数据包还原数据。为了尽可能降低抖动与延迟造成的数据包迟到带来的不利影响,在解码器缓冲区中只剩2个单位的VOP时才开始进行数据的重组过程。重组的基本方法是这样的:(1) 首先按照序号从小到大的顺序将接收缓冲区中的数据包插入数据重组缓冲区。
46、(2) 然后按照序号从小到大的顺序分析数据包,将载荷按照先后顺序拷贝到临时缓冲区中,直到缓冲区中有了5个完整的 VOP 为止。在拷贝过程中如果发现了数据包丢失,比如序号或时间戳不连续,分两种情况处理:第一种情况,缺失的数据包是单独的一个 VOP。这种情况比较好处理,单个 VOP 的丢失不会对其他 VOP 的解码产生影响,只会造成最终视频帧细节上的缺失,可以将该数据包忽略,直接处理下一个数据包。第二种情况,缺失的数据包是某个 VOP 的切分。对于这种情况不能简单的将其忽略,要向该数据包所占的位置填充足够数量的0来保持原有的VOP 结构,以便于 MPEG-4 解码器对该 VOP 解码时进行差错处理
47、。采用这样的一种重组方法,当 RTP 数据在传输中发生乱序时,可以在一定范围内恢复 RTP 数据包的原有顺序,降低数据包丢失与乱序对解码器的影响。以下是服务器端侦听连接和数据接收程序的部分源代码如下: /初始化Socket连接BOOL CTransDlg:InitSocket() m_sockct=sockct(AF_INET,SOCK_STREAM,0); SOCKADDR_IN addrSrv; addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY); addrSrv.sin_family=AF_INET; addrSrv.sin_port=htons(6000); bind(m_socket,(sockaddr*)&addrSrv,sizeof(SOCKADDR); listen(m_socket,5); return TRUE; /接受数据事件,有Socket类在接收数据后自动触发的事件void CTransDlg:OnRecvData(WPARAM wParam,LPARAM IParam) CString str=(char*)lParam; CString strTemp; GetDlgltemText(IDC_EDIT_RECV,strTemp); str+=rn; str+=