基于ARM平台的嵌入式家庭网关服务器平台
*若客户发送的HTTP请求,经过接收和解析后,得知请求的消息包含对云台设备及镜头的控制命令时,HTTP服务器通过CGI函数向云镜解码器直接发送控制指令以实现对云台和镜头的控制。
实时视频传输设计
基于HTTP的boa服务器负责接收和响应客户端的HTTP请求,当请求的是视频信息时,此请求通过CGI函数向视频数据处理模块发送消息,从而向视频设备发送事件以允许实时视频发送任务进入运行队列。
视频数据处理模块主要包括视频图像的实时捕捉(借助MPEG-4视频压缩卡完成)、动态存储和实时播放,实时播放可以和实时捕捉存储同时进行。
初始化视频压缩卡:
M878Object*pObject=NULL;
For(inti=0;i
{pObject=newM878Object(i,m_strDisk+m_strVideoDir);
If(!pObjectGetDataFormFile())
pObject->InitData();
m_obArray。Add(pObject);
}
数据采集:
for(i=0;i
{
OpenDev(i);//打开指定卡号的设备,分配相应系统资源
pObject=(M878Object*)m_obArray[i];
OutMpegBuff(i,OnMpeg4Write);//采集视频数据流
RegisterViSaveExceptionProc(i,(ViSaveErrCallBack)ViErrCallBack);
pObject->SetParamToDevice();//设定参数
}
停止设备:
当不再使用设备时,调用ViUnInit()关闭视频压缩采集卡并卸载系统资源。
数据发送模块:
OutMpegBuff(i,OnMpeg4Write);
VoidCALLBACKOnMpge4Write(DWORDdwCard,BYTE*pbuff,DWORDdwSize,
BOOLisKeyFrom)
{
if(dwCard>=g_dwDevice)
return;
g_VStrmInfo[dwCard]+=dwSize/26;
MTAWriteVideo((BYTE)dwCard,pbuff,(LONG)dwSize,isKeyFrm)
}
发送模块负责向地址表中的地址发送经过编码处理的实时视频数据,并修改地址表中的信息。地址表用来保存请求实时视频服务的用户的IP地址,视频发送任务根据地址表中的地址来发送视频包。
数据接收模块主要完成视频数据的接收、解码和显示工作。用户通过浏览器实现对远程设备的监控,服务器返回的信息通过浏览器显示。浏览器可以使用微软公司的InternetExploer或Netscape公司的NetscapeNavigator等。对于普通的文本及HTML文件支持的GIF、JPEG等格式的图片,普通浏览器都可以显示。但对于实时视频数据,由于与HTTP链接不同,不是使用流套接字而是使用数据报套接字接收,然后还需解码和显示,这些工作浏览器都无法完成。为使用户能通过浏览器观看视频,本系统采用在WEB页面中嵌入ActiveX控件,由ActiveX控件完成视频数据的接收、解码和显示工作。而ActiveXInternet技术的一个重要方面是安全的下载和安装ActiveX控件和需要的支持文件。MicrosoftInternetExplore通过在HTML文档中使用InternetComponentDownload方法自动下载并安装ActiveX控件完成客户端控件的嵌入和注册。
在WEB服务器的HTML文件中嵌入ActiveX属性,针对客户端使用最多的IE浏览器,HTML代码可使用MFCControl控件。
控件编写完成后,需要在客户端注册,关于控件的信息记录在注册表中。客户端从服务器端接收到嵌有控件的HTML页面后,将根据OBJECT标签中的信息通过注册表使用对应的空间完成接收,解码和显示。
远程控制设计
在远程控制部分设计中,根据性能最优化和实时性考虑,将控制部分分为两部分:云台控制部分,主要是通过串口进行通信;信息家电远程控制,通过内部家庭网络协议对相应设备进行控制,控制信号的物理载体是家庭网络内部总线。由于篇幅有限,以下只介绍图4所示云台控制模块。
图4云台控制系统硬件连接框图
该模块是个相对独立的模块,负责控制云台的上下左右旋转以及镜头的焦距和光圈的调整。当服务器接受到的请求中含有对云台设备以及镜头的控制命令时,将通过CGI函数向云台解码器发送控制指令以实现对云台和镜头的控制。在室内,采用CDA2000解码器直接通过RS-232串行口与嵌入式网关通信,云台控制电压~24V、~220V可选,镜头控制电压可在5V-12V之间无级调节。
在云镜控制模块中,解码器起着核心的作用,设计云镜控制模块主要解决的问题是将各项操作如上下旋转,镜头调焦等操作进行编码,但本系统采用的解码器封装了底层硬件程序的编写,因此所做的工作是利用解码器开发商提供的协议,通过RS232串行口向解码器发送指令。
Linux对串口的操作是通过设备文件进行访问的,只需打开相应的串口文件,然后通过调用设备相关函数来打开串口(open()),设置串口参数(tcgetattr(),cfsetispeed(),cfsetospeed()),设置输入输出模式(options。c_Iflag和options。c_Oflag),恢复串口属性,关闭串口(close())等即可。
结语
本系统的特点是基于嵌入式微处理器有限的系统资源之上,为客户提供视频服
- Boa服务器在ARM+Linux上的移植(11-09)
- 基于ARM9的温室茶树培养监测系统(04-17)
- 多流媒体播放器ActiveX控件开发(08-07)
- 基于LabVIEW的继电器测试系统设计(07-14)
- VC++用ActiveX控件与单片机串行通信(06-27)
- 基于ARM和uClinux的家庭网关系统(09-14)