基于ARM的视频监控系统的研究及应用

时间:2022-07-24 02:31:45

基于ARM的视频监控系统的研究及应用

摘要:文中提出了一种基于ARM9处理器和嵌入式Linux的远程视频监控系统。该系统采用USB接口的摄像头获取原始视频图像数据,经过JPEG压缩编码处理,然后通过UDP协议完成网络传输,最后构建嵌入式Boa服务器,客户端通过Java Applet与Boa服务器交互,完成了视频图像的远程控制。该系统具有开发成本低、安全性高、稳定性强及分布式远程监控的优点。

关键词:嵌入式Linux 视频监控 Boa服务器 UDP Java Applet

中图分类号:TP277 文献标识码:A 文章编号:1007-9416(2013)12-0037-02

随着计算机技术的不断发展、音视频编码技术的提高以及网络带宽的不断增大,视频监控技术的应用已经从传统的安防领域发展到与我们生活相关的各个领域,因此人们对监控系统也提出了更高的要求,如何开发一种成本低、智能化程度高,稳定性和安全性高的视频监控系统成了必然的趋势。文中在嵌入式软硬件架构ARM+ Linux下实现了网络视频监控系统,相比模拟监控系统及数字硬盘录像机,这种监控系统由于采用的ARM处理器使得硬件成本更低,体积更小,功耗更低,而开源的Linux系统使得软件成本投入更少,安全性更高,加上成熟的压缩算法使得图像更加清晰,而嵌入式Web服务器的移植可以突破集中的监控方式。这种监控系统更有利于视频监控的大范围普及和更好地结合智能监控。

1 系统软硬件结构及设计

系统总体结构由USB接口的摄像头、基于ARM和Linux的流媒体服务器[1]、网络传输和客户端组成,如图1所示。

USB摄像头负责远端视频数据的采集,经过USB协议传输到嵌入式流媒体服务器中,在其上进行视频数据的JPEG压缩编码处理,最后通过UDP协议向客户端传输压缩处理后的视频数据,远程终端通过Web服务器和接受显示程序即可完成视频的远程实时监控了。

1.1 系统的硬件结构

系统中硬件选用飞凌FL2440开发板作为嵌入式网络视频服务器的开发平台,选用中星微公司生产的主芯片为ZC301P的USB摄像头进行视频采集,远程客户端采用一台带有浏览器的PC机。FL2440开发板上集成了三星公司ARM9系列的S3C2440A的微处理器,64M的SDRAM、256M的FLASH、两个通用的串行口、通过以太网控制芯片DM9000扩展一个10M以太网接口,4个USB主口。系统的硬件结构图如图2所示。

1.2 系统的软件结构

系统采用Linux操作系统作为软件开发平台,编译环境采用的是交叉编译器cross-2.95.3,嵌入式Linux的内核选用的是2.6.12,根文件系统采用的是qte-yaffs,系统初始化引导程序bootloader采用的是飞凌2440BOOT_V5.1_FL,再此基础之上移植开发了USB驱动程序和网络驱动程序。

在Linux上完成应用程序的开发来实现视频数据的采集、压缩编码、网络传输控制等功能,主要包括嵌入式流媒体服务器、嵌入式Web服务器Boa和客户端三个功能模块。嵌入式流媒体服务器通过Linux内核中支持视频的V4L API、JPEG压缩器和UDP协议分别完成视频图像数据的采集、压缩编码和网络传输。嵌入式Web服务器完成客户端请求处理,客户端通过开发Java Applet程序或者编写CGI脚本完成与服务器的动态交互,客户端实现对远程传输过来的视频数据的实时显示。系统的软件结构图如图3所示。

2 系统的实现

2.1 Linux在ARM平台的移植

Linux具有内核小,效率高,强大的网络功能支持等优点,但由于嵌入式系统资源的有限性,因此需要对内核进行配置和裁剪,使之放到容量较小的Flash中。这里Linux的裁剪方式采用的是动态模块加载。

2.2 基于Video 4 Linux的视频采集

Video4Linux(简称V4L)是Linux内核中支持影像设备的一组API,它配上视频采集设备USB摄像头和USB驱动就可以完成影像的采集,本文通过Video4Linux模块的编程接口实现了视频图像的采集,摄像头中的各种I/O接口的控制主要通过Video4Linux接口标准调用驱动的相关函数完成的,主要接口函数有Open、ioctl、Read、Write、select、mmap等。Linux下视频图像的采集过程如下:(1)打开视频设备文件。Linux对设备的操作就是对设备文件的操作,顾只需调用文件系统的open函数:cam=open(“/dev/video”,O_RDWR),开启成功时,cam为返回的文件描述符。(2)获取视频设备信息。使用控制接口函数ioctl(cam,VIDIOCGCAP,&cap)来获取摄像头属性信息,cap用于保存获取的设备信息。(3)获取视频图像属性信息。通过控制接口函数ioctl(cam,VIDIOCSPICT,&pic)来获取图像信息,pic用于保存获取的图像信息。(4)将设备文件映射到内存。首先对video_mmap结构类型的变量mapbuf赋初值,包括width,height,format等,然后使用mmap接口将采集缓冲区映射到内存:grab_data=(char*)mmap(0,vidbuf.size,PORT_READ|PORT_WRITE,MAP_SHARED,cam,0);//grab_data为采集缓冲区映射到内存的首地址。(5)视频图像数据的采集。通过调用接口函数ioctl(cam,VIDEOCMCAPTURE,&mapbuf)来将数据直接采集到grab_data中,并调用函数ioctl(cam,VIDIOCSYNC,&grab_buf)传递VIDIOCSYNC来检查一次视频采集的完成。

2.3 Linux下图像数据的JPEG 压缩

数据采集成功后可以通过GTK图形支持库来实现视频数据的本地显示器的显示,也可以继续对视频图像数据进行处理,这里的处理方式是将视频数据进行JPEG压缩。本系统采集图像数据时得到的视频图像格式是JPEG,已经是经过压缩后的格式了。因为USB摄像头内置了JPEG硬件压缩[2]。

2.4 基于TCP/IP协议的视频传输

基于视频控对实时性要求很高,而且数据量比较大,系统采用了UDP协议来传输视频数据,在Linux系统下采用套接字编程按照UDP网络传输流程,分别在ARM开发板和客户机端建立数据报类型的套接字,依次调用bind、sendto、recvfrom函数完成视频数据的传送。

3 远程客户端的实现

4 测试结果与分析

经过实际测试,该数据采集前端达到了预期各项目标,图4为通过网页浏览器得到的实验结果。系统在适当的分辨率和长时间监控下运行比较稳定,实时性比较好,满足视频监控的基本要求。

5 结语

文中实现在ARM+Linux软硬件架构上的网络视频监控系统比传统的视频监控系统具有更强的通用性,组网方便和跨平台远程监控的特点,为物联网领域的应用提供了参考价值。

参考文献

[1]孟旭霞,覃少华.嵌入式远程视频监控系统的设计与实现[J].微计算机信息,2009,25(1-2):38-40.

[2]伍俭,罗桂娥.基于B/S模式的嵌入式视频监控系统的设计[J].微型机与应用,2010(4):74-76.

[3]张广,侯立刚,曹江涛.基于ARM9的网络视频监控系统设计与实现[J].电子设计工程,2013,21(12):161-163.

上一篇:基于迁移策略的动态工作流的研究与设计 下一篇:基于2—可加模糊测度的应急方案二级评估方法研...