基于Linux的无线视频监控系统
2015-04-07任黎明孙玲玲
任黎明 孙玲玲
摘 要:阐述一种基于嵌入式Linux的无线视频监控系统的设计和实现方法。该系统主要由视频采集终端和PC上位机组成。其中,视频采集终端主要由摄像头视频采集模块、ARM模块、WiFi模块组成,PC上位机可进行实时监控。系统软件采用嵌入式Linux,可编程实现图像数据采集、压缩和WiFi模块的网络连接与传输。实验结果表明监控系统性能稳定、实时性较好,在实际中具有一定应用前景。
关键词:嵌入式;WiFi;无线监控;Linux
中图分类号:TP316 文献标识码:A 文章编号:2095-1302(2015)02-00-02
0 引 言
视频监控技术已被广泛应用到各行各业,并且受到了越来越多的重视。视频监控在工业生产、安全防范、智能交通、公共场所等领域都有非常广泛的应用,对于那些需要实时监视但人员又不能到达的场合,视频监控系统显得格外重要[1]。本系统是基于Linux操作系统和ARM开发平台的无线视频监控方案,融合了嵌入式技术和WLAN技术,实现远程视频监控的目的,能广泛地应用于不同的场景。
1 系统总体设计
本文设计了一种嵌入式无线视频监控系统。该系统基于嵌入式ARM微处理器和Linux操作系统。摄像头采集到的视频数据使用H.264进行压缩编码,然后通过WiFi技术在无线局域网中实现视频图像数据的传输,最后通过上位机软件显示视频图像。
2 系统设计与实现
2.1 系统开发平台设计
本系统选用基于三星S5PV210处理器的TQ210开发板作为系统设计的硬件平台。其中,摄像头采集视频图像,并通过USB接口将信息传输至嵌入式系统。嵌入式Linux系统在外设驱动的支持下,通过V4L2函数接口实现视频图像的采集;由于采集到的原始视频信息数据量较大,不利于无线传输的实时性,并且会增加系统功耗,故采集后需要先通过视频压缩模块进行视频压缩,然后再进行无线传输。视频监控系统对于系统的规模、吞吐量和传输的实时性都有比较高的要求,故系统使用WiFi无线来进行视频图像数据传输。视频图像数据通过无线网络最终传输到上位机软件并实时显示。图1所示为系统整体结构图。
图1 系统整体结构图
本文设计的嵌入式视频采集与传输系统使用数码摄像头采集视频数据,和其他接口的视频摄像头相比,USB数码摄像头可以方便地和嵌入式系统连接[2]。另外,USB摄像头的采购成本低,开发容易。在大量调研后,本文选择了基于ZC301芯片组的USB数码摄像头。基于ZC301的数码摄像头价格合适、使用CMOS传感器。图2给出了系统硬件功能框图。
图2 系统硬件功能框图
嵌入式视频采集与传输节点接入网络后就开始等待上位机下发指令,一旦上位机正确配置完成嵌入式视频采集与传输单元后节点就开始工作。首先,节点通过数码摄像头采集视频信息,并通过H.264算法进行视频信号的压缩。然后形成的视频数据被打包成无线局域网数据,通过无线网卡发送至无线接入点。最后,上位机接收到视频数据,并解码播放视频[3]。
2.2 图像视频采集
使用基于ZC301芯片组的USB数码摄像头,利用TQ210开发板采集图像数据并进行压缩编码,然后数据打包成RTMP格式,使用WiFi模块传给PC端上位机软件,摄像头整体框图如图3所示。
图3 摄像头整体框图
如上图所示,处理器对图像传感器数据的读取是通过V4L2接口实现的。V4L2(Vedio For Linux Two)是在 Linux 内核中关于视频设备的内核驱动框架,为上层访问底层的视频设备提供了统一的接口,它是 V4L 的升级版本。V4L2 支持三类设备:视频输入设备、vib 设备和radio设备。V4L2采用了分层架构,将应用编程接口和视频驱动独立开来,增强了程序的独立性和可移植性。V4L2主要流程如图4所示。
图4 V4L2工作流程图
其主要流程的程序实现如下:
(1)打开摄像头
fd = open(dev_name, O_RDWR | O_NONBLOCK, 0);
if (-1 == fd){
fprintf(stderr, "Cannot open '%s': %d, %s\n", dev_name, errno, strerror(errno));
return false;
}
在本文中使用基于ZC301芯片组的USB数码摄像头,设置设备名为/dev/video0。为了不出现无法读取的问题,注意要以读写(O_RDWR)的形式打开该摄像头。如果成功将返回该设备的文件描述符,否则返回错误码-1。
(2)读取设备视频参数
struct v4l2_capability cap;
if (-1 == xioctl(fd, VIDIOC_QUERYCAP, &cap)) {
if (EINVAL == errno) {
fprintf(stderr, "%s is no V4L2 device\n", dev_name);
return false;
} else {
return false;
}
}
这里相当关键,因为要使用该摄像头,所以我们必要认真查阅资料,了解该摄像头的功能和特性,否则可能导致摄像头无法正常工作,接下去的工作更是无从谈起。这里将得到摄像头性能参数cap,在后面的设置环节将根据该参数设置相对应的数值。
(3)请求设备缓存区
struct v4l2_requestbuffers req;
req.count = 4;
req.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
req.memory = V4L2_MEMORY_MMAP;
if (-1 == xioctl(fd, VIDIOC_REQBUFS, &req)) {
if (EINVAL == errno) {
fprintf(stderr, "%s does not support memory mapping\n", dev_name);
return false;
} else {
return false;
}
}
该步骤将在设备中开辟4个缓存区用于采集视频,缓存区在设备中声明,在用户空间开辟,接下来分别为这4个映射地址。
2.3 H.264视频压缩
相对于其它传统压缩标准来讲,H.264对视频数据的压缩率高出不少,并且其自身对信道的适应能力以及多媒体兼容性方面都具有明显优势,因此该种标准在当今视频压缩以及无线传输方面得到了十分广泛的应用。H.264视频编码过程主要分三步实现,分别是H.264编码器的设计、视频数据的压缩程序设计、X264库文件的交叉编译。
2.4 WiFi视频传输
本文中选用WiFi来传输视频图像数据原因如下:其一,传输速度非常快,传输带宽能满足实时视频数据的要求。其二,无线电波的覆盖范围广,室外空旷场所理论上WiFi最远覆盖半径可达900英尺左右,约合300米。其三,方便快捷,无须布线,只要附近设置有“热点”,就可高速连接到因特网接,使远程传输和控制成为可能[4]。
2.5 PC上位机视频显示
在设置好ARM平台IP及端口号以后,可在上位机发送视频采集指令并查看实时视频图像,实时显示图像如图5所示。
图5 视频服务器总体结构图
3 结 语
本文提出了基于Linux的无线视频监控系统,并且实现了基本功能,经测试,本方案具有较高的传输速度,显示图像画面清晰。未来若能加入无线Mesh网络设备,组成更大规模无线视频监控系统,应用前景将会更加广泛。虽然该方案可以成功运行,但实验室的运行环境和实际环境会有不少差别,故有待未来做进一步改进。
参考文献
[1]黄宇.基于H.264的网络视频监控系统设计与实现[D].西安:西安电子科技大学,2011.
[2] Jianmiao Hu,Jianmei Cen.Video surveillance in public space in China[J].Frontiers of Law in China,2009,12(5):12-14.
[3]谢猛.基于ARM和Linux平台的移动视频监控小车研制[D].武汉:华中师范大学,2013.
[4]耿元鸣.几种主流视频编码方式的性能比较和分析[J].电子科技,2007(7):51-54.