基于Qt的四路视频监控系统中客户端的设计与实现 - 图文

更新时间:2024-05-12 00:02:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

基于Qt的四路视频监控系统中客户端的设计与实现

学号: 2008840106

本 科 毕 业 论 文(设 计)

作者姓名 指导教师

段利艳

张永奎 康华 刘燕

所学专业 所属院系 学习年限

计算机科学与技术 信息学院 2008

年 9

月至

2012

年 7

班级

08 GB1

二○ 一二 年 六 月

目 录

内容提要 I

1. 引言 1 2. 开发平台介绍 1 2.1嵌入式系统介绍 1 2.2 硬件平台介绍

1

2.2.1 ARM产品简介 1 2.2.2 SC2400开发板介绍 2 2.3 软件环境 2

2.3.1 Qt Creator开发环境介绍 2 2.3.2 SDL开发包介绍 3 3. 系统需求分析 3 3.1 系统需求分析 3

3.2 可行性分析 3 3.2.1 技术可行性 4 3.2.2 经济可行性 4 3.2.3 操作可行性 4 4. 总体设计 4 4.1 系统总体结构设计 4 4.2 客户端UI界面设计 5

5. 详细设计 5

5.1 与服务器端的SOCKET连接 5.1.1 SOCKET连接过程 5 5.1.2 SOCKET创建模型 5 5.1.3 SOCKET创建代码 6 5.2 UI界面四路视频画面显示 7 5.2.1 Qt中用到的基本类的介绍 5.2.2 客户端UI设计 7 5.3 SDL层显示 10 5.5.1 SDL接口调用 10

5.3.2 双缓存显示机制 11

6.系统测试 11 6.1 系统运行环境 11

6.1.1 硬件配置 11 ? 客户端(PC机配置) 11 ? 服务器端(ARM板配置) 11 6.1.2 软件环境 11 6.2 测试环境 11

6.3代码测试与调试 12 6.4 系统运行测试 12

6.5 测试结果 12 结语

13

5

7

3

致谢 附录

14 14

16

参考文献

基于Qt的四路视频监控系统中客户端的 设计与实现

学生姓名:段利艳

指导教师:张永奎 康 华 刘 燕

内容提要 随着计算机设备的普及和Intenet的广泛应用,多路视频监控的嵌入式系统被运用到生活的各个方面。基于Qt的四路视频监控系统系统主要由数据采集、编码、解码、显示四大模块构成,采用C/S构架。本项目作为C/S构架中的客户端(Client),主要是实现把采集的视频数据经SDL解码后再终端显示。本项目以Qt为开发平台,基于C/S构架,采用socket编程,集数据连接、数据传输、数据显示于一体,界面设计简洁大方,功能清晰。

关键词 远程监控 LINUX C/S UI

I

山西大学商务学院本科毕业论文(设计)

1. 引言

随着计算机设备的普及和Intenet的广泛应用,近年来,远程监控技术在环境监测、工业控制等领域应用越来越广泛。在监控领域,集中了多媒体技术、网络技术等多种计算机技术应用。视频监控系统以其直观、方便、信息内容丰富广泛应用于许多领域。嵌入式视频采集以其小巧灵活、低成本和高性能的特点而独具优势。

本题结合Intenet技术和图像视频处理技术,开发一套嵌入式Linux的视频监控系统,实现了独立的嵌入式智能终端设备与Intenet的直接接入,通过网络与后台PC进行通信;在嵌入式智能设备终端上完成图像采集、存储等工作,并通过Intenet传输图像到后台PC。这样,前台作为视频服务器,进行数视频数据采集;后台PC作为客户端,进行数据加工和现实图像。此思路也正是网络视频服务器为核心的第三代全数字化远程视频集中监控模式的发展方向。 开发平台介绍 2.1嵌入式系统介绍

嵌入式系统是以应用为中心,以计算机技术为基础,并且软硬件可裁剪,适用于应用系统对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统。它一般由嵌入式微处理器、外围硬件设备、嵌入式操作系统以及用户的应用程序等几个部分组成,用于实现对其他设备的控制、监视或管理等功能。与传统的通用计算机、数字产品相比,嵌入式系统具有低功耗、体积小、集成度高、可靠性强、软件硬件可裁剪等特点,并且一般嵌入式系统本身不具备自举开发能力,即使设计完成以后用户通常也是不能对其中的程序功能进行修改,必须有一套开发工具和环境才能进行开发。

