赵丹,谌建飞,周旋,邓敏,唐立军
(1.长沙理工大学 物理与电子科学学院,长沙 410114;2.近地空间电磁环境监测与建模湖南省普通高校重点实验室)
基于MJPG-streamer的嵌入式远程视频监控系统*
赵丹1,2,谌建飞1,2,周旋1,2,邓敏1,2,唐立军1,2
(1.长沙理工大学 物理与电子科学学院,长沙 410114;2.近地空间电磁环境监测与建模湖南省普通高校重点实验室)
针对远程实验操作中实验动态信息可视化及实时性问题,利用ARM处理器和USB摄像头设计一个基于MJPG-streamer的嵌入式远程视频监控系统。该系统使用基于硬件压缩的USB摄像头进行视频信息采集,搭建MJPG-streamer流媒体服务器来完成视频数据的采集和传输。测试结果表明,该方案在帧率10 fps、分辨率640×480情况下,能实现流畅清晰的视频传输,且平均占用带宽约200 Kb/s,能满足远程实验的需求。
远程实验;视频监控;MJPG-streamer ;嵌入式应用
基于互联网的远程实验教学模式打破了时间与空间的限制,实现了仪器设备的共享,有效地提高了实验资源利用率和实验效率[1-3]。远程实验过程控制的研究是远程实验教学平台最为关键的一环,而实验过程的视频实时监控是辅助实验操作必不可少的部分。学生在远程客户端通过视频来观察实验过程,并根据实验现象控制实验仪器得到实验结果。整个实验过程对视频传输的实时性、稳定性以及如何实现远程访问提出了较高要求,所以研究实时视频压缩、传输和Web端视频嵌入技术具有十分重要的意义。
为了保证实验的顺利进行,需要对视频进行实时采集、编码和发送,要求能在带宽受限的网络中也能实现流畅清晰的实时视频传输。本文针对实时视频监控的相关要求,将ARM处理器和MJPG-streamer软硬件结合,设计和开发一个可用于远程实验平台的基于MJPG-streamer的实时视频监控系统,该系统可以实时查看实验进展,为远程实验平台的完善提供实用价值。
本设计建立在基于ARM处理器的平台上,主要由硬件和软件两部分组成。硬件部分包括核心处理器、USB摄像头、无线网卡;软件部分包括在Linux下实现识别摄像头和无线网卡设备的驱动程序、视频服务器端的视频采集、编码和传输以及客户端的视频显示。整个系统结构如图1所示,首先在处理器上搭建MJPG-streamer流媒体服务器,然后通过MJPG-streamer软件实现从USB摄像头捕获实验平台视频图像信息,图像信息传入处理器,经由网络传输将视频流通过视频服务器发送到Web客户端,在Web客户端提供多种视频嵌入方法,根据不同实验的要求进行嵌入。
图1 远程视频监控系统结构图
本系统采用ARM Cortex-A9内核的Exynos4412芯片为核心处理器,主频为1.6 GHz,配置2 GB双通道 DDR3的内存及16 GB存储,提供2个USB接口以及100M网口,集成有WiFi、蓝牙芯片,因此能够方便接入网络。此外还提供有GPIO针脚和SPI总线用于连接各种传感器以及电机等外设,可通过应用程序对外接设备进行控制。
在视频采集模块直接使用了免驱动的USB摄像头。本方案选用的USB Camera(C270) 支持YUYV格式和压缩的MJPEG格式的图像输出。视频的数据量很大,在有限的网络带宽下进行数据传输,会导致网络阻塞、负载大,画面比实际情况延时较大[4],不利于实验的有效进行。选择YUYV格式,会消耗大量CPU将YUYV格式图片压缩成JPEG格式,整体系统的性能会下降,所以本系统选择输出MJPEG格式的摄像头,streamer只需将得到的JPEG格式的图片转发到http服务器。
图2 系统硬件结构图
系统采用WiFi方式进行网络通信,WiFi模块与板卡之间的连接采用SDIO接口,WiFi硬件模块使用的是MTK的MT6620芯片,MT6620除了具备WiFi功能以后,还支持蓝牙、FM、GPS功能。系统硬件结构图如图2所示。
本系统的软件设计包括嵌入式系统环境的搭建、视频服务器的搭建、视频采集以及Web客户端的设计。
3.1 搭建嵌入式操作系统环境
在建立视频监控系统前,需要搭建运行环境。嵌入式操作系统为开发应用程序提供了软件平台,进行软件开发时一般采用交叉编译的方式。嵌入式开发平台的搭建包括引导加载程序的移植、Linux内核的移植以及文件系统的烧写[5-6]。
首先搭建交叉编译环境,以便能在Linux环境下得到ARM架构下的可执行文件,然后配置内核参数裁剪内核,删除要用的功能模块,制作文件系统实现使用内核和存取文件,最后烧写引导加载程序、裁剪后的内核和文件系统到开发板。
本系统采用arm-2009q3交叉编译环境,引导加载程序bootloader为u-boot-iTOP-4412,内核为iTop4412_Kernel_3.0,选择Linux文件系统实现使用内核和存取文件。V4L2驱动和USB摄像头驱动在配置内核部分完成。
3.2 MJPG-streamer流媒体服务器
MJPG-streamer是一款轻量级的视频流服务器软件,该软件有多个输入输出组件,可根据功能的需要来选择要用的组件[7]。MJPG-streamer的工作就是将其中的一个输入组件和多个输出组件绑定在一起,所有的工作都是通过它的各个组件完成[8]。
图3 MJPG-streamer工作流程图
input_uvc.so输入组件直接调用USB摄像头驱动程序,从摄像头读取视频数据,同时将视频图片压缩为JPEG格式,然后将视频数据复制到内存中。output_http.so输出组件是一个完全符合http标准的webserver,将输入组件压缩为JPEG格式的图片根据现有M JPEG标准以http视频数据流的形式输出[9]。用户可以通过浏览器打开网页实时查看远程端的视频图像信息。MJPG-streamer的工作流程图如图3所示。
在主函数里,首先通过一个功能函数getopt_long_only()解析命令行选项,也就是将输入的mjpg-streamer命令解析出来,然后调用相应的函数。dlopen()函数负责打开*.so插件,dlsym()负责调用插件中的相关函数。当输入mjpg_streamer -i "input_uvc.so" -o "output_http.so "时,dlopen()函数打开输入插件input_uvc.so和输出插件output_http.so,系统将会调用input_uvc.so中的input_init函数,对输入设备进行初始化;同时调用output_http.so中的output_init函数对输出涉及到的结构体进行初始化。然后在input_run函数中创建视频采集线程,将数据复制到全局变量。在output_run函数中通过socket编程进行网络通信。当接收到客户端连接请求后,将视频信息发送到客户端。为了能同时响应多个客户端的请求,使用了多线程编程,为每一个请求建立一个连接,每个连接就是一个线程。
3.3 V4L2视频采集
在Linux操作系统中,由V4L2来实现视频采集设备的各种功能[10]。MJPG-streamer的输入组件input_uvc.so可以直接调用USB摄像头驱动程序,完成打开摄像头、配置参数、处理数据和关闭摄像头等功能,从摄像头读取视频数据。USB摄像头的设备文件路径是/dev/video4,摄像头设备以文件形式进行读写,通过V4L2提供的API接口函数实现对/dev/video4的操作。视频采集的流程图如图4所示。
图4 视频采集流程图
输入组件首先在函数init_v4l2中用open函数打开摄像头。通过ioctl函数把描述摄像头信息的结构体写入驱动,包括摄像头采集帧率、图片大小及格式等信息,涉及到命令VIDIOC_QUERYCAP、VIDIOC_S_FMT、VIDIOC_S_PARM、VIDIOC_REQBUFS,VIDIOC_QUERYBUF,通过mmap函数完成内存映射。在函数video_enable中通过发送命令VIDIOC_STREAMON开始图像数据的采集。uvcGrab函数实现从摄像头获取图像,memcpy_picture函数将数据复制到全局buff。接收到主线程视频采集结束信号后,函数video_disable发送命令VIDIOC_STREAMOFF停止图像数据采集,用free函数释放掉摄像头设备号关闭摄像头。
3.4 Web端视频嵌入
视频传输用到的是MJPG-streamer的输出组件output_http.so,是完全符合http标准的Web服务器。开发板运行后执行命令mjpg_streamer -i "input_uvc.so -d /dev/video4 -r 640x480 -f 10" -o "output_http.so ",使用Web登录服务器,开始视频传输。
为实现随时随地进行实验操作的要求,本系统不仅要在实验室局域网内能实现,还要实现学校局域网内甚至校外广域网内的远程视频监控。对于固定IP且路由器端口映射可配置的情况下,可采用端口映射的方法实现由互联网访问局域网内视频[11]。本文使用端口映射来实现校园网内的远程视频访问,把公网上的主机IP的一个端口翻译成私有IP,使私有IP可以被公网IP访问。端口映射示意图如图5所示。
图5 端口映射示意图
要实现校园内远程监控,需要一个静态IP地址,如果是局域网则需要设置端口转发,在路由器上的端口映射表里配置目的IP、端口和源IP、端口。然后要正确配置嵌入式系统的IP、网关等参数。查询到路由器拨号上网的校园网IP(10.128.17.175),由于系统监控的是8899端口,首先查看8899端口是否被占用,若被占用则换成另外一个未被占用的端口。所以图像源地址变为http://10.128.17.175:8989/?action=stream,打开浏览器网页,就可以看到摄像头抓取到的远程端的实验平台现场视频。
系统实现后结合远程实验平台进行测试。开发板开启无线模块连接网络,将USB摄像头连接至开发板,开启视频服务器,实现远程的视频监控。在PC机浏览器上登录远程实验平台网页,点击视频进入视频监控窗口。摄像头观察实验平台现场情况,外设控制操作实验仪器,如图6所示。
图6 测试平台图
在远程网页端可以清晰地看到摄像头采集的视频,视频画面流畅,实时性高,没有出现卡顿,无马赛克和其他非正常的视频画面。
通过设置不同的分辨率和视频采集帧率,从数据传输所占带宽来分析,进行系统性能测试。采用了普遍使用的两种分辨率640×480和320×240来做对比。查询摄像头的格式信息可知在这两种分辨率下,帧率可设为30、25、20、15、10、5这6个值。运行本系统后,打开网页端查看视频信息,使用流量统计工具实时查看网络带宽的占用情况,连续观察30分钟,记录10个时刻的流量值,得到平均流量统计如表1和表2 所列。
表1 分辨率640×480下视频服务器网络带宽占用情况
表2 分辨率320×240下视频服务器网络带宽占用情况
由于远程实验动态信息输出的变化率较小,所以在帧率10 fps,分辨率640×480情况下,网页端视频画面较大,人眼能看清实验的变化情况,流畅度、清晰度能满足远程实验的要求,且带宽占用约为176~219 Kb/s,能实现流畅清晰的传输。
本文结合嵌入式技术、流媒体技术、网络技术和Web技术,实现了一种基于MJPG-streamer的远程视频监控系统,具有实时性强、低带宽和Web端灵活嵌入的特点,并能实现外网访问。文中详细介绍了硬件和软件设计,也实现了校园内的访问,并在远程实验平台上进行了测试。测试结果表明,本系统能实现稳定、流畅的实时视频传输,为远程实验平台提供技术支持,对于完善远程实验平台具有现实意义。
[1] 钟映春,华星,罗岩. 基于互联网的过程控制远程实验教学改革[J]. 实验技术与管理, 2012 (7):96-98,128.
[2] 腾李强. 基于ARM的远程实验控制系统研究[D].北京:北京邮电大学,2014.
[3] A Parkhomenko, O Gladkova, S Kurson, et al. Internet-based technologies for design of embedded systems[J].Experience of Designing and Application of CAD Systems in Microelectronics (CADSM), 2015, 3(2): 67-171.
[4] 丁元舟,罗小巧,杨明红,等. 停车场远程视频监控系统的设计与开发[J]. 电子测量技术,2015(3):35-38,42.
[5] 周鹏飞. 基于MJPG-Streamer的移动视频监控系统的设计与研究[D].安徽:安徽理工大学,2013.
[6] 贾继洋. 基于嵌入式的视频无线传输系统的研究[D].西安:西安工程大学,2015.
[7] 陈宗成,邓华秋. 基于ARM11的嵌入式视频传输系统的实现[J]. 电视技术,2013(9):210-213.
[8] 陈恒鑫,林威,张钦宇. 基于Mjpg-streamer的移动视频监控系统设计[J]. 计算机测量与控制,2014(11):3597-3599,3608.
[9] 赵冰,霍春宝,李岩松. 基于嵌入式Linux的3G无线视频监控系统[J]. 单片机与嵌入式系统应用,2013(3):56-58.
[10] 陈续,刘国巍. Cortex-A8和H.264的无线视频监控系统设计[J]. 单片机与嵌入式系统应用,2015(3):46-49.
[11] 翟伟良,李哲. 基于WiFi无线传输远程视频监控的研究[J]. 电子科技,2016(9):68-71.
赵丹(硕士研究生),主要从事信号检测与处理研究。
Embedded Remote Video Surveillance System Based on MJPG-streamer
Zhao Dan1,2,Chen Jianfei1,2,Zhou Xuan1,2,Deng Min1,2,Tang Lijun1,2
(1.School of Physics&Electronic,Changsha University of Science&Technology,Changsha 410114,China; 2.Hunan Province Higher Education Key Laboratory of Modeling and Monitoring on the Near-earth Electromagnetic Environments)
Aiming at the need of using video to assist users to carry out experimental operation and acquire the real-time experimental dynamic information in the course of remote experiment,an embedded remote video monitoring system based on MJPG-streamer is designed,which chooses ARM development board and the USB camera as the hardware platform and Linux operating system as the software platform.The program uses the USB camera to capture video information,builds MJPG-streamer streaming media server to complete the compression of the video data and real-time transmission.The test results show that the average bandwidth of the video transmission is about 200 Kb/s in the case of 10 fps and 640*480,which can meet the needs of remote experiment.
remote experiment;video surveillance;MJPG-streamer;embedded application
国家科技支撑计划课题(2014BAH28F04),湖南省教育厅科学研究项目(14C0031,15K009)。
TP315
A
迪娜
2016-12-09)