當(dāng)前位置:首頁(yè) > 嵌入式 > 嵌入式軟件
[導(dǎo)讀]深入研究嵌入式web服務(wù)器視頻監(jiān)控的應(yīng)用

1.引言

后PC機(jī)時(shí)代的到來(lái)引發(fā)了信息產(chǎn)品的產(chǎn)生,而Internet與信息產(chǎn)品的結(jié)合是當(dāng)今發(fā)展的一個(gè)趨勢(shì),嵌入式Internet技術(shù)的產(chǎn)生正好迎合了這個(gè)趨勢(shì)。據(jù)分析,嵌入式Internet系統(tǒng)在Internet電話、游戲裝置和手持式通信裝置的推動(dòng)下將會(huì)有突飛猛進(jìn)的發(fā)展。由于Internet技術(shù)的滲透,嵌入式系統(tǒng)正變得越來(lái)越智能化并具有越來(lái)越多的網(wǎng)絡(luò)友好特性;又由于Web技術(shù)的飛速發(fā)展,給嵌入式系統(tǒng)帶入Internet提供了絕佳的途徑。

嵌入式web技術(shù)是視頻監(jiān)控系統(tǒng)設(shè)計(jì)應(yīng)用最廣泛的技術(shù)之一。本文根據(jù)監(jiān)控系統(tǒng)對(duì)敖據(jù)吞吐量和安全可靠性等各方面的實(shí)際要求,結(jié)合相關(guān)研究的新進(jìn)展,深入討論了web服務(wù)器在監(jiān)控系統(tǒng)設(shè)計(jì)中的應(yīng)用技巧,并詳細(xì)做了實(shí)現(xiàn)上的闡述。對(duì)所有基于嵌入式web技術(shù)的監(jiān)控系統(tǒng)的設(shè)計(jì)具有非常實(shí)際的指導(dǎo)作用。

把圖像采集、視頻壓縮和WEB功能集中到一個(gè)體積很小的設(shè)備內(nèi),可以直接連入局域網(wǎng)和Internet,達(dá)到即插即用,省掉多種復(fù)雜的電纜,安裝方便,用戶也無(wú)須安裝任何硬件設(shè)備即可觀看,這使得由嵌入式網(wǎng)絡(luò)視頻監(jiān)控服務(wù)器組成的監(jiān)控網(wǎng)絡(luò)組網(wǎng)和擴(kuò)展都極為靈活方便。

2.WEB服務(wù)器所在系統(tǒng)工作原理

如圖1所示,系統(tǒng)有兩種網(wǎng)絡(luò)接入方式:通過(guò)PPPOE自動(dòng)撥號(hào),動(dòng)態(tài)獲取IP聯(lián)入Internet;自定義靜態(tài)IP連入局域網(wǎng)。

之后,系統(tǒng)的整個(gè)工作流程包括兩條主線:

1.通過(guò)HTTP/TCP/IP方式,解析來(lái)自監(jiān)控端的網(wǎng)頁(yè)請(qǐng)求,包括:攝像機(jī)控制(云臺(tái)上下左右、鏡頭光圈、縮放等等),數(shù)據(jù)庫(kù)讀寫(xiě)(視頻參數(shù)如分辨率、亮色度、碼流,畫(huà)質(zhì)),視頻調(diào)度與傳輸(多個(gè)用戶之間視頻數(shù)據(jù)的發(fā)送停止及其相互協(xié)調(diào),系統(tǒng)參數(shù)也放在這里)。

2.通過(guò)RTP/UDP/IP方式,為監(jiān)控端提供所需的實(shí)時(shí)視頻信息。RTP/UDP/IP的方式兼顧了視頻傳輸?shù)膶?shí)時(shí)性與QoS保證。

3.WEB服務(wù)器的選擇

根據(jù)工作原理的描述,WEB服務(wù)器處于整個(gè)系統(tǒng)核心的位置,需要解決的幾個(gè)難點(diǎn)包括:

1.安全性。只有授權(quán)登陸用戶才能進(jìn)行系統(tǒng)配置(網(wǎng)絡(luò)參數(shù)、視頻特性等等)。普通用戶只能簡(jiǎn)單監(jiān)控。

2.流量控制。視頻數(shù)據(jù)連續(xù)且大量,服務(wù)器應(yīng)該具備一定的協(xié)調(diào)各路監(jiān)控?cái)?shù)據(jù)的能力。

3.實(shí)時(shí)性。對(duì)于監(jiān)控端的web請(qǐng)求指令響應(yīng)速度,特別是在高負(fù)荷的情況下。