一个嵌入式系统装置一般都由嵌入式计算机系统和执行装置组成,嵌入式计算机系统是整个嵌入式系统的核心,由硬件层、中间层、系统软件层和应用软件层组成。执行装置也称为被控对象,它可以接受嵌入式计算机系统发出的控制命令,执行所规定的操作或任务。执行装置可以很简单,如手机上的一个微小型的电机,当手机处于震动接收状态时打开;也可以很复杂,如SONY 智能机器狗,上面集成了多个微小型控制电机和多种传感器,从而可以执行各种复杂的动作和感受各种状态信息。

嵌入式操作系统是嵌入式系统的核心,豳前常用的嵌入式搡作系统主要有:VxWorks、嵌入式Linux、Windows CE等,其中开放源代码的嵌入式Linux是应用最广泛的嵌入式操作系统之一。国外开展嵌入式Linux应用的研究较早,成果较多。例如,韩困三星公司己经率先推出了采用嵌入式Linux的掌上计算机概念样机,两美国网虎公司则推出了精简版嵌入式Linux系统Xlinux。在国内也有多家公司开展相关研究。中软总公司推出的嵌入式Linux3.0不仅满足了数控机床的需求,同时也可以应用于其他工业控制领域。另外还有华恒公司推出的嵌入式平台产品和红旗Linux等。可见,无论国内外,嵌入式Linux的研究都属于热点领域,而且对其本身的应用已经取得了可观的经济效益。 2.2 硬件平台介绍 2.2.1 ARM产品简介

ARM(Advanced RISC Machines),既可以认为是一个公司的名字,也可以认为是对微处理器的通称,还可以认为是一种技术的名字。ARM处理器是一个32位元精简指令集(RISC)处理器架构,其广泛地使用在许多嵌入式系统设计。据最新消息称,微软在2012年2月29日即将发布的消费者预览版Windows 8操作系统,将支持ARM系列处理器。Windows平板电脑时代即将到来。 ARM处理器特点:

体积小、低功耗、低成本、高性能;

支持Thumb(16位)/ARM(32位)双指令集,能很好的兼容8位/16位器件; 大量使用寄存器,指令执行速度更快; 大多数数据操作都在寄存器中完成; 寻址方式灵活简单,执行效率高; 指令长度固定。

1

基于Qt的四路视频监控系统中客户端的设计与实现

ARM处理器系列

ARM7系列、ARM9系列、ARM9E系列、ARM10E系列; SecurCore系列:Intel的Xscale、Intel的StrongARM ARM11系列。

其中,ARM7、ARM9、ARM9E和ARM10为4个通用处理器系列,每一个系列提供一套相对独特的性能来满足不同应用领域的需求。SecurCore系列专门为安全要求较高的应用而设计。 2.2.2 SC2400开发板介绍

SC2440 是一款真正低价实用的ARM9 开发板,它采用Samsung S3C2440 为微处理器,并采用专业稳定的CPU 内核电源芯片和复位芯片来保证系统运行时的稳定性。mini2440 的PCB 采用沉金工艺的四层板设计,专业等长布线,保证关键信号线的信号完整性,生产采用机器贴片,批量生产。其外观如图2.1所示:

图2.1 SC2440开发板外观 2.3 软件环境

2.3.1 Qt Creator开发环境介绍

Qt Creator是跨平台的 Qt IDE, Qt Creator 是 Qt 被 Nokia 收购后推出的一款新的轻量级集成开发环境(IDE)。此 IDE 能够跨平台运行,支持的系统包括 Linux(32 位及 64 位)、Mac OS X 以及 Windows。根据官方描述,Qt Creator 的设计目标是使开发人员能够利用 Qt 这个应用程序框架更加快速及轻易的完成开发任务。

在功能方面,Qt Creator 包括项目生成向导、高级的 C++ 代码编辑器、浏览文件及类的工具、集成了 Qt Designer、Qt Assistant、Qt Linguist、图形化的 GDB 调试前端,集成 qmake 构建工具等。 功能和优势:Qt Creator 主要是为了帮助新 Qt 用户更快速入门并运行项目,还可提高有经验的 Qt 开发人员的工作效率。

