APP下载

基于WiFi无线传输远程视频监控的研究

2016-10-17翟伟良

电子科技 2016年9期
关键词:路由器嵌入式摄像头

翟伟良,李 哲

(1.西安邮电大学 计算机学院,陕西 西安 710061;2.西安邮电大学 电子工程学院,陕西 西安 710061)



基于WiFi无线传输远程视频监控的研究

翟伟良1,李哲2

(1.西安邮电大学 计算机学院,陕西 西安 710061;2.西安邮电大学 电子工程学院,陕西 西安 710061)

针对传统的视频监控技术在远程监控中成本高,应用效率低的问题。文中结合嵌入式开发、WiFi与图形图像技术,提出了一种基于WiFi无线传输远程视频监控的方法。该方法以MJPG-Streamer作为服务器,通过无线WiFi进行视频数据传输,配置路由器完成端口转换,利用QT Creater设计软件实现多摄像头监控画面显示和录像。实验表明,传输视频清晰、流畅,系统稳定、可靠,具有良好的扩展性和易用性。

WiFi;视频监控;端口转换;无线传输

随着人们对公共场所安全的重视,视频监控作为其中的一种重要手段,得以快速发展[1]。传统监控有着布线困难、灵活性差等缺点,因此研究具有成本低、灵活性强等特点的嵌入式视频监控系统是有必要的[2]。

本文以微处理器Exynos4412 Quad-core 为核心的ARM9开发板为硬件平台[3]和配置无线路由器实现端口转发[4]以便于通过互联网显示,使用USB摄像头和USB无线网卡来实现监控和传输,在嵌入式平台上搭建MJPG-Streamer服务器[5],完成C/S结构[6],并在上位机使用QT Creater开发客户端[7],实现了远程多摄像头同时显示画面的功能。

1 系统总体设计

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

图1 系统总体框架图

2 远程视频采集模块

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

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

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

2.2视频服务器软件设计

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

原版MJPG-Streamer服务器显示的画面上众多控制信息,在监控时并不希望看到,所以需在位于WWW文件下的html文件里进行修改,删除无用信息,并对网页上的视频图像大小、刷新帧率等做适当调整,使其能适应客户端的监控视频显示部分。由于Kernel 3.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函数关闭视频设备。

图2 MJPG-Streamer工作流程

图3 视频采集流程图

3 路由器端口转换模块

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

图4 端口映射模型

图5 端口映射表

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

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

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

图6 客户端软件设计流程

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

点击运行QT Creater,建立工程,建立GUI项目,利用QT Designer(QT 设计师)来规划主窗口,为实现多窗口显示,使用分割窗口QSplitter类。QSplitter *splitterMain =new QSplitter(Qt::Horizontal,0);第一个参数代表水平分割,第二个参数为0代表是主窗口,无父窗口。QSplitter *splitterLeft =new QSplitter(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(Video Lan Client)程序,实现保存录像功能。VLC是一个开源的、跨平台的视频播放器[10]。VLC支持大量的音频视频传输、封装和编码格式。特点是支持不完整的流传输,由于不确定何时结束录像,视频监控是不完整的流传输。通过使用VBS批处理命令调用VLC程序,然后QT提供QProcess.h头文件支持调用外部VBS,使用system("C:UsersAdministratorDesktopstart.vbs")函数,便可在QT界面里执行保存命令。监控界面显示如图7所示,由于条件限制暂时用一个摄像头做演示。

图7 监控界面显示

5 结束语

本文研究了基于WiFi的嵌入式无线传输远程监控的方法,实验结果证明了本设计能够实现多路视频实时监控,远程显示并保存等功能。且本设计灵活性强,易安装,成本相比于传统的有线视频监控也较低,扩展性较好,通过路由器中继可扩大监控范围,也可分割窗口显示更多的监控画面。本设计能满足环境复杂或广阔区域的监控要求。但监控系统仍有不足,暂时不能实现智能识别,还需作进一步的设计和开发,最

终实现多路摄像智能识别运动物体,且自动对异常情况录像,并将监控画面传递给远程客户端。

[1]钱华明,刘英明,张振旅.基于S3C2410嵌入式无线视频监控系统的设计[J].计算机测量与控制,2009,17(6):1132-1134.

[2]陈恒鑫,林威,张钦宇.基于MJPG-Streamer的移动视频监控系统设计[J].计算机测量与控制,2014,22(11):3597-3599.

[3]王黎明,陈双桥,闫晓玲.ARM9的嵌入的开发和实践[M].北京:北京航天航空大学出版社,2008.

[4]傅丰,徐洪章.端口映射的分析与应用[J].天中学刊,2006,21(2):59-60.

[5]陈书益,黄永慧.开源视频服务器软件MJPG-Streamer的研究和应用[J].电子设计工程,2012,20(5):172-176.

[6]刘媛,张伟,王知学.基于B/S和C/S架构的嵌入式远程监控系统[J].仪表技术与传感器,2009(10):39-41.

[7]郑阿奇,陈超.Qt 4开发实践[M].北京:电子工业出版社,2011.

[8]李新峰,何广生,赵秀文.基于ARM9的嵌入式Linux开发技术[M].北京:电子工业出版社,2008.

[9]陈周国,王胜银,付国晴,等.基于Linux QT 技术的远程监控GUI设计[J].通信技术,2009,42(12):234-236.

[10]张凯,李临生.基于嵌入式ARM下的视频监控系统的实现[J].电子科技,2013,26(5):34-36.

Research on Remote Monitoring Based on WiFi Wireless Transmission

ZHAI Weiliang1, LI Zhe2

(1. School of Computer Science, Xi’an University of Posts and Telecommunications, Xi’an 710061, China;2. School of Electronic Engineering, Xi’an University of Posts and Telecommunications, Xi’an 710061, China)

In view of the high cost and low application efficiency of traditional video surveillance technology in remote monitoring,a method of remote video monitoring based on WiFi wireless transmission is proposed, which combines the embedded development, WiFi and graphics image technology.The MJPG-Streamer is adopted as the server and video data are transmitted through wireless WiFi, with the router for port conversion and QT Creater to design software for video display and video recording of multi camera monitoring. The test verifies the good stability, reliability and scalability of system, which offers clear and smooth video.

WiFi; video surveillance; port translation; wireless transmission

2015- 12- 13

翟伟良(1991-),男,硕士研究生。研究方向:嵌入式与系统设计。李哲(1963-),男,教授。研究方向:嵌入式系统与自动控制。

10.16180/j.cnki.issn1007-7820.2016.09.019

TN926+.24; TP391.4

A

1007-7820(2016)09-068-04

猜你喜欢

路由器嵌入式摄像头
浙江首试公路非现场执法新型摄像头
买千兆路由器看接口参数
摄像头连接器可提供360°视角图像
维持生命
Focal&Naim同框发布1000系列嵌入式扬声器及全新Uniti Atmos流媒体一体机
路由器每天都要关
路由器每天都要关
TS系列红外传感器在嵌入式控制系统中的应用
搭建基于Qt的嵌入式开发平台
奔驰360°摄像头系统介绍