4.性能。在多路監(jiān)控請(qǐng)求同時(shí)存在的情況下,系統(tǒng)的響應(yīng)速度。

5.支持串口命令。云臺(tái)控制指令需要串口支持。

6.數(shù)據(jù)庫(kù)交互。包括用戶數(shù)據(jù)庫(kù),系統(tǒng)配置參數(shù)等等,都需要實(shí)現(xiàn)脫機(jī)保存。

綜上所述,Thttpd在安全性、性能、流量控制等方面有效的滿足系統(tǒng)需要,當(dāng)然,實(shí)時(shí)性也得到很好的保證。下面,結(jié)合源碼,首先實(shí)現(xiàn)Thttpd的基本功能,然后將視頻數(shù)據(jù)轉(zhuǎn)發(fā)、安全性、支持串口命令、數(shù)據(jù)庫(kù)交互的實(shí)現(xiàn)完善起來(lái)。

4.Thttpd基本功能的實(shí)現(xiàn)

首先,確保在編譯uCLinux內(nèi)核的makemenuconfig這一步,選中busybox中的Thttpd。

然后,根據(jù)需要,修改源碼/user/thttpd下的config.h:

#defineDEFAULT_PORT80

//服務(wù)器監(jiān)聽(tīng)端口

#defineDEFAULT_DIR/home/httpd

//設(shè)定服務(wù)器根目錄

#defineINDEX_NAMEindex.html

//設(shè)定訪問(wèn)服務(wù)器時(shí)的默認(rèn)主頁(yè)

#defineAUTH_FILEpasswd

//授權(quán)用戶數(shù)據(jù)庫(kù)文件

#defineCGI_PATTERN/cgi-bin/*.cgi

//CGI的文件名格式

#defineCGI_PATH/home/httpd/cgi-bin

//CGI的所在目錄

接下來(lái),建立服務(wù)器根目錄和文件目錄:

由于uCLinux的根文件系統(tǒng)為ROMFS,只讀,因此要在生成文件系統(tǒng)映像之前建立好其中的目錄和文件。首先是Web服務(wù)器根目錄,再是根目錄下的子目錄:文件根目錄和CGI程序目錄。修改/vendor/Samsung/4510B/makefile文件,在ROMFS_DIRS列出的目錄中增加home/httpd(服務(wù)器根目錄和文件根目錄),home/httpd/cgi-bin(CGI程序目錄)。

最后,將監(jiān)控系統(tǒng)相關(guān)的網(wǎng)頁(yè)和CGI程序分別放在/vendor/Generic/httpd和/vendor/Generic/httpd/cgi-bin中,就可以隨內(nèi)核編譯過(guò)程時(shí)自動(dòng)復(fù)制到image的相關(guān)目錄下。在/vendor/Samsung/4510B/rc中添加thttpd實(shí)現(xiàn)上電自動(dòng)執(zhí)行。

5.HTTP基本驗(yàn)證(RFC2617)的實(shí)現(xiàn)

首先必須生成存放用戶及其密碼的數(shù)據(jù)庫(kù)文件:

由于Thttpd在http驗(yàn)證的實(shí)現(xiàn)上基于b64_decode_table解密,因此需要提供相對(duì)應(yīng)b64加密而成的數(shù)據(jù)庫(kù)文件。然后,編譯/user/htpasswd.c,切換到相應(yīng)目錄下,

執(zhí)行。/htpasswd-cpasswdroot

Addingpasswordforroot.

Newpassword:

Re-typenewpassword:

其中,-c表示創(chuàng)建一個(gè)名字為passwd的新的用戶數(shù)據(jù)加密文件,同時(shí)第一個(gè)用戶名為root。

之后,將passwd文件復(fù)制到/vendor/Generic/httpd下面,并且注意在thttpd/config.h中define的AUTH_FILE與passwd同名。至此,thttpd的http驗(yàn)證功能就順利添加完成。

6.視頻調(diào)度與傳輸

在本系統(tǒng)中,模擬視頻數(shù)據(jù)經(jīng)過(guò)AD,采樣等預(yù)處理進(jìn)入支持MPEG4編碼的ASIC芯片壓縮后,打包發(fā)送的任務(wù)由Thttpd完成。

在多個(gè)監(jiān)控端請(qǐng)求同時(shí)存在的情況下,指令響應(yīng)本身Thttpd已經(jīng)完成,所以我們只需要實(shí)現(xiàn)數(shù)據(jù)傳輸。