本次开发位于Linux环境下,开发工具使用Qt creator 4.7.1版本。

2

山西大学商务学院本科毕业论文(设计)

2.3.2 SDL开发包介绍

SDL(Simple DirectMedia Layer)是一个自由的跨平台的多媒体开发包,适用于 游戏、游戏SDK、演示软件、模拟器、MPEG播放器和其他应用软件。其中包含了对图像、声音、线程等的支持,且可在多种平台上运行。

因为SDL专门为游戏和多媒体应用而设计开发,所以它对图形的支持非常优秀,尤其是对高级图形的能力,比如Alpha混合、透明处理、YUV覆盖、Gamma校正等等。而且在SDL环境中能够非常方便的加载支持OpenGL的Mesa库,从而提供对二维和三维图形的支持。

本系统客户端接收到的视频解压后为YUV格式,考虑到SDL在YUV覆盖方面的优势,我们选择SDL实现视频信息接收解压后的显示。 3. 系统需求分析 3.1 系统需求分析

视频监控技术,随着计算机、编解码、网络传输技术的发展,目前正朝着数字化、智能化、IP化、网络化继续发展。同时视频监控同其他技术相结合,产生了许多新的应用,这有助于满足不同视频监控用户的需求。

(1)视频监控数字化

视频监控发展经历了模拟视频监控、半数字监控、数字监控三个阶段。对于视频监控,数字化存储带来的是一场革命性的变化。数字化是21世纪的时代特征,视频监控的数字化是监控技术的必然趋势。 (2)视频监控智能化

智能化是视频监控技术发展比较高级的层次。由于视频监控的数据量非常大,而用户真正需要的信息只是少部分,或者说真正需要监视的只是发生概率很少的某些事件,如何通过海量数据获取有价值的信息或者说如何从目视解释变为机器自动解释是视频监控技术发展的一个新方向。因为能把视频监控从静态的、事后取证变成动态的、实时预防和报警对用户来说显得更加重要。实际上现有的监控系统都配置有如自动位移侦测、昼夜自适应切换存储、预警设置(如可疑人物照片、指纹等)等一些低级形式的智能化功能。随着技术的发展,全智能的监控系统将要求事发前能够识别并作出正确的判断,为人们提供最为有效、及时的快速反应措施。 (3)视频监控IP化

视频网络、IPTV等都是网络快速发展的重要应用。随着Internet技术的发展,基于IP的视频监控更能为人们所接受,网络摄像机把压缩的视频信息通过TCP/IP协议,采用流媒体技术实现视频在网上的多路复用传输,拥有授权的用户可以随时访问互联网,实现对整个监控系统的指挥、调度、存储、授权控制等功能。鉴于IPv6在服务质量、网络性能、安全性改善提高一级IPv6对下一代Internet网络的影响,基于IP的视频监控将会成为主流。 (4)视频监控无线化

无线化包括两方面内容:一是监控中心的移动,通常情况下,被监控对象或是摄像机往往是固定的。而作为监控系统的使用者(监控中心)则可以是动态的,当公司领导出差在外,需了解公司生产情况时,可使用笔记本随时随地访问摄像机的IP获取信息。二是视频监控网络的无线化,随着无线宽带网络发展,基于3G的无线视频应用备受关注。当监控点分散且与监控中心距离较远,或被监控对象不固定(如出租车、运钞车等)时,利用传统有线网络的视频监控对象往往成本高且难以实现,而基于多种无线传输手段的移动视频监控实现了不可替代的优势。 3.2 可行性分析

使用嵌入式系统实现远程视频监控技术,符合网络化数字化的特点,对公安、安防等行业有着重要的现实意义。视频监控系统一般采用基于PC机平台+视频采集卡的形式,该方案系统体积大、成本高,在远距离、多点系统中实现困难。本课题所设计的系统成本低,操作简易,安装方便,即插即用,体积小巧。整个系统采用ARM9处理器S3C2440作为系统核心,外接红外触发开关,可以检测例如人,动物

