基于ARM11的嵌入式Web監(jiān)控系統(tǒng)的研究與實(shí)現(xiàn)
隨著嵌入式計(jì)算機(jī)、互聯(lián)網(wǎng)、數(shù)字圖像以及通信等技術(shù)的發(fā)展,視頻監(jiān)控技術(shù)也得到迅速的發(fā)展,并滲透到人們的現(xiàn)實(shí)生活中。視頻監(jiān)控的領(lǐng)域涉及安全監(jiān)控、遠(yuǎn)程醫(yī)療、智能家居、視頻實(shí)時(shí)會議等。
本文引用地址:http://m.butianyuan.cn/article/201609/303783.htm文中利用Web和嵌入式技術(shù),以ARM11-S3C6410處理器為硬件核心,以嵌入式Linux系統(tǒng)作為軟件平臺,研究并實(shí)現(xiàn)了一個(gè)嵌入式Web實(shí)時(shí)監(jiān)控系統(tǒng),為嵌入式設(shè)備接入Internet提供了一種簡單且有效的解決技術(shù),進(jìn)而可以實(shí)現(xiàn)通過Web瀏覽器對嵌入式設(shè)備進(jìn)行遠(yuǎn)程監(jiān)控的目的。
1 系統(tǒng)總體設(shè)計(jì)
文中設(shè)計(jì)一種典型的嵌入式Web監(jiān)控系統(tǒng)主要通過嵌入式終端上的攝像頭進(jìn)行視頻圖像的采集,視頻服務(wù)器MJPG—streamer然后對采集過來的數(shù)據(jù)進(jìn)行壓縮,傳輸JPEG格式的圖像到用戶客戶端瀏覽器。用戶可以通過Web瀏覽器實(shí)時(shí)遠(yuǎn)程監(jiān)控?cái)z像頭采集到的視頻圖像。系統(tǒng)整體框架如圖1所示。
2 硬件設(shè)計(jì)
本系統(tǒng)使用的硬件平臺功能框圖如圖2所示。該平臺采用三星處理器S3C6410。該處理器基于ARM1176JZF—S內(nèi)核,64/32位內(nèi)部總線架構(gòu),并且具有豐富的內(nèi)部資源,支持MPEG4/H.264編解碼、VC1的解碼,實(shí)時(shí)視頻會議和NTSC,PAL的輸出。在片上資源非常豐富的基礎(chǔ)上,對硬件系統(tǒng)的配置進(jìn)行了相關(guān)的擴(kuò)展,包括1塊256 MB的NAND Flash和2塊64 Mbyte的DDR SDRAM,1個(gè)連接PC機(jī)用于調(diào)試的串口、2個(gè)USB接口、1個(gè)以太網(wǎng)控制芯片DM9000AE擴(kuò)展了1個(gè)網(wǎng)絡(luò)口,在主控USB接口外接數(shù)字?jǐn)z像頭。
3 軟件設(shè)計(jì)
3.1 嵌入式Web服務(wù)器boa的移植
本項(xiàng)目采用的嵌入式Web服務(wù)器有Boa(WWW.boa.org),它一般是單進(jìn)程服務(wù)器,即同一時(shí)刻只能響應(yīng)單個(gè)用戶的,而無法并發(fā)響應(yīng),這也是和Apache等高性能的Web服務(wù)器主要的區(qū)別,但對于應(yīng)用于嵌入式設(shè)備的場合里已足夠。這里介紹常用的web服務(wù)器boa的移植。Boa的可執(zhí)行代碼只有約60KB,是一個(gè)非常小巧的單任務(wù)服務(wù)器,所以只能依次完成用戶的請求,而不會fork出新的進(jìn)程來處理并發(fā)連接請求。但Boa支持CGI,能夠?yàn)?a class="contentlabel" href="http://m.butianyuan.cn/news/listbylabel/label/CGI">CGI程序fork出一個(gè)新的進(jìn)程來響應(yīng)用戶的需求。在其站點(diǎn)公布的速度和安全性能測試中,Boa的性能要好于Apache服務(wù)器。
最后將生成的可執(zhí)行程序boa掛在到目標(biāo)系統(tǒng),若能成功地訪問靜態(tài)HTML網(wǎng)頁和運(yùn)行測試用的CGI程序,則表明配置成功。
3.2 Cgi技術(shù)簡介以及Cgi庫的移植
目前Web開發(fā)中生成動態(tài)Web頁面的方法有CGI和服務(wù)器腳本,如JSP,ASP等,但在嵌入式Web服務(wù)器中,考慮資源有限,一般都只提供CGI支持,因此在嵌入式設(shè)備中Web應(yīng)用實(shí)際上就是基于CGI的開發(fā)。
CGI(Common Gate Interface)是一段運(yùn)行在Web服務(wù)器上的程序,它提供了同客戶端Html頁面的接口。為了完成服務(wù)器與客戶端的動態(tài)交互,依據(jù)cgi標(biāo)準(zhǔn)編寫的代碼運(yùn)行在服務(wù)器端,處理來自用戶瀏覽器的數(shù)據(jù),如表單數(shù)據(jù)的操作、Web數(shù)據(jù)庫的訪問以及遠(yuǎn)程操控等。編寫不同的cgi程序,用于視頻采集設(shè)備的初始化以及實(shí)時(shí)控制。CGIC是一個(gè)支持CGI開發(fā)的開放源碼的標(biāo)準(zhǔn)C庫,只需要在開發(fā)的站點(diǎn)和程序文檔中公開聲明即可,表明程序使用了CGIC庫,用戶也可以購買商業(yè)授權(quán)而無需公開聲明。首先在其官網(wǎng)下載源代碼,目前使用的是cgic205版,設(shè)置交叉編譯器進(jìn)行交叉編譯,并移植cgic庫。完成移植后,將capture和egictest.cgi文件復(fù)制到Web服務(wù)器中的/web/cgi—bin目錄下。C GIC庫移植成功后,可在瀏覽器中訪問其測試頁面則表明測試成功。測試頁面如圖3所示。
3.3 MJPG-streamer服務(wù)器的設(shè)計(jì)
MJPG-streamer是一個(gè)基于網(wǎng)絡(luò)應(yīng)用的開源流媒體服務(wù)器。本課題對MJPG-streamer流媒體服務(wù)器進(jìn)行深入研究,結(jié)合試驗(yàn)平臺的特點(diǎn),對其進(jìn)行修改、編譯,使這個(gè)流媒體服務(wù)器可以正常的工作在系統(tǒng)平臺上。利用MJPG-streamer流媒體服務(wù)器與Linux系統(tǒng)所提供的API以及豐富的網(wǎng)絡(luò)功能完成視頻數(shù)據(jù)的采集、壓縮和網(wǎng)絡(luò)傳輸。
用戶通過瀏覽器與嵌入式Web服務(wù)器通信。MJPG-streamer視頻服務(wù)器主要負(fù)責(zé)架設(shè)服務(wù),進(jìn)行配置(端口,顯示參數(shù)),攝像頭的識別由s3c2440_camif.c驅(qū)動程序完成。MJPG-streamer服務(wù)器是一個(gè)命令行應(yīng)用軟件,它運(yùn)行時(shí)會啟動一個(gè)socket套接字來偵聽8080端口,若有TCP連接請求,則以TCP流將視頻發(fā)送出去??梢詮囊粋€(gè)輸入端復(fù)制JPG格式的圖像到多個(gè)輸出端,也可以將從攝像頭采集到的JPEG視頻流通過網(wǎng)絡(luò)傳輸?shù)綖g覽器上或者嵌入式設(shè)備上。有了視頻服務(wù)器處理數(shù)據(jù)的輸入輸出,在構(gòu)建前臺網(wǎng)頁時(shí)可以直接調(diào)用生成相應(yīng)的實(shí)時(shí)數(shù)據(jù),方法是在HTML頁面上輸入:http://IP地址:端口/? action=參數(shù)”格式來調(diào)用,其中參數(shù)為“stream”表示調(diào)用視頻網(wǎng)頁,“snapshot”表示調(diào)用相應(yīng)網(wǎng)頁,這個(gè)功能是通過httpd服務(wù)器實(shí)現(xiàn)的,MJPG—streamer流程圖如圖4所示。
MJPG—streamer其流程圖如圖4,有輸入組件input_uvc和輸出組件output_http,以及out_file等。每個(gè)組件的功能明。input_testpic ture.so將預(yù)設(shè)好的圖片編譯成頭文件,即使攝像頭不工作了,也能繼續(xù)傳輸未完全的;input_uvc.so調(diào)用攝像頭驅(qū)動,從攝像頭讀取視頻數(shù)據(jù),讀取一幀數(shù)據(jù),判斷數(shù)據(jù)幀的大小,如果數(shù)據(jù)幀太小或者太大,則丟棄。判斷原始數(shù)據(jù)格式,如果是YUV進(jìn)行格式轉(zhuǎn)換后將原始數(shù)據(jù)復(fù)制到全局緩沖區(qū),繼續(xù)刷新緩沖區(qū)。而input_control.so是攝像頭控制接口,output_http.so是一個(gè)網(wǎng)站服務(wù)器,將視頻文件以HTTP視頻數(shù)據(jù)服務(wù)流形式輸出。output_file.so實(shí)現(xiàn)圖片存儲到特定的文件夾。
評論