基于ARM的家庭视频服务器的研究
日期:2023-01-24 阅读量:0次 所属栏目:信息管理
摘 要 针对家庭网关的最重要功能:远程监控功能,本文设计了一个基于arm平台的嵌入式家庭网关服务器平台。平台中集成了boa服务器和家庭网络服务器及视频服务器于一体,通过通用网关接口程序cgi,实现了远程用户和家庭内部网络的动态交互。本文中研究的数据信息主要是摄像头视频信息,采用了将视频信息通过activex控件解码,发送的方式在http浏览器上直接播放的方式来实现远程传输(本文不论述信息家电的远程控制部分)。
关键字 arm, boa服务器 , cgi , 视频传输, activex
引言
随着科学技术的不断进步和发展,人们对生活质量也提出了更高的要求。家庭网络作为一个新生体越来越近的开始走进人们的生活,它将家庭单元作为一个节点加入了网络的大家庭,其中作为连接家庭内部与internet的桥梁的家庭网关起了举足轻重的作用。嵌入式网关的主要功能如下:
远程控制:客户通过internet上连接的任意一台pc机的浏览器,都可以访问家庭网络的服务器;家庭网络中的设备状态将以html文件的方式显示在客户端的浏览器中;客户通过对html页面上相应设备的点击以实现对家庭网络中设备的远程控制,操作的结果同样以html页面的方式刷新客户端的浏览器。wwW.lw881.com
远程监视:客户通过internet上连接的任意一台pc机的浏览器,都可以访问家庭网络的服务器,在html页面上通过点击控件按钮来实现视频工具的自动下载和所要求视频文件的自动播放,从而可以显示多个摄像头中的视频信息。
远程维护:当homenetserver的后台数据库需要维护,或者家庭网络中设备的html描述文件有了更新,甚至系统的网络管理系统需要升级为新版本时,管理员都可以通过internet远程对家庭网络中的服务器做维护和更新。
基于这些基本要求和嵌入式系统自身资源有限的特点,系统选择了s3c4510芯片,并对其进行外围电路扩展如图1:
图1 外围扩展电路方框图
其中:flash/rom用于存储家庭网关中的嵌入式操作系统、http服务器、cgi网关程序、家庭网络服务器以及各种服务所需的文件系统。整个家庭网关软件平台存储在flash中,系统启动时,将从flash中运行bootloader,解压操作系统并将其移入sdram中。
ethernet:s3c4510内部集成了网络控制接口,并提供专用于网络通信的dma通道。通过ethernet模块,s3c4510实现与internet的连接。ethernet模块完成芯片与网络的隔离和数据的收发。
system:s3c4510所需的其他外围电路,包括:电源电路、外部时钟(50mhz)电路、开关及复位电路和jtag调试接口电路等。
嵌入式操作系统选择的是uclinux操作系统,uclinux是专门针对没有mmu的处理器而设计的,系统多采用romfs文件系统,romfs是一种相对简单、占用空间较少的文件系统。而在uclinux下,主要有三个web服务器:httpd、thttpd和boa,httpd是最简单的wbe服务器,功能简单,不支持认证和cgi,thttpd和boa均支持认证和cgi,功能丰富,其中boa
1是一个单任务的http服务器,源代码开放,性能较高,占用系统资源较少,boa服务器在收到请求时,不启动多个服务进程处理多个请求,在一个进程内处理所有服务请求。对于cgi程序,将生成新的进程来处理,考虑到嵌入式系统自身资源有限,和家庭网关的进程数量有限,系统选择了在uclinux系统中的boa服务器。
由于目前的uclinux还不支持asp、php等动态网页技术,所以在uclinux下通过cgi
2技术连接web页和本地程序,提供动态和交互的特性。
图2 系统总体设计框图
1 配置boa服务器
cgi程序不是放在服务器上就能顺利运行,如果要想使其在服务器上顺利的运行并准确的处理用户的请求,则须对所使用的服务器进行必要的设置。
boa的配置文件:在中对boa进行了配置,这些配置多使用默认值,本系统中将document root指定的web服务器的根修改为/boas.
在对内核进行配置时,选择boa程序和cgi.
将cgi_generic文件夹下的cgi.c和makefile覆盖到程序包中的/usr/cgi_generic/。
将boa文件夹下的hash.c覆盖到程序包中的/usr/boa/src。
将rc文件覆盖到程序包中的/vendor/miectek/4510。
本系统中的uclinux系统中的文件使用的是romfs和运行于ram的ext2。为了可通过ftp等工具更新网页,rc文件在/boas下创建文件夹cgi_bin,然后将,和复制到/boas下,将cgi程序复制到/boas/cgi_bin下。至此建立了boa运行的基本环境,使用〝>boa c/boas/&〞命令就可以运行boa.
2 系统设计描述
在嵌入式网关的设计中,网关程序与家庭网络的http服务器和家庭网络内部服务器位于同一物理设备(基于s3c4510的硬件平台)之上,负责连接http服务器与后台数据库,完成http服务器与homenetserver之间的信息交互。
在家庭网关的设计中,根据功能描述,网关应能提供远程监视、远程控制、远程维护功能。网关内部工作流程如下:
● 若客户发送的http请求,经过http服务器接收和解析后,得知要求的是设备状态信息时,http服务器从存储设备状态信息的静态文件中取出设备状态,并封装为http响应消息发送回客户端。
● 若客户发送的http请求,经过http服务器接收和解析后,得知请求的消息是对设备的设置(操作),则通cgi函数将消息内容转换为家庭网络协议传递给家庭网络服务器,由家庭网络服务器对家庭内部设备的管理和控制,并将处理结果以消息形式传递给cgi程序,并封装为http响应消息的形式,发送回客户端。
● 若客户发送的http请求,经过http服务器接收和解析后,得知请求的页面是提供实时视频服务时,http服务器将调用cgi函数向视频数据处理模块发送消息,通过视频数据处理模块来控制视频压缩卡完成视频数据的采集,压缩和发送等功能。
● 若客户发送的http请求,经过http服务器接收和解析后,得知请求的消息包含对云台设备及镜头的控制命令时,http服务器通过cgi函数向云镜解码器直接发送控制指令以实现对云台和镜头的控制。
图3 家庭网关软件结构框图
3 实时视频传输部分设计
基于http的boa服务器负责接收和响应客户端的http请求,当请求的是视频信息时,此请求通过cgi函数向视频数据处理模块发送消息,从而向视频设备发送事件以允许实时视频发送任务进入运行队列。
视频数据处理模块主要包括视频图像的实时捕捉(借助mpeg-4视频压缩卡完成)、动态存储和实时播放,图像的实时播放可以和图像的实时捕捉存储同时进行。
初始化视频压缩卡:
m878object*pobject=null;
for(int i=0;i
initdata();
(pobject);
}
数据采集:
for(i=0;isetparamtodevice(); //设定参数
}
停止设备:
当不再使用设备时,调用viuninit()关闭视频压缩采集卡并卸载系统资源。
数据发送模块:
outmpegbuff(i,onmpeg4write);
void callback onmpge4write(dword dwcard,byte *pbuff,dword dwsize,
bool iskeyfrom)
{
if(dwcard>=g_dwdevice)
return;
g_vstrminfo[dwcard]+=dwsize/26;
mtawritevideo((byte)dwcard,pbuff,(long)dwsize,iskeyfrm)
}
发送模块负责向地址表中的地址发送经过编码处理的实时视频数据,并修改地址表中的信息。地址表用来保存请求实时视频服务的用户的ip地址,视频发送任务根据地址表中的地址来发送视频包。
数据接收模块:
该模块主要完成视频数据的接收、解码和显示工作。用户通过浏览器实现对远程设备的监控,服务器返回的信息通过浏览器显示。浏览器可以使用微软公司的internet exploer或netscape公司的netscape navigator等。对于普通的文本及html文件支持的gif、jpeg等格式的图片,普通浏览器都可以显示。但对于实时视频数据,首先,与http链接不同,不是使用流套接字而是使用数据报套接字接收,然后还需解码和显示,这些工作浏览器都无法完成。为使用户能通过浏览器观看视频,本系统采用在web页面中嵌入activex控件,由activex控件完成视频数据的接收、解码和显示工作。而activexinternet技术的一个重要方面是安全的下载和安装activex控件和需要的支持文件。microsoft internet explore通过在html文档中使用internet component download方法自动下载并安装activex控件3。
(1)客户端控件的嵌入
在web服务器的html文件中嵌入activex属性,针对客户端使用最多的ie浏览器,html代码可使用的mfccontrol控件如下:
videopage
其中id标志控件命名,提供访问控件的html代码。classid标志是唯一的uuid给控件赋值的指令,告诉ie哪个对象被装载。在html页面实现控件的自动下载,使用