基于ARM9的嵌入式视频监控系统的设计与实现
2015-12-19
(琼州学院 电子信息工程学院,海南 三亚572022)
0 引言
随着网络通信技术和图像压缩技术的快速发展,视频监控系统以其信息获取直观,及时方便,真实可靠等优势广泛应用在日常生活中:门禁监控、电梯监控、车库监控、银行监控、火情监控及违章监控等.在视频监控领域中,数字化和网络化成为一种趋势.
本文主要介绍了基于ARM9 的网络远程视频监控系统的设计方法,在Linux 操作系统下开发环境下实现.系统采用B/S(Browser/Serve)方案,使用S3C2440 开发板和市面上常见的普通摄像头,视频服务器在开发板上搭建并运行,以开源软件Mjpg-stream 为基础,使用V4L2 接口标准,由USB 摄像头输入;视频通过网络传输到客户端,客户端可以是任意浏览器,用户在浏览器输入IP 地址即可访问视频动态实时监控画面.该视频监控系统采用并发服务器,支持多个客户端同时显示,易搭建、易配置、通用性较好.
1 系统实现原理与开发环境
1.1 实现原理
系统打开摄像头设备文件fd=open(″/dev/video0″,O_RDWR),调用V4L2 初始化摄像头,根据内核设置显示屏的规格,设置捕获视频尺寸,并根据启动参数配置输出,比如主页文件的目录,使用的端口号等.抓图函数uvcGrab 以阻塞方式等待图像数据,当有一帧数据到达后先处理为JPEG 文件,对于YUYV 格式的图像数据先要转换成RGB 格式,再调用libpeg 压缩为JPEG 文件[1];对于MJPEG 格式的输入需要插入Huffman 数据表,捕获并处理了一帧视频之后再通知所有等待数据的客户端线程.输出线程分为两大部分:并发服务器线程server_thread 和客户端处理线程client_thread.前者负责监听客户端请求,一旦有请求就创建一个新的客户端线程专门负责来自此客户端的HTTP 请求[1].这样服务器线程就可以一直监听客户端请求;后者只负责处理一个客户端响应,也就是只响应一个IP 地址的请求,发送HTTP 响应头,使服务器可以不断地发送JPEG 数据给浏览器.
1.2 开发环境
硬件开发设备方面,一块基于ARM9 架构的微处理器S3C2440 开发板TX2440A,该开发板低功能,高性能,集成有视频音频处理的硬件加速器,多格式编解码器(MFC),支持编码有MPEG4/H.263/H.264 等、且具备译码以及VCI 解码功能,在实时视频会议和TV 输出等方面功能强大[2];同时还需要一任意型号的USB 摄像头,市面上这种普通摄像头使用方便,这类摄像头的驱动程序通用且容易加载.
软件开发主要在Linux 操作系统下完成,搭建支持eabi 的交叉编译工具链arm920t-eabi-4.1.2,安装Mjpg-streamer、Uvcvideo 基础连接库,配置V4L2 芯片的视频服务软件Mjpg-streamer 包,使用Linux-2.6.31 内核和Linux 自带的万能USB 摄像头驱动程序Gspca,定制服务器于根文件系统中的嵌入式Linux操作系统,客户端通过在PC 机上使用Web 浏览器或者其他客户端程序.
2 系统安装、配置与实现
2.1 搭建开发平台
开发环境以Windows 7+VMWare 8.0+Linux CentOS 6.3 为例,平台主要包括Windows 和Linux 相关软件的安装、配置与使用.首先在Linux 下安装交叉编译工具链arm920t-eabi-4.1.2,执行“exports PATH=/opt/toolchains/arm920t-eabi/bin:$PATH”,制作内核镜像时必须加载好USB 摄像头驱动.Windows 操作系统下平台需要实现,一是主机与开发板的串口通信,常用超级终端、SecueCRT、DNW 等软件(在Linux 下多以minicom);二是根据电脑是否有并口安装并配置好对应的烧写软件,以便u-boot.bin 写入到NorFlash 中;三是配置必要服务器,如实现Linux 与Windows 下文件共享,最好架设Samba 服务器,实现从宿主机Linux 下载文件到开发板,需要NFS 服务器,如果使用网络下载根文件系统,还要搭建好TFTP服务器,否则需要安装好USB 驱动,准备使用DNW 串口下载根文件系统.
2.2 安装配置视频处理文件
系统处理视频和图像必需要的库文件有libjpeg 库和SDL.前者是一个完全用C 语言编写的库,是专门用于jpeg 图片格式解压和压缩的库[3].后者是免费的跨平台多媒体应用编程接口,专门为游戏和多媒体应用,针对能较高质量的图形图像数据.两者安装方法和步骤类似,即下载及解压源码包、后台配置./configure、编译make 和安装make install、最后拷贝所需要库文件到交叉编译安装目录下(如/opt/toolchains/arm920t-eabi/arm-angstrom-linux-gnueabi)的lib、bin 和include 目录中,确保了视频服务器运行及所需要的库和头文件.
Mjpg-streamer 软件在该监控系统中功能强大,可实现视频采集、格式转变及视频压缩等,为此,移植Mjpg-streamer 到开发板上是搭建服务器的一个重点.原理比较简单,即让该软件在嵌入式Linux 系统中正常运行便实现监控的目的,进一步说,就是确保Mjpg-streamer 软件包中对应的可执行程序、运行时所需要的库文件和头文件等,拷贝到对应嵌入式Linux 根文件系统中,所以最后归就于把Mjpg-streamer 相关文件制作到文件系统中.
如使客户端支持CGI 程序调用还需要使用Boa 服务器,本系统实现最简易视频监控功能,可不必移植Boa 服务包.
2.3 定制嵌入式Linux 操作系统
因为Linux 开源,获得最小根文件系统的源码后,使用Buybox 工具制作好精简的根文件系统,并在此基础完善Mjpg-streamer 软件包的视频监控功能.主要操作是把源码解压编译后生成的可执行程序uvc_stream、mjpg_streamer 复制到根文件系统下的usr/sbin 目录下;把运行程序需要的相关库文件input_uvc.so、output_http.so、libjpeg 库和SDL 库(交叉编译器的lib 目录下)拷贝到根文件系统下的lib 目录下,最后使用工具mkyaffs2image 制作成yaffs2 类型的文件系统文件,并设定该文件最高权限777,等待下载到开发板.
如上,制作好的根文件系统中包括了视频监控程序及其运行环境,因此只在硬件功能完善的开发板上成功定制并移植嵌入式Linux 2.6.31 操作系统,就可以运行监控程序了.开发环境运行良好,首先把制作好的u-boot.bin 烧写到NorFlash 中,继而在控制台终端启动开发板的U-boot 下载模式,根据下载模式中提供的菜单选项,依次下载内核zImage、下载制作好的根文件系统到开发板的NandFlash 中[4].以上操作所需要对应的驱动程序、配置文件及镜像文件等,一般会随开发板厂家提供,对应操作可在Windows 系统下轻松实现,这里不再赘述.
3 系统运行与测试
3.1 运行视频监控服务器
正确好连接硬件,将摄像头连到开发板USB 接口,串口(或USB 转串口)与主机连接正确,开发板和主机分别接网线到交换机.接着打开开发板电源,在SecCRT 软件(或其他串口终端软件)界面,设置开发板与主机在同一个网段,以方便主机访问开发板视频服务器.
在开发板的串口终端,键入命令#webcam_ip,便可运行软件Mjpg-streamer,从而调用视频监控程序,因为已设置开发板的IP 地址是192.168.1.10,默认使用端口号是8080,服务器成功运行后,界面主要信息显示如下:
MJPG-streamer[704]:starting application
MJPG Streamer Version.:2.0
i:Using V4L2 device.:/dev/video0
i:Desired Resolution:640 ×480
i:Frames Per Second.:5
i:Format………:YUV
i:JPEG Quality………:80[2]
o:www-folder-path…:192.168.1.10:8080/
o:HTTP TCP port……:8080
o:username:password.:disabled
o:commands……….:enabled
MJPG-streamer[704]:starting input plugin
MJPG-streamer[704]:starting output plugin:/lib/oupput_http.so(ID:00)
3.2 客户端访问测试
用户可在客户端浏览器端输入http://192.168.1.10:8080,或者使用2.3 节中提到的Mjpg-streamer 软件包解压后的“mjpeg-client”中客户端程序,输入IP 地址和端口号,均可得到实时视频监控画面,如图1所示.
图1 视频监控画面
监控程序使用组合键【Ctrl+C】终止.
4 结语
本视频实时监控系统实现原理清晰,实现方法详尽.以S3C2440 为硬件核心,利用Mjpg-streamer 软件包完成视频采集、格式转换及图片压缩处理,可直接接入以太网,安装方便[5].同时系统具有较强的扩展性可轻松升级,如在此基础上移植Boa 服务器并通过CGI 网页编程可设计,可灵活增加的Web 服务页面的拍照,录相,录音等监控子功能.
[1]徐晓峰,李临生,闫庆森.ARM11 和Linux 在网络视频实时监控系统中的应用[J].云南民族大学学报:自然科学版,2013,22(5):364-368.
[2]刘雍.基于S3C6410 的嵌入式Web 视频仿真门禁系统设计[J].软件,2013,34(2):4-6.
[3]刘尘尘.基于ARM 的远程视频监控系统设计[J].计算机测量与控制,2012,20(8):27-29.
[4]韦东山.嵌入式Linux 应该开发完全手册[M].北京:人民邮电出版社,2011.
[5]戴雯惠.基于嵌入式Web 技术的远程视频监控系统的研究[J].现代计算机,2012(7):78-80.