基于ARM 11和Linux的网络视频监控系统

2014-11-20 08:18任克强
电视技术 2014年5期
关键词:内核嵌入式摄像头

任克强,刘 苏,谢 斌

(江西理工大学信息工程学院,江西赣州341000)

随着计算机网络技术和视频处理技术的发展,网络视频监控已经成为网络视频应用中的一个重要领域[1-2]。嵌入式网络视频监控系统是集成了微处理器、网络技术、自动控制以及人工智能为一体的新型视频监控系统,以其成本低、体积小、性能稳定及通信便利等特点获得了越来越广泛的应用[3]。

ARM系列处理器具有较好的数据处理能力和低廉的价格,被广泛应用到嵌入式网络视频监控系统的设计中。目前,以ARM9处理器为核心的视频监控系统需要依靠专门的编解码芯片来弥补ARM9处理器视频信号处理能力的不足,增加了系统成本[4]。嵌入式网络视频监控系统可采用 C/S(Client/Server,客户机/服务器)和 B/S(Browser/Server,浏览器/服务器)两种模式,C/S模式具有专用性、交互性强等优点,但客户端和服务器端都需要特定软件的支持,系统升级和维护较为麻烦[5]。因此,本文在Linux平台上,设计并实现了一种网络视频监控系统。该系统以高性能的ARM11处理器S3C6410作为嵌入式视频Web服务器,克服了ARM9处理器在视频信号处理方面的不足;采用B/S模式,统一了客户端,将系统功能实现集中到视频监控系统的服务器上,与C/S模式相比,降低了成本,系统升级和维护更加方便,有利于系统的推广使用。

1 系统总体架构

网络视频监控系统的总体架构如图1所示,主要由视频Web服务器和视频监控终端两部分组成。

图1 系统总体架构

视频Web服务器中固化了Linux系统和MJPG-streamer应用程序,采用多线程模式,支持多监控终端同时进行监控。视频监控终端可以是手机和平板PC等移动终端,也可以是PC等固定终端,采用有线或者无线的方式进行视频监控。

USB摄像头将采集到的原始视频数据传递给ARM11处理器进行压缩编码,服务器端启动服务,监听监控终端的请求;当监控终端通过Web浏览器向服务器发送视频请求时,服务器开启一个线程,通过TCP/IP协议将视频流传输给监控终端,监控终端即可实现实时视频监控;服务结束后,监控终端向服务器发送请求结束会话,服务器关闭线程,释放资源。

2 硬件设计

视频Web服务器由ARM11处理器S3C6410、NAND Flash、SDRAM、RTC 电路、复位电路、USB 摄像头和DM9000等构成,其硬件结构如图2所示。

图2 服务器硬件结构

S3C6410是基于ARM11内核(ARM1176JZF-S)的高性能低功耗多媒体应用处理器,具有强大的硬件MFC(Multi-Format Video Codec,多格式视频编解码器),完善的功能模块以及高达667 MHz的运行频率,可满足实时视频信号处理的要求。USB摄像头采集原始视频数据并传递给S3C6410处理器,S3C6410处理器对原始视频进行压缩编码;通过DM9000接入Internet,采用TCP/IP协议传输视频流。NAND Flash采用4 Gbyte的K9LBG08U0D芯片,主要用于存放Linux内核、文件系统以及应用程序等。SDRAM采用256 Mbyte的DDR存储器,传输速率可达266MHz。RTC电路配置了一个CR1220型号的纽扣电池,掉电时为系统的实时时钟供电。

3 软件设计

视频Web服务器软件主要包括Linux系统和MJPG-streamer应用程序两大部分,其结构如图3所示。

图3 服务器软件结构

3.1 Linux移植

Linux系统主要包括BootLoader、Linux内核、硬件驱动和根文件系统4个部分。采用交叉编译方式,系统软件平台采用Linux发行版 ubuntu12.04,交叉编译器使用arm-linux-gcc4.3.2版本。本系统所用的网卡和 USB 摄像头等硬件驱动已集成在Linux系统中,不需要再编写相应的驱动代码,只需要在编译内核时进行选择和配置即可。

1)BootLoader移植

BootLoader在嵌入式Linux内核执行之前初始化硬件设备,通过系统库函数mmap()将用户空间的内存区域映射到内核空间,为运行Linux内核做准备。U-Boot(Universal Boot Loader,通用引导装载程序)遵循GPL公约,支持ARM处理器和Linux,具有较高的可靠性和稳定性[6];此外还支持NFS挂载,使产品设计调试更加方便。本系统选用uboot1.1.6,将源码拷贝到ubuntu的工作目录下进行解压、配置和编译,编译成功后,将在uboot1.1.6目录下产生名为u-boot.bin的二进制映像文件。

