刘 艳,王雪梅,陶 骏,汪 为,万家山
(安徽信息工程学院,安徽芜湖 241000)
交通运输部于2017年12月19日发布的研究报告显示,2017年由交通事故造成的死亡人数约6.3万。遏制交通事故高发、降低事故伤害任重道远。事故发生后,往往难以调查事故的责任,视频图像成为解决这个问题最直观的方法:如果能对事故现场的场景进行回放,就可以为调查提供有力的证据。
在这种情况下,本文提出视频监控的概念,它可以对被关注对象进行监控和管理。视频监控系统的发展经历了三个不同的阶段,即第一阶段的模拟视频监控系统、第二阶段的数字化监控系统和第三阶段的网络视频监控系统。(1)模拟视频监控系统。使用模拟设备,以本地闭路电视监控系统(CCTV:Closed Circuit TV)为例,主要设备包括摄像机、录相机、监视器等,而传输主要采用电缆或光缆。其主要缺点为:有限的地理传输范围,与信息系统无法交换数据,监控仅仅应用于监控中心,灵活性较差。(2)数字化监控系统。出现在20世纪90年代中期,是伴随计算机处理能力的增强以及视频压缩技术的发展而产生的。由于引入高计算性能的计算机对采集到的模拟信号进行压缩处理,图像质量比第一代产品明显提高。其主要缺点为:传输范围有限,系统的建设成本高,可维护性较差。(3)网络视频监控系统。20世纪90年代末,随着网络带宽的增大、计算机性能的提高以及嵌入式芯片的发展,网络视频监控系统时代到来。网络视频监控系统与上两代系统相比具有可维护性强、扩展能力良好、功能强大、灵活性高的优势,但仍然存在以下缺点:在网络上以明文传输视频流,安全性差;使用MPEG4而不是H.264来压缩视频图像,具有优化的空间;系统的可扩展性不强。
针对上述视频监控系统的局限性,本文提出一种基于C/S模式的远程视频监控系统。首先,使用硬件设备加解密传输的视频信息,可以保障传输内容的安全性。其次,运用H.264标准对视频流进行编解码,能够得到较高的数据压缩率和高质量的图像。第三,可以设置视频流的来源为远程或者本地视频流,切换为普通的视频监控系统,具有较好的可定制性。
董向华[1]提出了网络视频监控系统的基本原理及概念,分析了其特点及总体结构,并对网络视频监控系统进行了初步的设计和实现。网络视频监控系统由图像监控服务器和客户端组成。图像监控服务器是网络视频监控系统的数据处理中心,客户端是指安装监控软件的台式机或笔记本电脑。余腊生[2]提出了一种由分析单元、中心服务器和客户端组成的智能视频监控系统的架构方案。通过对定标、DirectShow、TCP/RTP以及Xvid等关键技术在智能视频监控系统的三个组成部分中作用的介绍来说明系统的设计方案,同时指出了实现自动视频分析的各种关键技术和方法。张雅楠[3]结合移动网络、Java语言和Eclipse开发编辑工具,设计了基于Android智能手机的视频监控系统;对系统的整体结构进行了分析和阐述,在此基础上给出了系统服务器端与客户端的设计流程。魏崇毓[4]介绍了Android系统软件平台在视频监控系统设计中的应用,包括系统的功能需求和Android应用开发过程中的技术要领。在此基础上,利用Java语言和Eclipse开发编辑工具,设计完成基于Android平台的智能手机对网络视频监控系统中的特定服务器的访问。任克强[5]设计并实现了基于Android平台的实时视频监控系统,介绍了视频监控系统的组成,重点论述了视频监控系统主要模块设计以及RTP/RTCP协议重组优化方案;并以PC机作为服务器采集实时视频,选取Android手机和Android平板电脑作为不同的客户端,分别在移动3G网络和WLAN网络环境中对系统进行了测试。杨飞[6]提出了基于Android智能终端的移动视频监控系统,介绍了整个视频监控系统的体系结构,阐述了如何在两个Android终端之间实现移动视频监控,并且根据视频采集方式的不同介绍了两种不同的视频监控方案;在无线局域网的环境下对视频监控系统进行测试,并对两种方案测试结果差异性的原因进行了分析。
系统需求分析是定义系统功能不可缺少的部分。开发人员经过深入细致的调研和分析,准确理解用户和项目的功能、性能、可靠性等具体要求,将用户非形式的需求表述转化为完整的需求定义,从而确定系统必须做什么。
某些单位运输的物资具有保密性质,管理站点要对运输车的周边和车内的实时状况进行监控。监控图像传输过程中需要进行加密和解密,以保障其安全性,防止被破解。当运输车出现故障时,应能准确定位地理位置信息,及时进行营救。因此,要对运输车在行驶过程中的温度、湿度和速度进行监控,以及时了解车内的实际情况。下面根据项目背景整理得到项目的功能和非功能需求。
UML是“统一建模语言”的英文缩写,是一种支持模型化和软件系统开发的图形化语言,为软件开发的所有阶段提供模型化和可视化支持。因其简单、统一的特点,而且能表达软件设计中的动态和静态信息,目前已成为可视化建模语言的工业标准。使用UML对系统的功能需求进行分析,得到系统有视频监控、音频监控、抓图、录像、数据监控、定位展示、查询回放、系统配置、介绍产品等功能。
(1)视频监控:用户登录后,系统默认展示视频监控的界面。系统按照配置参数、1画面、2画面、4画面、9画面、16画面、25画面等展示监控的窗口。
(2)音频监控:用户登录后,系统展示视频监控界面的同时,可以在界面上播放音频。
(3)抓图功能:用户在进行视频监控时,可以右击视频监控界面,选择对感兴趣的界面进行抓图。系统将当前的界面截图存放到文件夹下。
(4)录像功能:用户在进行视频监控时,可以右击视频监控界面,选择对感兴趣的界面进行录像。用户选择停止录像时,系统将录制的视频存放到文件夹下。
(5)数据监控:用户登录后,进行数据监控,选择时间范围(开始时间和结束时间)。系统将采集到的温度、湿度、速度以曲线和表格展示出来。
(6)定位展示:用户登录后选择定位展示,系统将车辆周围的地理位置和经纬度信息和行驶路径展示出来。
(7)查询回放:用户登录后选择查询回放,系统将所有已录制的视频文件展示出来。用户选择视频进行播放,系统使用播放器播放该视频文件。
(8)系统配置:用户登录后选择系统配置,系统展示所有的配置选项,包括服务器配置、主题配置、画面管理、截图和录像的保存位置、音视频配置等。
(9)关于产品:用于登录后选择“关于产品”,系统展示产品的简介、版权和版本信息。
(1)客户端一般响应时间不超过1秒。
(2)支持200个客户端的并发使用,并保证性能不受影响。
完成系统的需求分析阶段后,系统需要完成的功能已经确定。在系统的总体设计阶段,需要确定系统应该怎样完成这些需求。本系统的总体设计包括硬件平台和软件平台的设计。
系统的硬件平台是整个系统的基础。在本系统中,采集端的硬件设备采集摄像头的音视频信息,经过硬件加密模块和定制的基站传输到接收端的硬件设备。此设备解密音视频信息,并且为服务端访问这些音视频提供服务接口。硬件平台拓扑图如图1所示。
完成硬件平台的设计后,需要对整个软件的平台进行设计,为系统的实现做好准备。本系统的软件平台使用C/S模式。C/S,即客户端/服务器,是大多数网络编程使用的软件架构。通过它可以充分利用两端硬件环境的优势,将任务合理分配到客户端和服务端,降低系统的通信开销。
接收端的硬件设备接收到音视频后,使用硬件模块进行解密,然后为服务端提供获得视频图像的回调接口。服务端使用此接口实时获取视频图像,并广播到所有连接的客户端。客户端使用播放器播放接收到的图像。
系统实现是将系统设计的成果变成可实际运行的系统的过程。系统实现的主要工作包括人员培训、系统平台的建立、数据库的建立、应用程序设计与编码、程序测试与系统调试、试运行等。下面从服务端软件实现和客户端软件实现两个方面进行阐述。
服务端的编程语言使用C++,与客户端进行通信的协议是UDP协议。服务端软件负责调用接收端的硬件设备提供的回调接口获得视频图像,并转发给所有连接的客户端。流程图如图2所示。
客户端的编程语言使用C#,C#是一种从C++和Java继承而来的、简单的、现代的和面向对象的语言。客户端主要负责接收服务端的视频图像并进行展示。流程图如图3所示。
其中,接收图像并设置图像的代码如下所示:
IntPtr[]p=new IntPtr[3];
Marshal.Copy(plane,p,0,3);
byte[]rgbs=new byte[width * height * 3];
Marshal.Copy(p[0],rgbs,0,(Int32)(width * height * 3));
Bitmap currentFrame=MonitorUtils.BytesToBmp(rgbs,(Int32)width,(Int32)height);
if(_imageMap.ContainsKey(devid.ToString()))
{
_imageMap.Remove(devid.ToString());
}
_imageMap.Add(devid.ToString(),currentFrame);
图2 服务端软件流程图
图3 客户端软件流程图
当启动系统后,显示登录界面。输入用户名和密码,显示视频监控的主界面,其中左侧展示了摄像头列表。分别拖拽摄像头到监控区,得到实时监控界面,如图4所示。
图4 实时视频监控界面
本文在传统的网络视频监控系统的基础上,提出一种新型的远程网络视频监控系统,能够有效解决传输过程中的安全性问题。经过6个月的开发工作,系统已经成功部署到客户的生产环境中。实践证明,系统运行稳定,可以推广到其他类似的应用场景的设计。未来的研究方向包括优化服务端视频存储的设计和客户端视频播放的算法,保障视频播放的流畅性。