在main函數(shù)里Mainloop開(kāi)始之前依次執(zhí)行g(shù)et_device,driver_init,device_init和alloc_resource,interrupt_enable,device_start,視頻流的編碼壓縮就開(kāi)始了。添加定時(shí)器響應(yīng)函數(shù),(void)tmr_create((structtimeval*)0,transfer_bitstream,(ClientData)mpeg4_fd,0,1);

其中mpeg4_fd,是編碼芯片的設(shè)備描述符,transfer_bitstream為響應(yīng)函數(shù)(內(nèi)容略)。

然后,根據(jù)Thttpd連接請(qǐng)求的變化,在handle_read與handle_send中添加簡(jiǎn)單相應(yīng)連接有效性判斷的代碼即可完成數(shù)據(jù)調(diào)度與傳輸?shù)墓δ堋?/p>

7.串口命令支持

云臺(tái)控制指令的發(fā)送需要RS485的支持。[!--empirenews.page--]

在thttpd.c的main函數(shù)里添加設(shè)備支持:打開(kāi)串口設(shè)備。

intcom1fd=open(/dev/ttyS1,O_RDWR|O_NOCTTY);

傳輸波特率的設(shè)定:

tcgetattr(com1fd,&oldtio);

cfmakeraw(&oldtio);

cfsetispeed(&oldtio,B9600);

cfsetospeed(&oldtio,B9600);

tcsetattr(com1fd,TCSANOW,&oldtio);

在libhttpd.c里包含定義云臺(tái)信令的頭文件后,在httpd_parse_request中添加如下代碼,

memcpy(cmd,YT_FOCUS_IN,YT_CMD_NUM);

將web請(qǐng)求轉(zhuǎn)換為對(duì)應(yīng)的云臺(tái)信令存儲(chǔ)在cmd數(shù)組中,最后,由于uclinux把所有設(shè)備作為文件操作,所以可以通過(guò)write(com1fd,cmd,YT_CMD_NUM);將云臺(tái)信令正確發(fā)出去。

8.配置信息的保存(MTD驅(qū)動(dòng)的實(shí)現(xiàn))

uCLinux在ARM上移植過(guò)程中,它是在Bootloader初始化系統(tǒng)并重映射內(nèi)存后,由Bootloader將Kernel和根文件系統(tǒng)的映像從FLASH上直接復(fù)制到RAMuCLinux系統(tǒng)起始地址(0x8000),然后通過(guò)設(shè)定PC值將控制權(quán)交給uCLinux。

這種方式采用的是ROMFS文件系統(tǒng),系統(tǒng)結(jié)構(gòu)簡(jiǎn)單,實(shí)現(xiàn)方便,但ROMFS是只讀文件系統(tǒng)。RAM盤(pán)雖可寫(xiě)但一旦掉電就會(huì)丟失內(nèi)容。若想長(zhǎng)久保存應(yīng)用程序的配置文件可采用兩種方法:一種是將FLASH上劃出幾個(gè)固定的扇區(qū)可讀可寫(xiě),用以專(zhuān)門(mén)存放所有要用到的配置文件;另一種是建立可寫(xiě)的JFFS2文件系統(tǒng)。前一種方法代碼簡(jiǎn)單、靈活,適用于不太頻繁的文件寫(xiě)入。后一種實(shí)現(xiàn)起來(lái)也比較簡(jiǎn)單,但時(shí)間、空間等方面的代價(jià)要高于前一種,適用于非常頻繁的文件寫(xiě)入(比如一分鐘超過(guò)十次)?;诒鞠到y(tǒng)中對(duì)配置數(shù)據(jù)存儲(chǔ)的實(shí)時(shí)性要求不高,而嵌入式資源又十分寶貴,因此考慮采用第一種方法,這就是MTD(memorytechnologydevice內(nèi)存技術(shù)設(shè)備)。MTD是用于訪問(wèn)memory設(shè)備(ROM、flash)的Linux的子系統(tǒng)。其所有源代碼在/drivers/mtd子目錄下。

由于MTD的主要目的是為了使新的memory設(shè)備的驅(qū)動(dòng)更加簡(jiǎn)單,因?yàn)樗橛谔囟ǖ拈W存設(shè)備和文件系統(tǒng)之間,可以理解為它在硬件和上層之間提供了一個(gè)抽象的接口。所以硬件驅(qū)動(dòng)程序不需要知道象JFFS2和FTL那樣的用戶模塊使用的方法。所有它們真正需要提供的就是一組對(duì)底層閃存進(jìn)行read、write和erase操作的簡(jiǎn)單例程,即/mtd目錄下mtd-utils.c相應(yīng)函數(shù)。將mtd-utils.c繼承過(guò)來(lái),另外,加上手工添加的flash分區(qū)表即可達(dá)到配置文件保存的目的。

