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