一种远程视频监控系统的设计潘健文

(整期优先)网络出版时间:2018-10-20
/ 2

一种远程视频监控系统的设计潘健文

潘健文

(广东鼎华科技股份有限公司广东佛山528000)

摘要:视频监控系统在人们的日常生活中发挥着重要的作用,远程视频监控系统也成为了当前的一个研究热点。本文结合嵌入式开发、WIFI无线传输技术,设计了一种远程视频监控系统,该系统安全可靠,传输视频清晰,为类似系统设计提供参考。

关键词:远程视频监控系统;视频采集;路由器端口转换

随着无线宽带网络技术、多媒体技术以及人工智能技术的快速发展,传统的视频监控系统因其效率低下,技术落后等问题,已无法满足人们日益增长的安全防范需求。基于无线网络和嵌入式的远程视频监控系统成为了视频监控系统发展的新方向。基于此,笔者展开了相关介绍。

1.系统总体设计

该远程视频监控系统主要由三部分组成,分别为远程视频采集模块、路由器端口转换模块和客户端监控视频显示模块。视频采集模块通过WiFi连接到路由器,本地PC也可直接通过路由器显示采集的视频,经过路由器的端口转换,可通过互联网传输到客户端的PC机,进行实时显示。总体框架如图1所示。

图1系统总体框架图

2.远程视频采集模块

远程视频采集模块使用Tiny4412嵌入式开发板为硬件平台,操作系统为Linux系统,操作系统内核为Kernel3.5,采集端采用市场主流的USB摄像头,传输端采用雷凌公司基于RT5370芯片的无线网卡。由于设计采用C/S结构,在视频采集部分需要搭建一个简单通用性能稳定的视频服务器,使用MJPG-Steamer软件并对其做修改使之适合上位机的需求。

2.1建立PC机Linux的交叉编译环境

嵌入式应用软件开发要用到交叉编译环境,这是因为软件开发环境和运行程序的目标平台的操作系统,硬件资源有较大区别。在此使用的宿主机是基于2.6.32内核的Ubuntu10.04系统,硬件平台使用Kernel3.5内核版本,宿主机和硬件平台通过串口相连。使用超级终端作为串口控制终端,对开发板进行控制。宿主机编译的程序要经过交叉编译后才能在硬件平台上运行,这里使用的交叉编译环境是ARM-Linux-GCC4.5.1版本。

2.2视频服务器软件设计

MJPG-Streamer是Linux下的一个轻量级开源视频服务软件,一个可从单一输入组件获取图像并传输到多个输出组件的命令行应用程序。由于MJPG-Streamer采用模块化的设计方法,各功能模块都放在plugins文件夹,这些功能模块被称为插件,插件分为输入和输出两大类,输入插件包括input_uvc和input_testpicture等,输出插件主要包括output_file和output_http等,MJPG-Streamer起到控制这些插件的作用,将所有的插件连在一起。这种模块化的设计方法简化了代码的编写、调试、维护,程序员只需要遵守设计规范,便可轻松地改写软件,实现自身需要的功能。

原版MJPG-Streamer服务器显示的画面上众多控制信息,在监控时并不希望看到,所以需在位于WWW文件下的html文件里进行修改,删除无用信息,并对网页上的视频图像大小、刷新帧率等做适当调整,使其能适应客户端的监控视频显示部分。由于Kernel3.5内核已自动生成了video0~video14的设备符,新插入的USB摄像头分配到的设备符是video15,而MIPG-Streamer使用的设备符是video0,所以使用mv命令更改设备符号,然后将以上命令写成.sh的启动脚本文件。

通过ftp方式将MJPG-Streamer整个软件发送到开发板上,使用超级终端执行.sh脚本文件,便可运行服务器软件,这样服务器就搭建好了。MJPG-Streamer的工作流程如图2所示。

启动MJPG-Streamer服务器后,首先调用dlopen组件打开视频采集设备获取相关参数,然后调用input_init和output_init组件初始化输入和输出,当收到用户的连接请求时,调用input_run组件采集图像,之后调用out_put组件在服务端以Socket套接字方式将采集图像数据通过网络发给用户。最后当收到停止信号时,结束工作,释放资源。

2.3视频采集程序

视频采集是在输出插件input_uvc中完成的,调用Linux内核中关于视频设备的API-V4L2接口,完成打开UVC摄像头、配置参数、内存映射、处理数据和关闭摄像头等功能。视频采集的流程图如图3所示。

首先在初始化函数init_v4l2中用open函数打开视频设备,用ioctl()函数设置视频设备属性。发送VIDIOC_QUERYCAP查询视频设备是否具有所需的功能,发送控制命令VIDIOC_S_FMT设置视频数据的格式,例如视频图像的长、宽,图像格式(JPEG、YUYV格式)。发送控制命令VIDIOC_REQBUFS请求V4L2驱动分配视频缓冲区,分配的缓冲区位于内核空间,应用程序不能直接访问,再通过调用mmap内存映射函数把内核空间内存映射到用户空间后,应用程序通过访问用户空间地址来访问内核空间,这样减少一次数据在内存中的复制过程,增加效率。发送控制命令VIDIOC_STREAMON启动视频采集,并把采集到的视频数据保存到视频驱动的视频缓冲区中。发送控制命令VIDIOC_STREAMOFF停止视频采集。用close函数关闭视频设备。

