论文部分内容阅读
摘要:为说明数字视频监控所具有的模拟监控无法比拟的优点,本文较为详细的介绍了在S3C44B0X芯片上,基于嵌入式uClinux操作系统构建嵌入式Web服务器的网络视频监控系统的软件开发过程,并介绍了数字视频监控系统的硬件组成,阐明了嵌入式Web服务器的机制与机理,并结合具体的实践给出了一些相应的实现方法,以供业内同行参考使用。
关键词:嵌入式Web服务器;CGI;数字视频监控;设计
中图分类号:TP311文献标识码:A文章编号:1009-3044(2007)18-31614-03
Design of Video Surveillance System on Embedded Web Server
WANG Chun-he
(The Subsidiary Company of Railroad Communication,Yichun 153000,China)
Abstract:In order to explain the digital video frequency monitoring has thesimulation monitoring is unable the merit which compares, This paper particular introduces a video surveillance system's software development process by building an embedded Web Server on the basis of embedded uClinux operating system in the S3C44B0X,and also introduces the hardware component,then illuminates the mechanism of embedded Web Server ane gives some responding implementation method. Unifies the concrete practice,The supplying industry in colleague refers to the use
Key words:Embedded Web Server;CGI;digital video surveillance;design
1 引言
数字视频监控具有模拟监控无法比拟的优点,可充分利用计算机快速处理能力对其进行压缩、分析、存储和显示,更适合远距离传输。本数字视频监控系统的开发以嵌入式uClinux操作系统为平台,把模拟的视频信号转化为数字YUV信号,经过MPEG4压缩算法编码为数字视频流,通过以太网传输到客户端。用户使用配套的客户端软件,访问网络视频服务器所在的IP地址,就可以实时观看通过网络传输的图像。同时对于授权用户,还能对云台进行控制。
嵌入式HTTP服务器是控制网络的关键设备,它起着连接现场层和高层企业信息网的作用。同时,嵌入式HTTP服务器又是实现设备Internet远程监控的关键技术。
一般来说,将嵌入式系统接入Internet有两种形式,将高速微控制器直接接入TCP/IP协议族,或通过嵌入式网关由它实现嵌入式系统与Internet的信息交互。本系统采用由嵌入式网关构建的Web服务器形式。
2 系统构成
硬件电路主要包括:CPU处理模块;视频输入模块,音频输入模块:现场的数据采集设备将采集的数据送入嵌入式系统,系统对视频数据交MPEG4压缩芯片进行处理,对视频数据进行PCM编码;云台及变焦远程控制模块:控制信号从客户端通过TCP/IP网络传输流入嵌入式服务端,由嵌入式系统的云台及变焦远程控制模块对客户命令进行解析并发出相应的处理命令,以控制现场摄像机动作的切换。
视频压缩模块:采用美国WIS公司的MPEG4视频压缩芯片GO7007SB,它的输入格式支持CCIR-601和8位CCIR-656 YUV 4:2:2,以及COMS影像传感器常用的四种RGB Bayer格式。采用运动预测引擎,高精度DCT/IDCT算法,量化与反量化引擎视频压缩技术,支持完美的音视频同步,能输出MPEG4,MPEG2,MJPEG等数据流格式,生成的2Mbit/s MPEG4视频质量接近DVD。其灵活的比特率控制(CBR/VBR)可适应不同带宽的需要。
ARM与GO7007SB间的通信是通过16位HPI总线的接口来实现的,HPI连接GO7007SB端口与ARM总线控制器,S3C44B0以软件方式建立一内存映射与GO7007SB共享SDRAM,用于各种命令、数据的交互。
图1 硬件结构图
3 uClinux平台下Web Server THTTPD的配植
本系统使用已去除MMU(内存管理单元)的uClinux2.4.20。这是一个稳定的版本,系统运行可靠、对各种硬件支持的接口都非常完善,在嵌入式OS方案中,是一个极好选择。在uClinux下,主要有三个Web Server:HTTPD、THTTPD和BOA。HTTPD是最简单的一个Web Server,它的功能最弱,不支持认证,不支持CGI。THTTPD和BOA都支持认证、CGI等,功能都比较全。以下是THTTPD的配置过程
(1)执行make menuconfig把THTTPD编译到内核,在应用程序network application 项下面选择THTTPD。
(2)编制配置文件Thttpd.conf放置在目标板/etc/config目录下。
ServerName Samsung-ARM
DocumentRoot /etc/config
ScriptAlias /cgibin/ /etc/config/cgibin/
ScriptAlias /index.html /home/html/index.html
(3)编译烧写内核:重新编译内核后,通过烧写工具烧写内核,就可以在PC上通过IE浏览器访问开发板上的Web Server。例如,输入开发板的IP 地址http://192.168.0.128,即可访问到自己做的网页index.html了。
4 嵌入式Web服务器程序设计
4.1服务器工作模型[2]
Linux系统网络服务器主要分为两种:循环服务器和并发服务器。循环服务器在同一时刻只能处理一个客户机请求,而并发服务器在同一时刻可以处理多个客户机请求。TCP套接字大多采用并发服务器提供服务。服务器所需做的工作是:首先创建一个专用子进程来专门处理数据,通过串口对设备进行数据的收发,对数据进行处理;然后再根据用户的请求创建相对应的子进程,将处理的数据交给Web Server子进程,子进程将数据显示到Web页下传给客户,并接收客户的参数设置命令,将参数设置上传到远程设备。用户子进程与串口数据处理子进程之间采用进程间通信来实现数据交换。服务器任何时刻都在监听用户请求。若用户发出监控请求,而且通过了密码校验,服务器就会产生一个子进程来处理该用户的请求:发送数据,接收设置等。
4.2嵌入式Web服务器的实现
(1)Web服务器守护模块
该模块主要用来完成软件的初始配置、服务器初始化、被动连接建立和系统参数设定等功能。它首先读取flash,创建认证文件,并创建连接状态表,初始化系统信号量。然后调用BSD4.3插口例程,监听TCP 80端口,为接收到的连接请求创建新任务。最后,该模块检测各连接状态,如产生错误,则关闭连接或重启服务器。
(2)请求处理模块
该模块主要用来接受HTIP请求、解析HTTP请求、进行授权认证、选择处理模块、生成响应信息和发送响应。它又可细分为3个子模块,即处理选择子模块、CGI动态处理子模块和静态页面处理子模块。
处理选择子模块:它首先为本连接创建连接结构体、请求结构体和响应结构体,并为连接创建私有环境变量和超时计时器。然后,它接收客户端的数据,解析这些数据并将合法的请求信息进行授权认证,根据URL选择CGI动态处理子模块或静态页面处理子模块进一步处理请求。最后,等待处理结果(处理结果将被写入响应结构体),并将处理结果按照HTTP1.1的要求发送给客户端浏览器。
CGI动态处理子模块:根据已解析的HTTP请求,首先调用消息头处理库模块的函数处理请求,初始化并填写CGI环境变量。然后执行CGI函数,等待执行结果。最后,根据CGI1.1规范解析返回的结果,并生成响应信息,填写在响应结构体中,返回处理选择子模块。
静态页面处理子模块:根据已解析的HTTP请求,首先调用消息头处理库模块的函数处理请求,然后查询内存中的静态页面镜像,并生成响应信息,填写在响应结构体中,返回处理选择子模块。
(3)消息头处理模块
根据由请求处理模块传递来的不同的请求头和总体头,按照HTTP1.1协议要求进行处理,并将处理结果返回给请求处理模块。
5 服务器端程序设计
5.1通用的自定义标记处理函数和CGI处理函数
void cgi_handler(struct *resinfo,struct *cgi_handler_stru);
void mark_handler(struct *resinfo,struct *mark_handler_stru)
自定义标记处理函数用于对自定义标记的处理,每一类自定义标记对应一种具体的自定义标记处理函数,同一类自定义标记的不同数据点用参数来区分。所有自定义标记处理函数被放在一起,构成一个函数指针结构类型mark_handler_stru。CGI处理函数用变量名来区分,同一类变量对应一种CGI处理函数。与自定义标记处理函数类似,所有CGI处理函数也被放在一起,构成一个函数指针结构cgi_handler_stru。
通用的自定义标记处理函数和CGI处理函数会根据数据结构resinfo的信息调用函数指针结构mark_handler_stru和cgi_handler_stru。这样,底层对于HTTP协议处理层是透明的。不论底层是RS485,CAN还是命名管道(项目中使用命名管道与现场控制任务交互),HTTP协议处理层都是相同的,嵌入式HTTP服务器代码因此具备了通用性。
图2 嵌入式Web服务器的处理流程
5.2 HTTP服务器的实现
首先使用网页设计软件如FontPage设计一个网页,设命名为index.html,网页中含图片image.gif,存放在/home/html/下,然后将文件导出到S3C44B0X模块的HTTP服务器中。主程序中运行HTTP服务器的相关代码如下[4]:
#define SERVER_PORT 80
int main(void){
…
int s,fd;
int len;
struct sockaddr_in ec;
struct sockaddr_in server_sockaddr;
//创建TCP Socket连接到网络
if((s=socket(AF_INET,SOCK_STREAM,IPPROTOCOL_TCP))==-1)
{perror(“Unable to obtain network\n”);exit(1);}
server_sockaddr.sin_family=AF_INET;
server_sockaddr.sin_port=htons(SERVER_PORT);
server_sockaddr.sin_addr.s_addr=htons(INADDR_ANY);
if(bind(s,(struct sockaddr*)&server_sockaddr,sizeod(server_sockaddr))==-1)
{perror(“Unable to bind socket\n”);exit(1);}
//服务器应用程序被动打开一个TCP套接字进行交换数据
if(listen(s,24)==-1)
{perror(“Unable to listen\n”);exit(1);}
//处理Web事务
while(1)
{
len=sizeof(ec);
if((fd=accept(s,(void *)&ec,&len))==-1)
{exit(1);close(s);}
HandleConnect(fd);//相关任务
}
…
return 0;}
5.3通过CGI接口控制拍摄
在HttpSpec http_flashspec[]中加入以下定义:
{HTTPSPEC_FUNCTION,”/get_photocgi”,0,get_phototoggle,0,NULL,NULL}
在网页中嵌入按钮图标,使其链接到”/get_photocgi”,点击网页上此按钮,程序将跳转执行以下函数:
int get_phototoggle(HTTPState* state){
get_photo; //拍摄图像
cgi_redirectto(state,’index.html’);//跳转到index.html网页,该网页含所拍摄的图像文件
return 0;}
6 结论
采用了MPEG4视频压缩芯片GO7007SB,支持多种媒体文件格式:mp3,m2v,mpg,mpeg,实现本地及远端一点查看多点的网络图像监控服务。可在图像监控过程中,对云台进行控制和设置网络摄像机参数,包括摄像头姿态控制,摄像机变焦、调焦、自动巡视,图像传输速度调节,色彩调节(对比度、亮度、色饱和度),摄像机环境设置,摄像机图像采集格式设置等。
参考文献:
[1]王学龙.嵌入式Linux系统设计与应用[M].北京:清华大学出版社,2001.1.
[2]Jernmy Bentham.嵌入式系统Web服务器TCP/IP Lean[M].北京:机械工业出版社,2003.
[3]Tim JonesM.嵌入式系统TCP/IP应用层协议[M].北京:电子工业出版社,2003.
[4]张斌,高波.等.Linux网络编程.北京:清华大学出版社,2000.
注:本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文。
关键词:嵌入式Web服务器;CGI;数字视频监控;设计
中图分类号:TP311文献标识码:A文章编号:1009-3044(2007)18-31614-03
Design of Video Surveillance System on Embedded Web Server
WANG Chun-he
(The Subsidiary Company of Railroad Communication,Yichun 153000,China)
Abstract:In order to explain the digital video frequency monitoring has thesimulation monitoring is unable the merit which compares, This paper particular introduces a video surveillance system's software development process by building an embedded Web Server on the basis of embedded uClinux operating system in the S3C44B0X,and also introduces the hardware component,then illuminates the mechanism of embedded Web Server ane gives some responding implementation method. Unifies the concrete practice,The supplying industry in colleague refers to the use
Key words:Embedded Web Server;CGI;digital video surveillance;design
1 引言
数字视频监控具有模拟监控无法比拟的优点,可充分利用计算机快速处理能力对其进行压缩、分析、存储和显示,更适合远距离传输。本数字视频监控系统的开发以嵌入式uClinux操作系统为平台,把模拟的视频信号转化为数字YUV信号,经过MPEG4压缩算法编码为数字视频流,通过以太网传输到客户端。用户使用配套的客户端软件,访问网络视频服务器所在的IP地址,就可以实时观看通过网络传输的图像。同时对于授权用户,还能对云台进行控制。
嵌入式HTTP服务器是控制网络的关键设备,它起着连接现场层和高层企业信息网的作用。同时,嵌入式HTTP服务器又是实现设备Internet远程监控的关键技术。
一般来说,将嵌入式系统接入Internet有两种形式,将高速微控制器直接接入TCP/IP协议族,或通过嵌入式网关由它实现嵌入式系统与Internet的信息交互。本系统采用由嵌入式网关构建的Web服务器形式。
2 系统构成
硬件电路主要包括:CPU处理模块;视频输入模块,音频输入模块:现场的数据采集设备将采集的数据送入嵌入式系统,系统对视频数据交MPEG4压缩芯片进行处理,对视频数据进行PCM编码;云台及变焦远程控制模块:控制信号从客户端通过TCP/IP网络传输流入嵌入式服务端,由嵌入式系统的云台及变焦远程控制模块对客户命令进行解析并发出相应的处理命令,以控制现场摄像机动作的切换。
视频压缩模块:采用美国WIS公司的MPEG4视频压缩芯片GO7007SB,它的输入格式支持CCIR-601和8位CCIR-656 YUV 4:2:2,以及COMS影像传感器常用的四种RGB Bayer格式。采用运动预测引擎,高精度DCT/IDCT算法,量化与反量化引擎视频压缩技术,支持完美的音视频同步,能输出MPEG4,MPEG2,MJPEG等数据流格式,生成的2Mbit/s MPEG4视频质量接近DVD。其灵活的比特率控制(CBR/VBR)可适应不同带宽的需要。
ARM与GO7007SB间的通信是通过16位HPI总线的接口来实现的,HPI连接GO7007SB端口与ARM总线控制器,S3C44B0以软件方式建立一内存映射与GO7007SB共享SDRAM,用于各种命令、数据的交互。
图1 硬件结构图
3 uClinux平台下Web Server THTTPD的配植
本系统使用已去除MMU(内存管理单元)的uClinux2.4.20。这是一个稳定的版本,系统运行可靠、对各种硬件支持的接口都非常完善,在嵌入式OS方案中,是一个极好选择。在uClinux下,主要有三个Web Server:HTTPD、THTTPD和BOA。HTTPD是最简单的一个Web Server,它的功能最弱,不支持认证,不支持CGI。THTTPD和BOA都支持认证、CGI等,功能都比较全。以下是THTTPD的配置过程
(1)执行make menuconfig把THTTPD编译到内核,在应用程序network application 项下面选择THTTPD。
(2)编制配置文件Thttpd.conf放置在目标板/etc/config目录下。
ServerName Samsung-ARM
DocumentRoot /etc/config
ScriptAlias /cgibin/ /etc/config/cgibin/
ScriptAlias /index.html /home/html/index.html
(3)编译烧写内核:重新编译内核后,通过烧写工具烧写内核,就可以在PC上通过IE浏览器访问开发板上的Web Server。例如,输入开发板的IP 地址http://192.168.0.128,即可访问到自己做的网页index.html了。
4 嵌入式Web服务器程序设计
4.1服务器工作模型[2]
Linux系统网络服务器主要分为两种:循环服务器和并发服务器。循环服务器在同一时刻只能处理一个客户机请求,而并发服务器在同一时刻可以处理多个客户机请求。TCP套接字大多采用并发服务器提供服务。服务器所需做的工作是:首先创建一个专用子进程来专门处理数据,通过串口对设备进行数据的收发,对数据进行处理;然后再根据用户的请求创建相对应的子进程,将处理的数据交给Web Server子进程,子进程将数据显示到Web页下传给客户,并接收客户的参数设置命令,将参数设置上传到远程设备。用户子进程与串口数据处理子进程之间采用进程间通信来实现数据交换。服务器任何时刻都在监听用户请求。若用户发出监控请求,而且通过了密码校验,服务器就会产生一个子进程来处理该用户的请求:发送数据,接收设置等。
4.2嵌入式Web服务器的实现
(1)Web服务器守护模块
该模块主要用来完成软件的初始配置、服务器初始化、被动连接建立和系统参数设定等功能。它首先读取flash,创建认证文件,并创建连接状态表,初始化系统信号量。然后调用BSD4.3插口例程,监听TCP 80端口,为接收到的连接请求创建新任务。最后,该模块检测各连接状态,如产生错误,则关闭连接或重启服务器。
(2)请求处理模块
该模块主要用来接受HTIP请求、解析HTTP请求、进行授权认证、选择处理模块、生成响应信息和发送响应。它又可细分为3个子模块,即处理选择子模块、CGI动态处理子模块和静态页面处理子模块。
处理选择子模块:它首先为本连接创建连接结构体、请求结构体和响应结构体,并为连接创建私有环境变量和超时计时器。然后,它接收客户端的数据,解析这些数据并将合法的请求信息进行授权认证,根据URL选择CGI动态处理子模块或静态页面处理子模块进一步处理请求。最后,等待处理结果(处理结果将被写入响应结构体),并将处理结果按照HTTP1.1的要求发送给客户端浏览器。
CGI动态处理子模块:根据已解析的HTTP请求,首先调用消息头处理库模块的函数处理请求,初始化并填写CGI环境变量。然后执行CGI函数,等待执行结果。最后,根据CGI1.1规范解析返回的结果,并生成响应信息,填写在响应结构体中,返回处理选择子模块。
静态页面处理子模块:根据已解析的HTTP请求,首先调用消息头处理库模块的函数处理请求,然后查询内存中的静态页面镜像,并生成响应信息,填写在响应结构体中,返回处理选择子模块。
(3)消息头处理模块
根据由请求处理模块传递来的不同的请求头和总体头,按照HTTP1.1协议要求进行处理,并将处理结果返回给请求处理模块。
5 服务器端程序设计
5.1通用的自定义标记处理函数和CGI处理函数
void cgi_handler(struct *resinfo,struct *cgi_handler_stru);
void mark_handler(struct *resinfo,struct *mark_handler_stru)
自定义标记处理函数用于对自定义标记的处理,每一类自定义标记对应一种具体的自定义标记处理函数,同一类自定义标记的不同数据点用参数来区分。所有自定义标记处理函数被放在一起,构成一个函数指针结构类型mark_handler_stru。CGI处理函数用变量名来区分,同一类变量对应一种CGI处理函数。与自定义标记处理函数类似,所有CGI处理函数也被放在一起,构成一个函数指针结构cgi_handler_stru。
通用的自定义标记处理函数和CGI处理函数会根据数据结构resinfo的信息调用函数指针结构mark_handler_stru和cgi_handler_stru。这样,底层对于HTTP协议处理层是透明的。不论底层是RS485,CAN还是命名管道(项目中使用命名管道与现场控制任务交互),HTTP协议处理层都是相同的,嵌入式HTTP服务器代码因此具备了通用性。
图2 嵌入式Web服务器的处理流程
5.2 HTTP服务器的实现
首先使用网页设计软件如FontPage设计一个网页,设命名为index.html,网页中含图片image.gif,存放在/home/html/下,然后将文件导出到S3C44B0X模块的HTTP服务器中。主程序中运行HTTP服务器的相关代码如下[4]:
#define SERVER_PORT 80
int main(void){
…
int s,fd;
int len;
struct sockaddr_in ec;
struct sockaddr_in server_sockaddr;
//创建TCP Socket连接到网络
if((s=socket(AF_INET,SOCK_STREAM,IPPROTOCOL_TCP))==-1)
{perror(“Unable to obtain network\n”);exit(1);}
server_sockaddr.sin_family=AF_INET;
server_sockaddr.sin_port=htons(SERVER_PORT);
server_sockaddr.sin_addr.s_addr=htons(INADDR_ANY);
if(bind(s,(struct sockaddr*)&server_sockaddr,sizeod(server_sockaddr))==-1)
{perror(“Unable to bind socket\n”);exit(1);}
//服务器应用程序被动打开一个TCP套接字进行交换数据
if(listen(s,24)==-1)
{perror(“Unable to listen\n”);exit(1);}
//处理Web事务
while(1)
{
len=sizeof(ec);
if((fd=accept(s,(void *)&ec,&len))==-1)
{exit(1);close(s);}
HandleConnect(fd);//相关任务
}
…
return 0;}
5.3通过CGI接口控制拍摄
在HttpSpec http_flashspec[]中加入以下定义:
{HTTPSPEC_FUNCTION,”/get_photocgi”,0,get_phototoggle,0,NULL,NULL}
在网页中嵌入按钮图标,使其链接到”/get_photocgi”,点击网页上此按钮,程序将跳转执行以下函数:
int get_phototoggle(HTTPState* state){
get_photo; //拍摄图像
cgi_redirectto(state,’index.html’);//跳转到index.html网页,该网页含所拍摄的图像文件
return 0;}
6 结论
采用了MPEG4视频压缩芯片GO7007SB,支持多种媒体文件格式:mp3,m2v,mpg,mpeg,实现本地及远端一点查看多点的网络图像监控服务。可在图像监控过程中,对云台进行控制和设置网络摄像机参数,包括摄像头姿态控制,摄像机变焦、调焦、自动巡视,图像传输速度调节,色彩调节(对比度、亮度、色饱和度),摄像机环境设置,摄像机图像采集格式设置等。
参考文献:
[1]王学龙.嵌入式Linux系统设计与应用[M].北京:清华大学出版社,2001.1.
[2]Jernmy Bentham.嵌入式系统Web服务器TCP/IP Lean[M].北京:机械工业出版社,2003.
[3]Tim JonesM.嵌入式系统TCP/IP应用层协议[M].北京:电子工业出版社,2003.
[4]张斌,高波.等.Linux网络编程.北京:清华大学出版社,2000.
注:本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文。