3

基于Qt的四路视频监控系统中客户端的设计与实现

等并启动视频监控。 3.2.1 技术可行性

软件平台由三部分组成:系统引导加载程序、嵌入式Linux内核、文件系统及应用程序。嵌入式操作系统采用Linux,开发模式采用最为普遍的宿主开发模式,即在宿主机上编译内核及应用程序然后通过网口下载到目标平台上运行,通过打印终端打印调试信息。文件系统是嵌入式系统软件平台占用存储量最大的一部分,它存储了系统配置文件、系统程序和系统外设驱动程序。嵌入式Linux内核移植好后,主要工作就变成在操作系统下编写驱动程序。

系统主要由视频采集和传输部分组成。有嵌入式处理器、CMOS图像传感器、存储器、以太网接口。嵌入式处理器是韩国三星公司的基于ARM920T内核的16/32 位RISC嵌入式微处理器(型号:S3C2440),主要面向高性价比、低功耗的应用。为了处理图像数据,CPU的工作频率可达400MHz。S3C2440的资源包括LCD控制器,SDRAM控制器,摄像头接口,3路串行接口,IIC BUS接口,USB接口,触摸屏接口。在处理器丰富资源的基础上,还进行了相关的扩展,配置了256M Flash ROM和64MB SDRAM。在嵌入式处理器的控制下,CMOS图像传感器(片上)采集到的数据经帧同步信号触发产生中断后被拷贝到SDRAM,经过MPEG-4编码后由网口发送到远端监控中心显示。 3.2.2 经济可行性

经济可行性主要是对项目的经济效益进行评价。Linux的低成本和开放性,使其广泛应用于嵌入式系统领域。本系统客户端运行于LINUX上,而服务端运行于高性价比的SC2440的arm开发板上。 3.2.3 操作可行性

本项目开发工具为Qt Creator,作为用户终端监控平台,对本系统界面有跨平台的要求;作为网络监控手持终端,要求本系统界面能在嵌入式系统上运行。因此选用Qt编写本业务监控系统图形界面。Qt是一个多平台的C++图形用户界面应用程序框架。它完全面向对象,有良好的封装机制,模块化程度高,可重用性好,容易扩展,允许真正的组件编程,提供给应用程序开发者建立艺术级图形用户界面所需的功能,提供了信号储机制替代回调函数,使组建间信号传递更安全、简单。它拥有强大类库,而且具有一个包括Qt设计者、语言学家和详细联机开发文档的跨平台开发环境。 4. 总体设计

4.1 系统总体结构设计

系统软件主要有两部分:系统构建模块和软件监控模块。系统构建模块包括U。BOOT的移植、linux2.6内核的移植及相关驱动程序的移植和开发(包括网卡、LCD显示屏、USB系列设备等)、根文件系统的构建和Qt用户接踞的移植。软件监控模块包括USB视频采集模块、LCD显示模块、服务端程序模块、控制端模块和网络模块。控制端可以PC机为主,也可采用另外一台ARM架构的设备为主,通过浏览器来监控与操控服务端。本系统通过网络实现客户端(PC机)与服务端(ARM9开发板)进行通信;在服务端ARM开发板直接连接摄像头,完成图像采集、编码、存储等工作,并通过Intenet传输图像到客户端PC。PC机中运行客户端界面,将解码后的帧经SDL处理后再Qt开发的窗口中显示。具体过程如图4.1所示:

图4.1 功能模块图 层显示 SDL4

Socket通信 LINUX (PC) 数据传输 C 数据解码 S 数据编码 SC2440 (ARM) 视频采集数据 Uboot移植 UI界面显示 山西大学商务学院本科毕业论文(设计)

4.2 客户端UI界面设计

在四路视频监控系统中,客户端运行于LinuxPC机上。在此客户端中,实现的功能有:与服务器的连击、监控点的选择、视频画面展示等功能。视频画面显示采用双缓存显示机制,保证视频画面质量。具体功能如下图显示:

提高视频显

图4.2 UI界面功能图 详细设计

5.1 与服务器端的SOCKET连接