图2MJPG-Streamer工作流程

3.路由器端口转换模块

为实现用户可在远程监控本地视频,将视频采集模块通过路由器连接互联网。路由器中DHCP服务器会给每个采集模块分配一个私有IP地址(如192.168.1.xxx),为了实现通过互联网访问局域网内多个USB摄像头的功能,就需要解决外网IP能够访问私有IP的问题,所以需要静态端口映射。静态端口映射功能是把在公网上的主机IP的某一端口翻译成私有IP,使得私有IP可被公网IP访问到。在路由器上可在端口映射表里配置目的IP、目的端口、源IP、源端口,由此便可在公网上通过输入IP:端口号来访问不同的摄像头。端口映射的模型如图4所示,端口映射表如图5所示。

4.基于QT的客户端视频显示部分

QT是1991年由奇趣科技开发的跨平台C++图形用户界面应用程序开发框架[9]。既可开发GUI(图形用户接口)程序,也可用于开发非GUI程序,比如控制台工具和服务器。QT的优点在于有优良的跨平台特性,支持多种操作系统;采用面向对象的框架,模块化程度非常高,可重用性较好,对于用户开发而言是方便的;QT提供一种称为signals/slots(信号/插槽)的安全类型来代替callback(回调)机制,这使得各个元件之间的协同工作变得简单。信号在某个特定的环境或者动作下被触发,槽等同于接受并处理信号的函数,信号与插槽机制并不要求类之间互相知道细节,一个对象的信号可被多个不同的插槽连接,而多个信号也可被连接到相同的插槽,这样可重用性提高。

客户端视频显示部分界面被分割成4个窗口,每个窗口由两部分组成:用于输入IP:端口号的地址栏;开始按钮、关闭和录像按钮,用于实现客户端的各种功能。整个客户端软件的设计流程,如图6所示。

图6客户端软件设计流程

首先用初始化系统,使用QSplitter函数分割出4个窗口,使用QLineEdit类和QPushButton类分别设置地址和按钮,通过connect函数将信号和槽连接,用户选择窗口,点击开始按钮,显示监控画面,点击录像按钮,开始录像,点击关闭按钮,关闭监控画面,最后结束程序。

点击运行QTCreater,建立工程,建立GUI项目,利用QTDesigner(QT设计师)来规划主窗口,为实现多窗口显示,使用分割窗口QSplitter类。QSplitter*splitterMain=newQSplitter(Qt::Horizontal,0);第一个参数代表水平分割,第二个参数为0代表是主窗口,无父窗口。QSplitter*splitterLeft=newQSplitter(Qt::Vertical,splitterMain);第一个参数代表垂直分割,第二个参数代表主窗口是splitterMain,而splitterLeft就被添加到splitterMain中。同样方式设定右窗口,这样就均匀分割出了四个窗口用来显示监控画面。然后需要在每个分割窗口上面添加一个行编辑器框用来输入服务器IP,一个开始按钮,一个关闭按钮和一个录像按钮。通过connect()函数将地址栏returnPressed()信号和开始按钮的clicked()信号与goToSite()槽连接起来。goToSite()程序就是将QUrl地址传递给QWebView的Load函数,这样就通过QWebView对象显示出当前IP监控画面的网页。通过connect()函数将关闭按钮的clicked()信号和back()槽连接起来,back()程序就是关闭当前监控画面。通过connect()函数将关闭按钮的clicked()信号和video()槽连接起来,video()程序就是保存当前监控画面。Video()通过调用VLC(VideoLanClient)程序,实现保存录像功能。VLC是一个开源的、跨平台的视频播放器。VLC支持大量的音频视频传输、封装和编码格式。特点是支持不完整的流传输,由于不确定何时结束录像,视频监控是不完整的流传输。通过使用VBS批处理命令调用VLC程序,然后QT提供QProcess.h头文件支持调用外部VBS,使用system("C:\Users\Administrator\Desktop\start.vbs")函数,便可在QT界面里执行保存命令。

5.结语

综上所述,远程视频监控系统具有维护公共安全和公众生命财产安全,对违法犯罪行为构成威慑等重要作用,其系统设计是当前的研究热点。本文设计了一种远程视频监控系统,该系统实现了远程视频的实时监控,并具有远程显示、保存功能,该系统稳定可靠,对其他类似系统的设计具有一定的借鉴意义。

参考文献:

[1]赵科.环保远程视频监控系统的设计[J].电脑迷,2017(02):107.

[2]陈川.通信机房视频监控系统的设计与应用[J].电子技术与软件工程,2016(20):56.

[3]李林喜.基于Web的远程视频监控系统设计及应用[J].通讯世界,2016(15):255-256.