2)Linux内核移植

GNU/Linux操作系统分为用户空间和内核空间两部分。用户空间主要包括应用程序和库函数。Linux内核位于内核空间中,包括了系统调用接口、进程管理、内存管理、虚拟文件系统和设备驱动等组件,在内存和CPU使用方面具有较高的效率。本系统选用Linux3.0.1版本的内核,该版本内核较稳定。编译内核采用图形化方式配置,首先需要安装libncurses5-dev软件包,命令为:#sudo aptget install libncurses5-dev。Linux系统自2.4 版本以后的内核都支持UVC视频设备。因此,不需要另外安装相应的驱动程序,降低了系统设计的复杂度。为了能够驱动USB摄像头,配置内核的时候,在Device Drivers选单里面选择 Multimedia devices,进入 Video capture adapters,将[*]V4L USB devices下的<* >USB Video Class(UVC)[*]UVC input events device support选中,保存退出。执行#make zImage 命令,最后在内核源码目录/linux-3.0.1/arch/arm/boot中得到Linux内核映像文件zImage。

3)根文件系统移植

Yaffs2是一种适用于NAND Flash的嵌入式文件系统,具有速度快、挂载时间短和对内存占用较小等优点,为嵌入式系统提供了直接访问文件系统的API[7]。使用Busybox软件构建Yaffs2文件目录,并且将一些基本的库函数和连接文件拷贝到相应的文件目录中。

3.2 MJPG-streamer移植

MJPG-streamer是一个视频流应用软件,使用V4L(Video for Linux)第二版本的接口,通过文件或者HTTP方式访问linux-UVC兼容摄像头[8]。本系统使用罗技C270网络摄像头进行视频数据采集,该摄像头属于UVC类型的视频设备,采用CMOS成像元件来捕获画面,支持720p视频拍摄,最高速度可达30 f/s(帧/秒),采集图像的最大分辨率为1 024×768,支持USB2.0接口。视频采集功能通过调用mmap()函数将视频采集设备映射到系统内存中来实现,取代了传统的直接读取用户空间设备的方式,绕过了内核缓冲区,加快了视频数据的处理速度,提高了实时性。

S3C6410处理器将摄像头采集到的图像存入globalbuffer中,当视频监控终端向视频Web服务器发出访问申请时,服务器会将globalbuffer缓冲中的图像数据连续发送给视频监控终端,形成视频流。MJPG-streamer利用网络摄像头自带的硬件压缩功能处理图像,减少了CPU的负荷,特别适用于嵌入式设备。

1)jpeg库的移植

MJPG-streamer应用程序采用jpeg库进行视频图像的编码,所以需要进行jpeg库的移植。

(1)将 jpeg库源码 jpegsrc.v8b.tar.gz拷贝到宿主机ubuntu12.04的工作目录/test下并解压;

(2)创建用来存放jpeg源码编译后生成的动态库文件目录:#mkdir-p/home/6410/jpeg;

(3)参数配置:#./configure--prefix=/home/6410/jpeg- -host=arm-none-linux-gnueabi;

(4)编译并安装,在/home/6410/jpeg目录下生成MJPG-streamer需要的动态 jpeg库文件 libjpeg.so.8,将该库文件拷贝到根文件系统中。

2)MJPG-streamer的移植

(1)将MJPG-streamer源码MJPG-streamer-r63.tar.gz拷贝到工作目录/test下并解压;

(2)修改input_uvc文件夹下的Makefile文件使程序能够调用上一步中编译好的jpeg的库文件和头文件。将CFLAGS+= -O2-DLINUX -D_GNU_SOURCE -Wall-shared-fPIC修改为CFLAGS+= -O2-DLINUX -D_GNU_SOURCE -Wall-shared -fPIC -I/home/6410/jpeg/include;将MYM(CC)MYM(CFLAGS)-ljpeg - o MYM@input_uvc.c v4l2uvc.lo jpeg_utils.lo dynctrl.lo修改为MYM(CC)MYM(CFLAGS)-ljpeg -L/home/6410/jpeg/lib - o MYM@input_uvc.cv4l2uvc.lo jpeg_utils.lo dynctrl.lo;

(3)编译:#make CC=arm-linux-gcc。编译完成后将生成动态库文件,将动态库文件input_uvc.so、output_http.so、output_file.so 和 www 文件夹拷贝到根文件系统中。

input_uvc.so组件用于系统从UVC摄像头中获取视频数据,并将视频数据输出到output_http.so和output_file.so这2个组件中。输出到output_file.so组件中的是jpg格式图片,客户端可通过浏览器以HTTP的方式访问视频和图像数据,也可以通过文件的方式访问图像数据。