所谓socket通常也称作\套接字\,应用程序通常通过\套接字\向网络发出请求或者应答网络请求。socket用于描述IP地址和端口,是一个通信链的句柄。在Internet上的主机一般运行了多个服务软件,同时提供几种服务。每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务。 5.1.1 SOCKET连接过程

根据连接启动的方式以及本地套接字要连接的目标,套接字之间的连接过程可以分为三个步骤:服务器监听,客户端请求,连接确认。

服务器监听:是服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态。

客户端请求:是指由客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。

连接确认:是指当服务器端套接字监听到或者说接收到客户端套接字的连接请求,它就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,一旦客户端确认了此描述,连接就建立好了。而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。 5.1.2 SOCKET创建模型

Server-Client模型的程序的开发原理如图5.1所示:

Socket() 5

客户端UI界面 与服务器端的SOCKET连接 UI界面四路视频画面显示 SDL层显示 连接选择 画面显示 IP设置 双缓存显示 示质量

基于Qt的四路视频监控系统中客户端的设计与实现

Write() Read() Bind() Socket() Conect() Listen() Accept() 建立连接 发送数据 接收数据 Read() Write() Close() Close() 图5.1 Socket编程模型

服务器,使用Server_Socket监听指定的端口,端口可以随意指定(由于1024以下的端口通常属于保留端口,在一些操作系统中不可以随意使用,所以建议使用大于1024的端口),等待客户连接请求,客户连接后,会话产生;在完成会话后,关闭连接。

客户端,使用Socket对网络上某一个服务器的某一个端口发出连接请求,一旦连接成功,打开会话;会话完成后,关闭Socket。客户端不需要指定打开的端口,通常临时的、动态的分配一个1024以上的端口。

Socket接口是TCP/IP网络的API,Socket接口定义了许多函数或例程,网络的Socket数据传输是一种特殊的I/O,Socket也是一种文件描述符。Socket也具有一个类似于打开文件的函数调用Socket(),该函数返回一个整型的Socket描述符,随后的连接建立、数据传输等操作都是通过该Socket实现的。 5.1.3 SOCKET创建代码 客户端Socket创建

