基于A(yíng)RM的家庭視頻服務(wù)器的研究
引言
隨著(zhù)科學(xué)技術(shù)的不斷進(jìn)步和發(fā)展,人們對生活質(zhì)量也提出了更高的要求。家庭網(wǎng)絡(luò )作為一個(gè)新生體越來(lái)越近的開(kāi)始走進(jìn)人們的生活,它將家庭單元作為一個(gè)節點(diǎn)加入了網(wǎng)絡(luò )的大家庭,其中作為連接家庭內部與Internet的橋梁的家庭網(wǎng)關(guān)起了舉足輕重的作用。嵌入式網(wǎng)關(guān)的主要功能如下:
遠程控制:客戶(hù)通過(guò)Internet上連接的任意一臺PC機的瀏覽器,都可以訪(fǎng)問(wèn)家庭網(wǎng)絡(luò )的服務(wù)器;家庭網(wǎng)絡(luò )中的設備狀態(tài)將以HTML文件的方式顯示在客戶(hù)端的瀏覽器中;客戶(hù)通過(guò)對HTML頁(yè)面上相應設備的點(diǎn)擊以實(shí)現對家庭網(wǎng)絡(luò )中設備的遠程控制,操作的結果同樣以HTML頁(yè)面的方式刷新客戶(hù)端的瀏覽器。
遠程監視:客戶(hù)通過(guò)Internet上連接的任意一臺PC機的瀏覽器,都可以訪(fǎng)問(wèn)家庭網(wǎng)絡(luò )的服務(wù)器,在HTML頁(yè)面上通過(guò)點(diǎn)擊控件按鈕來(lái)實(shí)現視頻工具的自動(dòng)下載和所要求視頻文件的自動(dòng)播放,從而可以顯示多個(gè)攝像頭中的視頻信息。
遠程維護:當HomeNetServer的后臺數據庫需要維護,或者家庭網(wǎng)絡(luò )中設備的HTML描述文件有了更新,甚至系統的網(wǎng)絡(luò )管理系統需要升級為新版本時(shí),管理員都可以通過(guò)Internet遠程對家庭網(wǎng)絡(luò )中的服務(wù)器做維護和更新。
基于這些基本要求和嵌入式系統自身資源有限的特點(diǎn),系統選擇了S3C4510芯片,并對其進(jìn)行外圍電路擴展如圖1:
圖1 外圍擴展電路方框圖
其中:Flash/ROM用于存儲家庭網(wǎng)關(guān)中的嵌入式操作系統、HTTP服務(wù)器、CGI網(wǎng)關(guān)程序、家庭網(wǎng)絡(luò )服務(wù)器以及各種服務(wù)所需的文件系統。整個(gè)家庭網(wǎng)關(guān)軟件平臺存儲在Flash中,系統啟動(dòng)時(shí),將從Flash中運行Bootloader,解壓操作系統并將其移入SDRAM中。
Ethernet:S3C4510內部集成了網(wǎng)絡(luò )控制接口,并提供專(zhuān)用于網(wǎng)絡(luò )通信的DMA通道。通過(guò)Ethernet模塊,S3C4510實(shí)現與Internet的連接。Ethernet模塊完成芯片與網(wǎng)絡(luò )的隔離和數據的收發(fā)。
System:S3C4510所需的其他外圍電路,包括:電源電路、外部時(shí)鐘(50MHZ)電路、開(kāi)關(guān)及復位電路和JTAG調試接口電路等。
嵌入式操作系統選擇的是uClinux操作系統,uClinux是專(zhuān)門(mén)針對沒(méi)有MMU的處理器而設計的,系統多采用Romfs文件系統,Romfs是一種相對簡(jiǎn)單、占用空間較少的文件系統。而在UCLINUX下,主要有三個(gè)WEB服務(wù)器:httpd、thttpd和boa,httpd是最簡(jiǎn)單的WBE服務(wù)器,功能簡(jiǎn)單,不支持認證和CGI,thttpd和boa均支持認證和CGI,功能豐富,其中boa1是一個(gè)單任務(wù)的http服務(wù)器,源代碼開(kāi)放,性能較高,占用系統資源較少,boa服務(wù)器在收到請求時(shí),不啟動(dòng)多個(gè)服務(wù)進(jìn)程處理多個(gè)請求,在一個(gè)進(jìn)程內處理所有服務(wù)請求。對于CGI程序,將生成新的進(jìn)程來(lái)處理,考慮到嵌入式系統自身資源有限,和家庭網(wǎng)關(guān)的進(jìn)程數量有限,系統選擇了在uCLinux系統中的boa服務(wù)器。
由于目前的uCLinux還不支持ASP、PHP等動(dòng)態(tài)網(wǎng)頁(yè)技術(shù),所以在uCLinux下通過(guò)CGI2技術(shù)連接WEB頁(yè)和本地程序,提供動(dòng)態(tài)和交互的特性。
圖2 系統總體設計框圖
1 配置boa服務(wù)器
CGI程序不是放在服務(wù)器上就能順利運行,如果要想使其在服務(wù)器上順利的運行并準確的處理用戶(hù)的請求,則須對所使用的服務(wù)器進(jìn)行必要的設置。
Boa的配置文件boa.conf:在boa.conf中對boa進(jìn)行了配置,這些配置多使用默認值,本系統中將Document Root指定的WEB服務(wù)器的根修改為/boas.
在對內核進(jìn)行配置時(shí),選擇boa程序和cgi.
將cgi_generic文件夾下的cgi.c和makefile覆蓋到程序包中的/usr/cgi_generic/。
將boa文件夾下的hash.c覆蓋到程序包中的/usr/boa/src。
將rc文件覆蓋到程序包中的/vendor/Miectek/4510。
本系統中的ucLinux系統中的文件使用的是ROMFS和運行于RAM的EXT2。為了可通過(guò)FTP等工具更新網(wǎng)頁(yè),rc文件在/boas下創(chuàng )建文件夾cgi_bin,然后將index.html,boa.conf和mine.type復制到/boas下,將CGI程序復制到/boas/cgi_bin下。至此建立了boa運行的基本環(huán)境,使用>boa c/boas/命令就可以運行boa.
2 系統設計描述
在嵌入式網(wǎng)關(guān)的設計中,網(wǎng)關(guān)程序與家庭網(wǎng)絡(luò )的HTTP服務(wù)器和家庭網(wǎng)絡(luò )內部服務(wù)器位于同一物理設備(基于S3C4510的硬件平臺)之上,負責連接HTTP服務(wù)器與后臺數據庫,完成HTTP服務(wù)器與HomeNetServer之間的信息交互。
在家庭網(wǎng)關(guān)的設計中,根據功能描述,網(wǎng)關(guān)應能提供遠程監視、遠程控制、遠程維護功能。網(wǎng)關(guān)內部工作流程如下:
● 若客戶(hù)發(fā)送的HTTP請求,經(jīng)過(guò)HTTP服務(wù)器接收和解析后,得知要求的是設備狀態(tài)信息時(shí),HTTP服務(wù)器從存儲設備狀態(tài)信息的靜態(tài)文件中取出設備狀態(tài),并封裝為HTTP響應消息發(fā)送回客戶(hù)端。
● 若客戶(hù)發(fā)送的HTTP請求,經(jīng)過(guò)HTTP服務(wù)器接收和解析后,得知請求的消息是對設備的設置(操作),則通CGI函數將消息內容轉換為家庭網(wǎng)絡(luò )協(xié)議傳遞給家庭網(wǎng)絡(luò )服務(wù)器,由家庭網(wǎng)絡(luò )服務(wù)器對家庭內部設備的管理和控制,并將處理結果以消息形式傳遞給CGI程序,并封裝為HTTP響應消息的形式,發(fā)送回客戶(hù)端。
● 若客戶(hù)發(fā)送的HTTP請求,經(jīng)過(guò)HTTP服務(wù)器接收和解析后,得知請求的頁(yè)面是提供實(shí)時(shí)視頻服務(wù)時(shí),HTTP服務(wù)器將調用CGI函數向視頻數據處理模塊發(fā)送消息,通過(guò)視頻數據處理模塊來(lái)控制視頻壓縮卡完成視頻數據的采集,壓縮和發(fā)送等功能。
● 若客戶(hù)發(fā)送的HTTP請求,經(jīng)過(guò)HTTP服務(wù)器接收和解析后,得知請求的消息包含對云臺設備及鏡頭的控制命令時(shí),HTTP服務(wù)器通過(guò)CGI函數向云鏡解碼器直接發(fā)送控制指令以實(shí)現對云臺和鏡頭的控制。
圖3 家庭網(wǎng)關(guān)軟件結構框圖
3 實(shí)時(shí)視頻傳輸部分設計
基于HTTP的boa服務(wù)器負責接收和響應客戶(hù)端的HTTP請求,當請求的是視頻信息時(shí),此請求通過(guò)CGI函數向視頻數據處理模塊發(fā)送消息,從而向視頻設備發(fā)送事件以允許實(shí)時(shí)視頻發(fā)送任務(wù)進(jìn)入運行隊列。
視頻數據處理模塊主要包括視頻圖像的實(shí)時(shí)捕捉(借助MPEG-4視頻壓縮卡完成)、動(dòng)態(tài)存儲和實(shí)時(shí)播放,圖像的實(shí)時(shí)播放可以和圖像的實(shí)時(shí)捕捉存儲同時(shí)進(jìn)行。
初始化視頻壓縮卡:
M878Object*pObject=NULL;
For(int i=0;im_nDevice;i++)
{pObject=new M878Object(i,m_strDisk+m_str VideoDir);
If(!pObjectGetDataFormFile())
pObject->InitData();
m_obArray.Add(pObject);
}
數據采集:
for(i=0;im_nDevice;i++)
{
OpenDev(i); //打開(kāi)指定卡號的設備,分配相應系統資源
pObject=( M878Object*)m_obArray[i];
OutMpegBuff(i,OnMpeg4Write); //采集視頻數據流
RegisterViSaveExceptionProc(i,(ViSaveErrCallBack) ViErrCallBack);
pObject->SetParamToDevice(); //設定參數
}
停止設備:
當不再使用設備時(shí),調用ViUnInit()關(guān)閉視頻壓縮采集卡并卸載系統資源。
數據發(fā)送模塊:
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)
}
發(fā)送模塊負責向地址表中的地址發(fā)送經(jīng)過(guò)編碼處理的實(shí)時(shí)視頻數據,并修改地址表中的信息。地址表用來(lái)保存請求實(shí)時(shí)視頻服務(wù)的用戶(hù)的IP地址,視頻發(fā)送任務(wù)根據地址表中的地址來(lái)發(fā)送視頻包。
數據接收模塊:
該模塊主要完成視頻數據的接收、解碼和顯示工作。用戶(hù)通過(guò)瀏覽器實(shí)現對遠程設備的監控,服務(wù)器返回的信息通過(guò)瀏覽器顯示。瀏覽器可以使用微軟公司的Internet Exploer或Netscape公司的Netscape Navigator等。對于普通的文本及HTML文件支持的GIF、JPEG等格式的圖片,普通瀏覽器都可以顯示。但對于實(shí)時(shí)視頻數據,首先,與HTTP鏈接不同,不是使用流套接字而是使用數據報套接字接收,然后還需解碼和顯示,這些工作瀏覽器都無(wú)法完成。為使用戶(hù)能通過(guò)瀏覽器觀(guān)看視頻,本系統采用在WEB頁(yè)面中嵌入ActiveX控件,由ActiveX控件完成視頻數據的接收、解碼和顯示工作。而ActiveXInternet技術(shù)的一個(gè)重要方面是安全的下載和安裝ActiveX控件和需要的支持文件。Microsoft Internet Explore通過(guò)在HTML文檔中使用Internet Component Download方法自動(dòng)下載并安裝ActiveX控件3。
(1)客戶(hù)端控件的嵌入
在WEB服務(wù)器的HTML文件中嵌入ActiveX屬性,針對客戶(hù)端使用最多的IE瀏覽器,HTML代碼可使用的MFCControl控件如下:
HTML>
HEAD>
TITLE>VideoPage/TITLE>
/HEAD>
BODY>
OBJECT>
ID=Mpge4Control
WIDTH=100
HEIGHT=51
CLASSID=CLSID:A119846-2E75-11D0-BDB2-000000000000
CODEBASE=http://www.myhome.com/videodisplay/MFCControl.ocx>#Version=1,0,0,1>
PARAMNAME=AlighmentVALUE=1>
PARAMNAME=CaptionPropVALUE=Sample>
/OBJECT>
/BODY>
/HTML>
其中ID標志控件命名,提供訪(fǎng)問(wèn)控件的HTML代碼。CLASSID標志是唯一的UUID給控件賦值的指令,告訴IE哪個(gè)對象被裝載。在HTML頁(yè)面實(shí)現控件的自動(dòng)下載,使用OBJECT>標志的CODEBASE屬性,該屬性告訴IE要下載和安裝的控件版本和找到和下載控件及其支持文件的地址。
(2)客戶(hù)端控件的注冊
控件編寫(xiě)完成后,需要在客戶(hù)端注冊,關(guān)于控件的信息記錄在注冊表中??蛻?hù)端從服務(wù)器端接收到嵌有控件的HTML頁(yè)面后,將根據OBJECT標簽中的信息通過(guò)注冊表使用對應的空間完成接收,解碼和顯示。
4 遠程控制部分設計
在遠程控制部分設計中,根據性能最優(yōu)化和實(shí)時(shí)性考慮,將控制部分分為兩部分:云臺控制部分,主要是通過(guò)串口進(jìn)行通信;信息家電遠程控制,通過(guò)內部家庭網(wǎng)絡(luò )協(xié)議對相應設備進(jìn)行控制,控制信號的物理載體是家庭網(wǎng)絡(luò )內部總線(xiàn)。(由于篇幅有限,本文僅討論前者)。
云臺控制模塊設計
該模塊是個(gè)相對獨立的模塊,負責控制云臺的上下左右旋轉以及鏡頭的焦距和光圈的調整。當服務(wù)器接受到的請求中含有對云臺設備以及鏡頭的控制命令時(shí),將通過(guò)CGI函數向云臺解碼器發(fā)送控制指令以實(shí)現對云臺,鏡頭的控制。在室內,采用CDA2000室內萬(wàn)能解碼器4直接通過(guò)RS-232串行口與嵌入式網(wǎng)關(guān)通信,云臺控制電壓~24V、~220V 可選,鏡頭控制電壓可在 5V-12V 之間無(wú)級調節。
圖4 云臺控制系統硬件連接框圖
在云鏡控制模塊中,解碼器起著(zhù)核心的地位,設計云鏡控制模塊主要解決的問(wèn)題是將各項操作如上下旋轉,鏡頭調焦等操作進(jìn)行編碼,但本系統采用的解碼器封裝了底層硬件程序的編寫(xiě),因此所做的工作是利用解碼器開(kāi)發(fā)商提供的協(xié)議,通過(guò)RS232串行口向解碼器發(fā)送指令。
Linux對串口的操作是通過(guò)設備文件進(jìn)行訪(fǎng)問(wèn)的,只需打開(kāi)相應的串口文件,然后通過(guò)調用設備相關(guān)函數來(lái)打開(kāi)串口(open()),設置串口參數(tcgetattr(),cfsetispeed(), cfsetospeed()),設置輸入輸出模式(options.c_Iflag和options.c_Oflag),恢復串口屬性,關(guān)閉串口(close())等即可。
圖5 串行通信流程
5 結論
本系統的特點(diǎn)是基于嵌入式微處理器有限的系統資源之上,為客戶(hù)提供視頻服務(wù)。本系統采用的是boa服務(wù)器+CGI+家庭網(wǎng)絡(luò )服務(wù)器的模式來(lái)實(shí)現對信息家電的控制,但由于篇幅有限,不做論述。鑒于實(shí)時(shí)視頻服務(wù)的特殊性,采用了boa服務(wù)器+CGI+視頻接收和控制模塊(視頻服務(wù)器)的模式實(shí)現對視頻數據的捕獲、采集、發(fā)送等操作,并通過(guò)串行口通信方式對云臺和鏡頭進(jìn)行直接的控制,視頻的接收問(wèn)題一直以來(lái)是研究的重點(diǎn),本系統采用的是在WEB頁(yè)面中嵌入ActiveX控件的方式,由ActiveX控件完成視頻數據的接收、解碼和顯示工作。而這樣做的好處是,不需對客戶(hù)端做任何設置,就可以完成控件的自動(dòng)下載和視頻文件的實(shí)時(shí)播放。
評論