4 系统测试

利用USB烧写方法,将编译好的u-boot、zImage和rootfs.yaffs2烧写到 S3C6410处理器中。视频设备在Linux中作为普通文件对其进行操作,USB摄像头的设备文件标识符为/dev/videoN(N为一个非负整数)。在根文件系统/sbin目录下编写一个开机自启动脚本start_mjpg,修改Linux启动配置文件/etc/init.d/rcS,加入/sbin/start_mjpg。脚本内容如下:mjpg_streamer–i“input_uvc.so–d/dev/video2–f30–r640x480”–o“output_http.so–w/www– c abc:123– p 8080”– o“output_file.so– d 60000–f/tmp”–b。其中:-d/dev/video2表示使用的视频设备节点为video2;-f 30表示帧率为30 f/s;-r 640×480表示图像分辨率为640×480;-w/www表示帧图像输出文件目录为/www;-c abc:123表示用户访问的用户名和密码;-p 8080表示端口号为8080;-d 60000表示保存图片间隔,单位为ms;-f/tmp表示保存jpg格式图片的文件夹;-b表示守护进程模式。

在minicom通信软件中,使用top命令查看内存和CPU使用情况,该视频监控系统的进程占用30%左右的内存,CPU的占用率为5%左右。

图4为PC机的测试结果,主要测试PC机作为固定终端,通过浏览器和VLC流媒体播放器进行实时视频监控的效果。PC机的参数为:AMD Liano APU A4-3300M 1.9 GHz CPU,2 Gbyte内存,Windows XP SP3。图4a是视频Web服务器采集的实时图像。在PC机的浏览器中输入视频 Web 服务器的 IP 地址(http://192.168.1.102:8080/?action=stream),即可进行实时视频监控,如图4b所示。此外,也可以通过VLC流媒体播放器进行实时视频监控,如图4c所示。

图5为平板PC和手机的测试结果,主要测试采用移动终端进行实时视频监控的效果。手机参数为:A9双核1.4 GHz处理器,Android 4.1.1 操作系统。平板 PC 参数为:A5X双核1 GHz处理器,iOS5.1操作系统。移动终端通过TP-LINK无线路由器接入Internet,在平板PC和手机的浏览器中输入视频Web服务器的IP地址,移动终端监控的实时视频图像分别如图5b和图5c所示。

图4 PC机的测试结果(截图)

图5 平板PC和手机的测试结果(截图)

图4和图5的测试结果表明,固定终端和移动终端获取的实时视频图像清晰流畅、无失真和抖动现象,取得了较好的实时视频监控效果。

5 总结

本文设计并实现了一种网络视频监控系统,系统以高性能的S3C6410处理器为核心构建视频Web服务器,利用开源的Linux和MJPG-streamer构建系统控制软件,采用B/S模式统一客户端,视频监控终端只要有浏览器就可进行实时视频监控,并且支持多个/多种监控终端同时进行实时视频监控。该系统具有成本低、体积小、功耗低、升级维护方便以及运行稳定可靠等特点,可用于校园监控、交通监控、家居安防以及远程教育等众多领域,具有较好的应用前景。

[1]吴金策,杜劲松.B/S架构嵌入式视频监控系统客户端设计[J].电视技术,2013,37(3):188-192.

[2]张跃进,谢昕.嵌入式网络数字视频监控系统的设计[J].计算机工程与设计,2009,30(4):805-807.

[3]马资道,张正炳.基于ARM-Linux的网络视频监控终端的软件实现[J].计算机测量与控制,2011,19(2):456-458.

[4]徐继富,张秋林.基于ARM11的IP网视频监控系统设计与实现[J].电视技术,2012,36(13):125-127.

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

[6] 郑国玲,李辉,武维.基于S3C2410的U-Boot的移植方法研究[J].计算机工程与设计,2009,30(24):5643-5645.

[7]熊胤琪,严华.YAFFS在嵌入式Linux系统中的构建与改进[J].电子技术应用,2012,38(3):33-36.

[8]张哲铭,巍衡华.基于NetLinx架构的远程控制系统设计及应用[J].自动化与仪表,2010(9):1-4.

猜你喜欢
内核嵌入式摄像头
浙江首试公路非现场执法新型摄像头
多内核操作系统综述①
摄像头连接器可提供360°视角图像
强化『高新』内核 打造农业『硅谷』
TS系列红外传感器在嵌入式控制系统中的应用
基于嵌入式Linux内核的自恢复设计
Linux内核mmap保护机制研究
搭建基于Qt的嵌入式开发平台
嵌入式软PLC在电镀生产流程控制系统中的应用
奔驰360°摄像头系统介绍