int open_clientsock(char * address, int port) {

struct sockaddr_in servadr; int client_handle;

/* Create a new socket */

if ((client_handle = socket (AF_INET, SOCK_STREAM, 0)) == -1) exit_fatal (\ initaddr (&servadr,address,port);

if (connect(client_handle,(struct sockaddr *) &servadr, sizeof (struct sockaddr)) == -1) }

客户端Socket关闭 void

close_sock (int sockhandle) {

6

exit_fatal (\

return client_handle;

山西大学商务学院本科毕业论文(设计)

close (sockhandle); }

Socket接收消息

Int read_sock (int sockhandle, unsigned char *buf, int length) {

int byte_read = -1; unsigned char *ptbuf =buf; int mlength = length; int i = 0; do {

byte_read = read (sockhandle, ptbuf,mlength); if (byte_read > 0) {

ptbuf = ptbuf+byte_read; mlength = mlength-byte_read;

} i++;

if(i > 10000) return -1;

} while (mlength > 0); return (mlength); }

Socket发送消息

Int write_sock (int sockhandle, unsigned char *buf, int length) {

int byte_send = -1;

byte_send = write (sockhandle, buf, length); return (length - byte_send); }

5.2 UI界面四路视频画面显示 5.2.1 Qt中用到的基本类的介绍

Qt是一个1991年由奇趣科技开发的跨平台C++图形用户界面应用程序开发框架。它既可以开发GUI程式,也可用于开发非GUI程式,比如控制台工具和服务器。Qt是面向对象语言,易于扩展,并且允许组件编程。

Qt拥有十分强大的类库,拥有400多个面向对象的类,它们带有大多数构建跨平台服务器与客户端程序的底层基础构造函数。Qt的类库可以分成三部分:组件(Components)、框架(Framework)、效用工具(Util.ities)。其中组件包括环境、主窗VI和相关类、标准对话框、基本窗VI部件、高级窗VI部件、组织者及帮助系统;框架包象、模型、抽象窗VI部件、图形和打印、拖放、窗VI部件外观和布局管理;效用工具包括通用工具类、图像处理、日期与时间、I/O处理和杂项。在程序设计中最常用的类包括QObject、QApplication、QWidget、QMainWindow、QI.ayout、QEvent等 。 5.2.2 客户端UI设计

通过QT 设计器,将所要用到的菜单、窗口进行设计实现。Qt 设计器支持一种基于工程的程序设计方法。首先创建一个工程(.pro后缀的文件),有了该工程文件就可以用利用QT提供的工具qmake来生

7

基于Qt的四路视频监控系统中客户端的设计与实现

成makefiles用于编译链接。菜单、窗体设计被保存成XML格式的.ui文件并且被uic(用户界面编译器)转换成为C++头文件和源文件。利用QT设计器完成的菜单、窗体设计只是个界面架构。其完成的特定功能还需要编程实现。在窗体的.ui 文件中,可以通过增加新的功能函数实现其特有的功能。界面设计框架如图5.2所示:

图 5.2 界面设计框架

整个GUI 系统只有一个GUI进程作为主进程,其他非GUI进程通过QThread在GUI进程中创建新的子进程实现相应的功能。该窗口实现类如下所示: class MainWindow : public QMainWindow {

Q_OBJECT public:

explicit MainWindow(QWidget *parent = 0); ~MainWindow();

private slots: void setting(); private:

Ui::MainWindow *ui;

QAction* settingAct; QMenu* fileMenu;

QFrame* centralFrame;

8

山西大学商务学院本科毕业论文(设计)

QGridLayout *gridlayout;

QVector videos; QVector threads; };

本窗口进程通过启用线程来调用程序使得窗口显示画面,调用实现如下代码所示: CamThread::CamThread(long camID,long winID) {

_camID = camID; _winId = winID; }

void CamThread::run() {

sleep(1);

char buff[128]={0};

QSettings settings(QString(\ sprintf(buff,\

char* value = settings.value(buff, \

sprintf(buff,\ _stream= popen(buff,\ exec(); }

每个窗口可以进行IP设置,根据所监视服务器IP地址设置监控连接,实现效果如图5.3所示: 代码设置如下: namespace Ui {

class SettingDialog; }

class QGridLayout; class QLineEdit;

class SettingDialog : public QDialog {

Q_OBJECT 图 5.3 IP设置界面 public:

explicit SettingDialog(QWidget *parent = 0);

9

基于Qt的四路视频监控系统中客户端的设计与实现

~SettingDialog();

void LoadSetting(); void SaveSetting(); private:

Ui::SettingDialog *ui; QGridLayout* gridlayout; QLineEdit* edit0; QLineEdit* edit1; QLineEdit* edit2; QLineEdit* edit3; };

SDL层显示 5.5.1 SDL接口调用

SDL在Linux平台下的接口:

视频显示使用X11,利用XFree86 DGA扩展的优势,全屏显示使用新的w MTRR加速。 声音使用OSS API。

使用clone()系统调用和SysV IPC,或者glibc-2.1的pthreads实现线程。

通过SDL_GetWMInfo()取得SDL驱动接口的隐藏部分,从而可以实现诸如去除窗口要素和图标化窗口等效果。

SDL库分为 Video、Audio、CD-ROM、Joystick 和 Timer 等若干子系统,除此之外,还有一些单独的官方扩充函数库。这些库由官方网站提供,并包含在官方文档中,共同组成了SDL的“标准库”: SDL_image—支持时下流行的图像格式:BMP、PPM、XPM、 PCX、GIF、JPEG、PNG、TGA。 SDL_mixer—更多的声音输出函式以及更多的声音格式支持。 SDL_net—网络支持。

SDL_ttf—TrueType字体渲染支持。 SDL_rtf—简单的RTF渲染支持。

本客户端留出接口,另外启用线程调用SDL层在客户端界面显示视频。具体实现如下: class SDLTestThread { public:

SDLTestThread(long winID);

long _winId; FILE* _fId; };

SDLTestThread::SDLTestThread(long winId) {

_winId = winId;

if(1){

SDL_Thread *thread;

10

山西大学商务学院本科毕业论文(设计)

thread = SDL_CreateThread(thread_func, this); if ( thread == NULL ) {

fprintf(stderr, \无法创建线程: %s\\n\ return; }

//SDL_WaitThread(thread, NULL); } }

5.3.2 双缓存显示机制

本客户端启用线程调用SDL显示,在窗口画法中加入双缓存机制,提高在客户端窗口中的显示速度,从视觉上保证显示质量! Try { {

std::cerr << \ SDL_Quit(); return -1; }

SDL_Flip实现见附录! 6.系统测试 6.1 系统运行环境 6.1.1 硬件配置 客户端(PC机配置)

处理器:Inter Pentium 4 1.6GHz或更高 内存:1G以上 硬盘空间:80GB 显卡:VGA显示适配器 操作系统:LINUX CentOS5 服务器端(ARM板配置) ARM9开发板:SC2440 摄像头: 6.1.2 软件环境

开发系统:LINUX CentOS5 开发工具:Qt Creator 4.7.1

环境配置包含库:SDL库、ffmpeg库、V4L库 6.2 测试环境

操作系统:LINUX CentOS5 工具包:Qt Creator 4.7.1

11

if ( SDL_Flip(pScreen) != 0 ) // Show the SDL window's surface. throw SDL_GetError();

}

catch ( const char* s )

基于Qt的四路视频监控系统中客户端的设计与实现

6.3代码测试与调试

应用程序的调试在一个应用软件的开发中尤其重要,Qt Creator 4.7.1程序设计语言提供了一个功能强大的内置调试器,它主要包括断点、中断表达式、监视表达式、通过代码一次经过一个语句或一个过程、显示变量和属性的值。Qt Creator 4.7.1程序设计语言还可在运行过程中进行编辑、设置下一个执行语句以及在应用程序处于中断模式是进行过程测试等。

程序的调试主要是有助于了解在应用程序运行时正在发生的事情。调试工具提供了应用程序当前状态的快照,包括程序的用户界面的外观;程序运行时,过程中的变量、表达式和属性的值;过程如何被调用、调用的顺序及过程运行的结果。 6.4 系统运行测试

首先连接上摄像头,以此模拟真实的监控环境来完成测试。在测试的过程中出现了一些问题,在测试中产生异常,如变量未定义、出现二意性名称等,以及出现在调试过程中的一些错误,经过反复的修改代码,按照Qt Creator 4.7.1程序设计语言提供的错误信息,最后调试成功。 6.5 测试结果

通过利用摄像头来测试视频监控系统应用程序,根据结果可知视频监控系统基本可以实现对视频信息的采集存储和录制等操作,通过界面设置选项还可以对监控界面进行操作。四路视频可以稳定在客户端显示,画面清晰。测试结果如图6.1所示:

图6.1 系统测试结果

12

山西大学商务学院本科毕业论文(设计)

结语

短暂而又宝贵的毕业设计就要结束了。终于在大家的帮助下,通过自己的努力把毕业设计完成了。在当中我对它有了新的认识和了解。在本次设计的全过程中,涉及了各方面的知识,大大扩展了我的知识面,同时使我学会了如何使用所学的知识去解决一些实际的问题。

本系统完成初步的数据采集、编码、传输、解码、显示的工作,作为客户端的UI模块,能保证视频画面清晰流畅,界面友好,与服务端连接稳定。本客户端最大的优点就是视频显示采用双缓存机制,这样可以提高视频显示质量,在直观上不会造成画面中断,提高性能!但是,由于时间仓促和自己所学限制,本客户端界面设计不够华美,许多可扩展的功能没有在此界面中实现。

本次设计,仅仅是一个基于四路的视频监控,在以后可以作为多路视频监控去扩展和改进,还有界面设计不是很精致,可以再润色使其更加美观。本客户端只是实现了基本的视频画面显示、监控IP设置等功能,以后的扩展时可以增加画面截图、视频保存等等相关操作。

在这次的设计中我学到了很多书本上学不到的东西,使我受益非浅。使自己的动手能力得到很大提高。就要走出校门了,因此我对这次锻炼的机会很珍惜。

13

基于Qt的四路视频监控系统中客户端的设计与实现

致谢

在本次毕业设计中,我从指导老师张永奎老师、康华老师、刘燕老师身上学到了很多东西。他们认真负责的工作态度,严谨的治学精神和深厚的理论实践水平都使我们深感敬佩。他们无论是在理论上还是在实践中,都给予我很大的帮助,使我得到不少的提高,尤其是他们的责任心和为人师表所具备的爱心,在这次毕业设计表现无疑。这对于我以后的学习和工作都是一种帮助,感谢他们细心又耐心的辅导。还有我的班主任以及我的同学对我的帮助,只有他们的帮助我才能更好的完成本次的毕业设计。还要感谢我的家人,谢谢他们对我的支持和关心。 附录 /*

* Performs hardware double buffering, if possible, or a full update if not. */

int SDL_Flip(SDL_Surface *screen) {

14

SDL_VideoDevice *video = current_video; /* Copy the shadow surface to the video surface */ if ( screen == SDL_ShadowSurface ) {

SDL_Rect rect;

SDL_Palette *pal = screen->format->palette; SDL_Color *saved_colors = NULL;

if ( pal && !(SDL_VideoSurface->flags & SDL_HWPALETTE) ) {

/* simulated 8bpp, use correct physical palette */

山西大学商务学院本科毕业论文(设计)

saved_colors = pal->colors; if ( video->gammacols ) { /* gamma-corrected palette */ pal->colors = video->gammacols; } else if ( video->physpal ) {

/* physical palette different from logical */ pal->colors = video->physpal->colors;

}

}

rect.x = 0; rect.y = 0; rect.w = screen->w; rect.h = screen->h;

if ( SHOULD_DRAWCURSOR(SDL_cursorstate) ) { SDL_LockCursor();

SDL_DrawCursor(SDL_ShadowSurface); SDL_LowerBlit(SDL_ShadowSurface, &rect,

SDL_VideoSurface, &rect);

SDL_EraseCursor(SDL_ShadowSurface); SDL_UnlockCursor();

} else {

SDL_LowerBlit(SDL_ShadowSurface, &rect,

SDL_VideoSurface, &rect);

}

if ( saved_colors ) { pal->colors = saved_colors; }

/* Fall through to video surface update */ screen = SDL_VideoSurface;

}

if ( (screen->flags & SDL_DOUBLEBUF) == SDL_DOUBLEBUF ) { SDL_VideoDevice *this = current_video;

return(video->FlipHWSurface(this, SDL_VideoSurface)); } else {

SDL_UpdateRect(screen, 0, 0, 0, 0);

} return(0);

}

15

基于Qt的四路视频监控系统中客户端的设计与实现

参考文献

[1] 黄柏素译.软件工程实践者的研究方法(第五版).机械工业出版社,1998.110-112. [2] 王立福,张世琨,朱冰.软件工程——技术、方法和环境.北京:北京大学出版社,1997. [3] 邱玉辉总编.电脑报2000 合订本.重庆:西南师范大学出版社,2001:358. [4] 张海藩编著.软件工程.人民邮电出版社,2003.5:113. [5] 贾赞.Linux下的C编程.北京:人民邮电游版社,2001,205~207. [6] 张友生,远程控制编程技术.北京:电子工业出版社,2002, 60—63

[7] Karim Yagbmour, 构建嵌入式LINUX系统,O’Riny Taiwan公司,2004,140~143.

[8] 陈赜,ARM9嵌入式技术及Linux高级实践教程.北京:北京航天航空大学出版社,2005,38--4l. [9] 韦锦出,网络视频监控系统的新发展.通信世界,2002,90(5):104~105. [10] 沈连丰,嵌入式系统及其开发应用.北京:电予王业趱舨社,2005,59-60.

Abstract: pularity of computer equipment and the wide application of Intenet, multichannel video monitoring embedded system has been used to all aspects of life. The four way video monitoring system which is based on Qt , consists of data acquisition, encoding, decoding, display of four modules, and use the C / S architecture. This project, as a C / S framework client (Client), is the realization of the video data acquisition by SDL decoding and display terminal. Based on C / S structure ,it uses Qt as the development platform, and sets socket programming, data connection, data transmission, data display in one,. what’s more the interface design which has clear function is simple and generous.

Keywords: remote monitoring,LINUX C/S UI

16

山西大学商务学院本科毕业论文(设计)

17

本文来源:https://www.bwwdw.com/article/kq6g.html

Top