基于嵌入式Web服务器的视频监控系统设计.pdf
5算机安全 2011.02学术.技术基于嵌入式 Web 服务器的视频监控系统设计张军卫,韩佩富,矫春海(燕山大学 信息科学与工程学院,河北 秦皇岛 066004)摘 要:对嵌入式 Internet 的远程监控系统进行了研究,构建了一个基于 ARM 处理器和 Linux 操作系统的嵌入式 B/S 模式的远程视频监控系统。系统以嵌入式 Linux 和嵌入式微控制器 S3C2440 为核心平台,通过嵌入式平台建立的 Web 服务器将 USB 摄像头采集来的视频信号经过网络传输,在用户端 PC 可以接收到视频图像,并根据需要来控制云台的旋转,以完成对家庭的网络视频监控。关键词:Arm;Linux;嵌入式 Web 服务器;视频监控;CGIDesign of Video Monitoring System based on Embedded Web ServerZHANG Jun-wei,HAN Pei-fu,JIAO Chun-hai(College of Information Science and Engineering,Yanshan University,Qinhuangdao,Hebei 066004,China)Abstract:This article has researched the embedded Internet long-distance monitoring system and constructed one embedded B/S pattern long-distance video monitoring system which based on the ARM processor and Linux operating system.The core platform of the system is embedded Linux systems and embedded micro-controller core S3C2440,through the platform establishing an embedded Web server to transmist the video signal from the USB camera,we can receive the video on the PC at the client-side and control the revolution of the holder when necessary,so as to complete the video monitoring of the family.Key words:Arm;Linux;Embedded Web Server;Video Surveillance;CGI1 引言近年来,随着网络技术、传输技术和视频压缩等相关技术的不断发展。视频监控系统在生产生活中的各个领域得到了广泛应用,视频监控系统逐渐从模拟化过渡到了数字化,并且呈现出网络化、集成化的发展趋势,基于嵌入式 Web 的网络视频监控系统逐渐得到了人们的广泛关注,以网络为基础的数字视频监控系统已经发展成为视频监控系统发展的主流。本文对嵌入式 Internet 的远程监控系统进行了研究,构建了一个基于 ARM 处理器和 Linux操作系统的嵌入式 B/S 模式的远程视频监控系统。该系统把图像采集、视频压缩和 Web 功能集中到一个体积很小的设备内,可以直接连入局域网和 Internet,达到即插即用,省掉多种复杂的电缆,安装方便,用户也无需安装任何硬件设备即可对监控现场进行监控。2 监控系统的体系结构该系统的整体有三部分组成,前端是用于视频采集的 USB 摄像头,中间部分是移植了嵌入式Linux 操作系统的 ARM9 开发板,它的作用是对采集来的数字图像信号进行 MPEG-4 压缩,并内建嵌入式 Web 服务器和视频流媒体服务器,从而将视频传递给远端用户。第三部分是监控端,由带有浏览器的 PC 机组成,它用来浏览远端的视频,同时也可以通过网络对系统平台进行控制。系统的组成框图如图 1 所示。图 1 系统的组成框图嵌入式远程视频采集系统主要由硬件和软件两部分组成。硬件部分有 USB 摄像头和 ARM9 开发板;软件部分由系统软件(包括 Bootloader、嵌入式 Linux 操作系统和驱动程序)和应用软件(包括Web 服务器、CGI 程序、视频采集、压缩编码和62011.02 计算机安学术.技术云台控制等)。其中,软件部分是本文的设计重点。3 视频监控系统的工作原理在嵌入式的视频监控系统应用结构中,整个系统采用 B/S(浏览器/服务器)体系结构,即由客户端通过 Web 向服务器提出请求,服务器对请求作出确认响应并执行相应的任务(如向客户端发送组播地址、图像格式、压缩格式等),建立连接后就可以在客户端监控被控点,从而实现远程网络监控。服务器(Web Server)端即现场监控点的软件结构包括采集模块、压缩编码模块、网络通信模块、控制模块等。对于控制命令来说,浏览器接受用户提供的控制命令,然后形成相应的命令帧格式,发送到网络上,Web 服务器对接收到的控制命令进行分析解释,并根据授权,通过控制系统驱动摄像机执行相应的命令,如云台变向、镜头变焦等,从而实现对现场的实时监控,见图 2。图 2 视频监控系统的工作原理B/S(浏览器/服务器)模式的通信构架如下,用户只需在远程客户机安装一个普通的浏览器软件,其他大部分工作由 Web 服务器完成 B/S 模式开发的监控软件,降低了对系统软件的要求,避免了用户对客户端的安装和设置,实现了软件安装的简单化、自由化。3.1 Web 服务器与 CGI 程序Web 服务器通过 HTTP 协议与监控端浏览器软件进行信息交互,提供其他应用程序模块的接口以及视频数据浏览界面和摄像机控制界面。此外,它还要对监控端的访问权限进行控制,过滤监控端的请求和控制信息,处理多个监控端的请求和控制的同步和优先级问题。本系统选择适合于嵌入式系统的 Boa Web 服务器。Boa 是一个单任务的 HTTP 服务器,支持能够实现动态 Web 技术的CGI 技术,源代码开放、性能高。同时服务器程序本身所占空间很小,因而十分适用于嵌入式系统。同时,本系统采用了 CGI(公用网关接口)来实现动态 Web 技术,CGI 规定了 Web 服务器调用其他可执行程序(CGI 程序)的接口协议标准。3.2 通用网关接口 CGI系统对远程设备控制功能是通过 CGI(通用网关接口)程序和表单实现的。CGI 是在 HTTP 服务器上运行外部程序的接口,它允许将其输出结果经HTTP 服务器传送给 Web 浏览器。如果没有 CGI,Web 服务器只能提供静态的文档和其他页面或服务器进行链接。有了 CGI,程序就可以在后台进行各种动态的操作。根据 CGI 接口规范,应用程序与Web 服务器之间的通讯方法包括环境变量、命令行、标准输入与标准输出。其中,使用最广泛的是环境变量,Web 服务器通常要实现标准的 CGI 环境变量。例如云台控制,在本系统中,当用户通过浏览器向服务器发出控制信息时,服务器守护进程启动 CGI模块,CGI 模块将控制命令传给串口通信程序,由该程序将控制命令转换成云台能够识别的数据报,通过RS232 串口发送给云台,云台产生相应的动作。CGI 使用 HTML 表单向嵌入式 HTTP 服务器发送信息,基本语法如下:其中,METHOD 属性指定将数据传送到嵌入式 HTTP 服务器的方法输入方法有两种:GET 和POST。ACTION 属性定义要对表单数据进行处理的 CGI 脚本的 URL。CGI 定义了 HTTP 服务器和 CGI 应用程序之间的接口,向 CGI 程序传送数据,CGI 程序通过这个接口,访问用户传送来的信息,并将程序执行结果通过 HTTP 服务器返回给用户。7算机安全 2011.02学术.技术4 系统中重要模块的设计4.1 视频图像采集模块在 Linux 下的视频采集是通过 Video4Linux 实现的,Video4Linux 是广泛采用的总线标准,为针对视频设备的应用程序编程提供一系列接口函数。Linux 视频采集的操作流程如下(见图 3):图 3 视频采集流程(1)打开设备文件。指定要操作的摄像头设备文件 dev video0,调用 open()打开该设备文件。Int fd=open(”/dev/vedio0”,O_RDWR)。(2)获取摄像头参数。通过 ioctl(_fd,VIDIOCGCAP,&capability)函数来读取struct video_capability结构体中有关摄像头的信息(设备名称、支持的最大最小分辨率、信号源信息等)。(3)设置摄像头缓冲区中图像参数。(4)进行视频采集。视频采集有两种方法:mmap()内存映射方式和 read()直接读取。mmap()系统调用使得进程之间通过映射同一个普通文件实现共享内存。普通文件被映射到进程地址空间后,进程可以向访问普通内存一样对文件进行访问,不必再调用 read(),write()等操作。采用共享内存通信的一个显而易见的好处是效率高,因为进程可以直接读写内存,而不需要任何数据的拷贝。mmap 方式下真正做视频截取的是 ioctl(vd-fd,VIDIOCMCAPTURE,&(vd-mmap);若调用成功,开始一帧的截取,它是非阻塞的,是否截取完毕留给 VIDIOCSYNC 来判断。调用VIDIOCSYNC 等待一帧截取结束(ioctl(vd-fd,VIDIOCSYNC,&frame)若成功,表明一帧截取已完成。可以开始做下一次 VIDIOCMCAPTURE,frame 是当前截取的帧的序号。(5)清理内存,关闭视频设备。4.2 视频图像的 MPEG 压缩视频数据压缩模块将采集到的视频数据使用MPEG4 压缩标准进行压缩编码,生成 MPEG4 视频数据流,再由视频数据传输模块通过网络发送给请求监控的客户端。本系统设计中采用开源的高效的 xvidocre 多媒体编解码软件来作为 MPEG4 视频压缩的核心算法。XVID 编码器对视频图像进行编码压缩的实现步骤如下:(1)第一步,初始化。创建最为关键的两个结构体:编码帧信息结构体(xvid_enc_frame_t)和编码帧状态信息结构体(xvid_enc_stats_t),分别用于传入参数和统计编码结果。(2)第二步,读取第一帧的图像信息,调用 read_yuvdata()函数,从原始 YUV 文件缓冲区中读取第一帧图像的信息。将相应图像信息参数传入定义的 xvid_enc_frame_t 结构体和xvid_enc_stats_t 结构体中。(3)第三步,帧内编码,调用 CodeIntraMB()函数设置编码模式为intra,将所有和运动有关的变量设为 0,如果差分量化值不为 0,设为intra-Q。然后,调用 I 帧编码函数 static int FrameCodeI(Encoder*pEnc,Bitstream*bs)进行帧内编码 I-VOP。(4)第四步,将重建帧交换为参考帧,从帧队列中取下一帧图像作为编码帧,即当前帧,并初始化(同第一步)。(5)第五步,调用 xvid_encore(enc_handle,XVID_ENC_ENCODE,&xvid_enc_frame,&xvid_enc_stats)函数,对该帧图像进行编码。(6)第六步,根据第五步确定的编码方式对该帧进行编码。如果是帧内编码方式,转第三步;如果是帧间编码方式,则调用 P 帧编码函数 static 82011.02 计算机安学术.技术int FrameCodep(Encoder*pEnc,Bitstream*bs)或 是 B 帧 编 码 函 数 static int Frame CodeB(Encode*pEnc,Bitstream*bs)进行帧间编码。然后转第四步,保存编码帧信息。(7)第七步,编码完最后一帧,关闭文件、释放空间。4.3 云台的控制4.3.1 云台协议的介绍云台解码驱动器是全方位摄像仪的重要驱动设备,主要用于接收来自服务器的控制信号,进行解码并驱动云台、可变摄像头的运动。云台控制协议众多,本系统采用的是市场上最为通用的派尔高公司的 PELCO-D 协议,它的格式如表 1 所示。表 1 PELCO-D 协议的格式所有的值都是用的 16 进制表示。同步字通常都是 0 xFF。地址码是指与服务器通信的那台设备的逻辑地址,可以在设备中设置。命令字 1 和命令字 2 设置如表 2 所示。表 2 命令字 1 和命令字 2 的设置内容4.3.2 云台协议部分的程序设计首先对云台协议文件的解析。这一部分主要是完成将上层 Web 服务端通过网络接收的云台协议文件进行转换。由于云台协议文件是文本文件,按照一定格式书写,因此文件解析主要是将文本中有效部分的 ASCII 码转换为十六进制的云台控制码。然后,将转换后的云台控制码通过串口发送给云台解码器解码来控制云台的上、下、左、右的动作。5 结束语嵌入式系统的 Internet 直接接入正成为当今技术的热点,基于嵌入式 Web 的远程视频监控系统正是投入到这一热点。本系统为嵌入式网络视频监控系统的应用提供了一个完整的解决方案,并且系统具有体积小、功耗低、实时性强等特点,较容易今后对系统进行升级和扩展,因此该系统具有非常广泛的应用前景。参考文献:1 刘富强.数字视频监控系统开发及应用.北京,机械工业出版社,2003.2 梨洪松.数字视频技术及其应用.北京,清华大学出版社,1998.3 刘伟,李小武,罗明.CGI 技术全面接触.北京,清华大学出版社,2001.4 李昱,林俊超,宋飞.ARM 嵌入式应用系统开发典型实例.北京,中国电力出版社,2005.5 浦学东,崔金钟.基于 DSP TMS320DM642 的 XVID 视频编码的实现.计算机应用,2007.6.6 冯伟,王博.嵌入式 linux 案例开发指南.北京,中国电力出版社,2008.作者简介:张军卫(1984-),硕士,燕山大学电路与系统专业,从事嵌入式系统方向的研究。收稿日期:2010-12-29