配置信息的保存

本系統(tǒng)只有一片F(xiàn)LASH,大小為2M。擬分區(qū)如下:

name:bootloader(128KB),

size:0x20000,

offset:0x0,

mask_flags:MTD_WRITEABLE//只讀分區(qū)

name:kernel&rootfs(1856KB),

size:0x1D0000,

offset:0x20000

name:systemconfig(64KB),

size:0x10000,

offset:0x1F0000

將包含本分區(qū)表的文件放在drivers/mtd/map下,并修改相應(yīng)的makefile使之編譯時(shí)有效。

然后,選擇適當(dāng)?shù)腗TD用戶模塊,啟用對(duì)閃存的訪問(wèn):MTD_CHAR和MTD_BLOCK。MTD_CHAR提供對(duì)閃存的原始字符訪問(wèn),而MTD_BLOCK將閃存設(shè)計(jì)為可以在上面創(chuàng)建文件系統(tǒng)的常規(guī)塊設(shè)備(象IDE磁盤(pán))。與MTD_CHAR關(guān)聯(lián)的設(shè)備是在/vendor/Samsung/4510B/makefile的DEVICES中添加mtd0,c,90,0、mtd1,c,90,2、mtd2,c,90,4,而與MTD_BLOCK關(guān)聯(lián)的設(shè)備是添加mtdblock0,b,30,0、mtdblock1,b,30,1、mtdblock2,b,30,2。

最后,需要將MTD子系統(tǒng)編譯到內(nèi)核中,即打開(kāi)makemenuconfig里MTD相關(guān)的選項(xiàng)。

9.配置信息的管理

在thttpd.c的main函數(shù),加入open(/dev/mtd2,O_RDWR)可打開(kāi)mtdblock2。將drivers/mtd下mtd-utils.c復(fù)制到user/thttpd目錄下,即可使用其中的一些函數(shù)方便的實(shí)現(xiàn)flash的read和write操作。

10.結(jié)語(yǔ)

對(duì)于嵌入式Web服務(wù)器的研究和應(yīng)用,其意義是重大的。它為我們管理、控制和監(jiān)測(cè)各種各樣設(shè)備提供了一個(gè)很好的途徑。這種設(shè)備可以是具有有限內(nèi)存資源的8位或16位系統(tǒng),已足夠提供一個(gè)用戶界面,而且這種方式是基于Internet的。這種設(shè)備可以在世界任何一個(gè)地方,只要它連入Internet就能夠控制它。

目前國(guó)外的相關(guān)研究很多,如Pharlap公司的MicroWeb、AgranatSystems公司的EmWeb、EmWare公司的emMicro、Allegro公司的RomPager、WindRiver公司的Wind,還有Boa、Enea、PicoWeb、ChipWeb、Ipic、NetAcquire、Voyager、Quiotix等。國(guó)內(nèi)的有Webit。

創(chuàng)新:

1. 嵌入式web技術(shù)的應(yīng)用已越來(lái)越廣泛,但大多采用比較簡(jiǎn)單的服務(wù)器BOA,真正深入應(yīng)用功能更強(qiáng)大的Thttpd的方案少之又少,本文正是Thttpd在實(shí)際應(yīng)用中的深入研究。

2. 本文根據(jù)監(jiān)控系統(tǒng)對(duì)數(shù)據(jù)吞吐量和安全可靠性等各方面的實(shí)際要求,結(jié)合相關(guān)研究的新進(jìn)展,深入討論了web服務(wù)器在監(jiān)控系統(tǒng)設(shè)計(jì)中的應(yīng)用技巧,并詳細(xì)做了實(shí)現(xiàn)上的闡述。文中涉及的某些技術(shù)應(yīng)用技巧,譬如web server的功能框圖,可廣范應(yīng)用于各種基于嵌入式web技術(shù)的系統(tǒng)中去。譬如路由器設(shè)計(jì)。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專(zhuān)欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車(chē)的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車(chē)技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車(chē)工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車(chē)。 SODA V工具的開(kāi)發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車(chē) 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開(kāi)幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱(chēng),數(shù)字世界的話語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱(chēng)"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