摘 要:本文首先介紹了實(shí)現(xiàn)基于嵌入式LINUX系統(tǒng)的網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng)的實(shí)際意義和價(jià)值,其次進(jìn)一步介紹了監(jiān)控系統(tǒng)技術(shù)應(yīng)用的現(xiàn)狀。第二部分首先說明的本次設(shè)計(jì)需要搭建的硬件和軟件平臺(tái),在選好軟硬件平臺(tái)的基礎(chǔ)上逐步實(shí)現(xiàn)了USB視頻設(shè)備的驅(qū)動(dòng)、視頻服務(wù)器、視頻客戶端。
關(guān)鍵詞:S3C2410;網(wǎng)絡(luò)監(jiān)控系統(tǒng);Linux
中圖分類號(hào):TP311.52
1 論文研究背景及意義
如今嵌入式系統(tǒng)在電子信息領(lǐng)域的發(fā)展已經(jīng)越來越獲得了國內(nèi)外各類廠商和用戶的一致關(guān)注,嵌入式系統(tǒng)已經(jīng)越來越多的影響到人類的日常生活、工業(yè)自動(dòng)化生產(chǎn)、高科技產(chǎn)業(yè)等諸多領(lǐng)域。嵌入式系統(tǒng)以其特有的專用性和便宜性大大沖擊了傳統(tǒng)以PC機(jī)位主導(dǎo)的電子信息產(chǎn)業(yè),是的電子產(chǎn)業(yè)的發(fā)展出來了新的契機(jī),在市場(chǎng)上獲得了普遍的認(rèn)可和追捧,其價(jià)格低廉,操作個(gè)性化、簡(jiǎn)易化,符合針對(duì)不同用戶不同的需求,而且由于嵌入式系統(tǒng)這些年來的不斷發(fā)展和成熟,尤其是微軟公司專門針對(duì)嵌入式系統(tǒng)開發(fā)的Windows CE系統(tǒng)和目前普遍使用的開源的嵌入式Linux系統(tǒng)都在對(duì)硬件的支持和圖形界面的應(yīng)用方面取得豐厚的成果,使得嵌入式系統(tǒng)的競(jìng)爭(zhēng)優(yōu)勢(shì)越來越突顯出來。而本文之所以選擇嵌入式Linux系統(tǒng)作為開發(fā)的軟件系統(tǒng)平臺(tái),也是從其開放性的角度考慮的,嵌入式Linux系統(tǒng)基本上是免費(fèi)的,所以大大降低了開發(fā)成本,搭建了一個(gè)更為可靠的、實(shí)用的、高效的管理平臺(tái),為后期的軟件開發(fā)奠定了堅(jiān)實(shí)的基礎(chǔ)。
2 監(jiān)控系統(tǒng)技術(shù)應(yīng)用現(xiàn)狀
視頻監(jiān)控系統(tǒng)在通信、醫(yī)療、金融、安保等諸多領(lǐng)域有著廣泛的使用。視頻監(jiān)控系統(tǒng)在國內(nèi)也獲得了廣泛的推廣,國家以及企業(yè)、個(gè)人的投入越來越多,視頻監(jiān)控技術(shù)的發(fā)展對(duì)于金融安全、人身財(cái)產(chǎn)、社會(huì)治安等方面的貢獻(xiàn)也越來越大。隨著社會(huì)的發(fā)展視頻監(jiān)控系統(tǒng)也越來越多的獲得廠商的青睞,在國內(nèi)也出現(xiàn)很多具有國際競(jìng)爭(zhēng)力的知名品牌,如??低?、大華、天地偉業(yè)等,以其一流的技術(shù)占據(jù)著國內(nèi)大部分市場(chǎng)。視頻監(jiān)控系統(tǒng)一般有兩個(gè)部分組成,即視頻服務(wù)器和視頻客戶端,在研究的過程中必須對(duì)這兩部分進(jìn)行軟件的開發(fā)和管理,建立好通信機(jī)制,設(shè)計(jì)好正好工作流程。按照視頻流的數(shù)模特性來劃分,模擬視頻監(jiān)控系統(tǒng)和數(shù)字視頻監(jiān)控系統(tǒng)構(gòu)成了視頻監(jiān)控系統(tǒng)目前最主要的兩個(gè)技術(shù)方向。視頻監(jiān)控系統(tǒng)技術(shù)在未來的發(fā)展中得到更多功能方面的擴(kuò)展,如無線視頻網(wǎng)絡(luò)、智能識(shí)別視頻系統(tǒng)等方向。
2.1 平臺(tái)選擇
本論文的硬件平臺(tái)選用s3c2410開發(fā)板,操作系統(tǒng)內(nèi)核采用Linux2.6內(nèi)核,本論文硬件平臺(tái)采用的主要硬件是s3c2410開發(fā)板。該板是韓國三星公司已經(jīng)比較成熟的產(chǎn)品,在硬件配置方面基本滿足本文的需要。采用Linux2.6內(nèi)核的主要原因是這個(gè)內(nèi)核版本經(jīng)過較長(zhǎng)時(shí)間的推廣和完善,無論是對(duì)本文所需的視頻監(jiān)控系統(tǒng)硬件驅(qū)動(dòng)還是軟件系統(tǒng)的開發(fā),都會(huì)有很好的支持,而且運(yùn)行穩(wěn)定,符合視頻監(jiān)控系統(tǒng)的要求。
2.2 USB視頻設(shè)備驅(qū)動(dòng)的實(shí)現(xiàn)
本論文的USB視頻設(shè)備驅(qū)動(dòng)運(yùn)行在嵌入式環(huán)境下,對(duì)視頻圖像處理能力有限,所以本驅(qū)動(dòng)程序不支持V4L中VIDIOCGPICT和VIDIOCSPICT接口。原始的圖像格式與攝像頭采集到的格式是一致的。
2.2.1 USB視頻設(shè)備驅(qū)動(dòng)實(shí)現(xiàn)待需解決的問題
USB視頻設(shè)備驅(qū)動(dòng)的實(shí)現(xiàn)需要解決如下幾個(gè)問題:對(duì)USB視頻設(shè)備的端點(diǎn)類型和端點(diǎn)號(hào)、一副圖片的結(jié)束等具體數(shù)據(jù)的判定。
(1)確定USB視頻設(shè)備的端點(diǎn)類型和端點(diǎn)號(hào)
從開發(fā)板的硬件支持角度來分析,使用USB接口作為視頻監(jiān)控系統(tǒng)的數(shù)據(jù)接口是比較合適的選擇,而Linux系統(tǒng)也為USB接口提供了強(qiáng)大的支持,通過視頻監(jiān)控系統(tǒng)的USB驅(qū)動(dòng)對(duì)USB設(shè)備的操作實(shí)際就是對(duì)某一端點(diǎn)的操作,而端點(diǎn)又進(jìn)一步的被定義為控制、中斷、同步、塊四個(gè)種類,每一個(gè)USB設(shè)備都具有特定數(shù)日的端點(diǎn)、特定類型的端點(diǎn)以及端點(diǎn)號(hào)確定的特點(diǎn)。因此在進(jìn)行USB視頻設(shè)備驅(qū)動(dòng)開發(fā)之前,USB視頻設(shè)備的端點(diǎn)類型、端點(diǎn)數(shù)日以及端點(diǎn)號(hào)需要在設(shè)計(jì)時(shí)設(shè)置。
(2)判斷一副圖片的結(jié)束
圖像數(shù)據(jù)在于USB核心是連續(xù)的數(shù)據(jù)流,而一副圖像的開始和結(jié)束并沒有嚴(yán)格的界定出來,如果沒有對(duì)這些數(shù)據(jù)進(jìn)行標(biāo)識(shí),那么在系統(tǒng)看來這些數(shù)據(jù)就是一些單純的數(shù)據(jù)流,是沒有意義的數(shù)據(jù),對(duì)圖像就不能進(jìn)行正確的識(shí)別和存儲(chǔ),因此需要利用緩存技術(shù),工作的原理就是USB視頻設(shè)備驅(qū)動(dòng)從連續(xù)的數(shù)據(jù)流中獲取圖片信息,通過緩存保存起來。而保存在緩存中的數(shù)據(jù)流并沒有提供圖片信息的開始和結(jié)束的標(biāo)識(shí),這個(gè)時(shí)候攝像頭的數(shù)據(jù)格式有對(duì)圖像信息的開始和結(jié)束的定義和標(biāo)識(shí),雖然不同廠商的芯片對(duì)標(biāo)志有不同的定義,導(dǎo)致沒有一定的規(guī)律可循,但是在沒有統(tǒng)一的標(biāo)準(zhǔn)的情況下,具體的定義可以由對(duì)應(yīng)的驅(qū)動(dòng)程序來代替,通過不同的數(shù)據(jù)格式的定義對(duì)標(biāo)識(shí)過的圖像信息逐一提取,就獲得我們所需要的圖像,如使用JPEG格式的圖像,就可以從標(biāo)示符Oxff Oxd8開始認(rèn)定一副圖片的起始。
(3)提高USB的數(shù)據(jù)傳輸速度
在Linux系統(tǒng)中urb來實(shí)現(xiàn)USB的數(shù)據(jù)通信。通過擴(kuò)大urb的緩沖,提高速度,提高有效數(shù)據(jù)的傳輸速度。
2.2.2 USB視頻設(shè)備驅(qū)動(dòng)具體實(shí)現(xiàn)
視頻設(shè)備驅(qū)動(dòng)層處于上層應(yīng)用和USB子系統(tǒng)之間,不同的USB設(shè)備在軟件上的差異主要體現(xiàn)在該層。該層主要要完成兩個(gè)方面的工作:上層應(yīng)用所需接口函的調(diào)用、接口函數(shù)供USB子系統(tǒng)回調(diào)。在本視頻設(shè)備驅(qū)動(dòng)函數(shù)中,如open函數(shù)、read函數(shù)、close函數(shù)和ioctl函數(shù),構(gòu)成了USB子系統(tǒng)主要的數(shù)據(jù)傳輸,而probe函數(shù)和isoc irq函數(shù)實(shí)現(xiàn)了子系統(tǒng)的回調(diào)。上層應(yīng)用和USB子系統(tǒng)的通過函數(shù)調(diào)用接口的關(guān)系如圖1所示。
圖1 接日函數(shù)的調(diào)用關(guān)系
圖2 接日函數(shù)關(guān)系圖
圖2是這幾個(gè)接口函數(shù)的關(guān)系圖,參數(shù)信息,如分辨率、幀速度、圖像格式等數(shù)據(jù)存在全局內(nèi)存空間1中。而圖像數(shù)據(jù)的相關(guān)內(nèi)存空間則保存在全局內(nèi)存空間2中。同時(shí)以環(huán)形緩沖區(qū)的方式保存圖像的存儲(chǔ)空間,環(huán)大小為兩幀圖片大小。
2.3 網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng)的軟件設(shè)計(jì)
本文主要通過Linux的多線程機(jī)制和Socket機(jī)制實(shí)現(xiàn)了視頻服務(wù)器。視頻壓縮采用了H.263壓縮標(biāo)準(zhǔn),壓縮以后的數(shù)據(jù)以AVI文件格式保存。視頻服務(wù)器主要向USB視頻驅(qū)動(dòng)發(fā)出讀取數(shù)據(jù)的請(qǐng)求,數(shù)據(jù)發(fā)被服務(wù)器送給需要數(shù)據(jù)的客戶端。主要體現(xiàn)出處理多個(gè)客戶端的同步和共享的問題,而采用Linux的多線程機(jī)制就可以解決這兒?jiǎn)栴},在Linux的多線程機(jī)制中一個(gè)主線程、一個(gè)讀取視頻數(shù)據(jù)子線程、其他客戶端通信子線程構(gòu)成了視頻服務(wù)器主要組成部分。
2.3.1 主線程邏輯
首先通過主線程對(duì)攝像頭進(jìn)行初始化,同時(shí)讀取視頻數(shù)據(jù)子線程將被啟動(dòng),進(jìn)一步打開服務(wù)器端Socket,等待客戶端的連接,客戶端發(fā)送請(qǐng)求并由服務(wù)端接收,這樣客戶端通信子線程就生成了,用于和客戶通通信的線程就生成了。
2.3.2 兩類子線程序通信邏輯
視頻服務(wù)器包括了兩類子線程:讀取視頻數(shù)據(jù)子線程、客戶端通信子線程。就像正常的程序的讀寫功能一樣,視頻服務(wù)器對(duì)數(shù)據(jù)的讀寫分別依靠讀取視頻數(shù)據(jù)子線程和客戶端通信子線程,兩類子線程的通信邏輯是讀寫功能的擴(kuò)展,讀取視頻數(shù)據(jù)子線程完成寫的功能,戶端通信子線程執(zhí)行讀的功能,這樣在視頻服務(wù)器中就完整的體現(xiàn)了讀寫的邏輯功能。
2.3.3 讀取視頻數(shù)據(jù)的子線程
讀取視頻數(shù)據(jù)的子線程的主要功能是從設(shè)備驅(qū)動(dòng)中用read方法讀取一幅圖片的數(shù)據(jù),并把數(shù)據(jù)拷貝到環(huán)形共享緩沖區(qū)當(dāng)中。
2.3.4 客戶端通信的子線程序
首先把視頻數(shù)據(jù)看作是一幅幅圖片數(shù)據(jù)的重復(fù),為了在客戶端能夠定位一幅圖片的結(jié)束和下一幅圖片的開始,在每幅圖片數(shù)據(jù)的開始前插入定長(zhǎng)的picwe header結(jié)構(gòu),其中的size字段告訴客戶端當(dāng)前圖片數(shù)據(jù)的長(zhǎng)度。從設(shè)計(jì)的角度來看我們希望客戶端能夠隨時(shí)、方便的控制服務(wù)器端,控制攝像頭的方位、攝像頭的焦距、圖片的分辨率等因素,只要在客戶端到服務(wù)器端的方向上定義一個(gè)數(shù)據(jù)流,負(fù)責(zé)兩端的通信和數(shù)據(jù)的控制,而從數(shù)據(jù)流的結(jié)構(gòu)來看,我們可以認(rèn)為這個(gè)數(shù)據(jù)流是message結(jié)構(gòu)的重復(fù)。
2.4 視頻客戶端的實(shí)現(xiàn)
2.4.1 視頻客戶端功能需求
由于C/S架構(gòu)的一些特性,如C/S架構(gòu)管理模式更加規(guī)范和高效比較適合視屏監(jiān)控系統(tǒng)的應(yīng)用,所以本論文選擇了C/S架構(gòu)作為客戶端的實(shí)現(xiàn)方法。視頻的播放、視頻的壓縮存儲(chǔ)的功能就是在采取C/S架構(gòu)的客戶端下實(shí)現(xiàn)的。在windwos下有兩種類型的線程:窗口線程和工作線程。窗口線程有自己的消息隊(duì)列,而工作線程在系統(tǒng)看來就是調(diào)用執(zhí)行函數(shù)的過程,系統(tǒng)為線程提供接口、緩存等系統(tǒng)資源,線程在執(zhí)行函數(shù)的結(jié)束后就自動(dòng)釋放占用的系統(tǒng)資源。
2.4.2 圖像的顯示
本論文選擇VFW作為客戶端的視頻開發(fā)技術(shù),VFW在微軟公司的不斷開發(fā)下,已經(jīng)成為一個(gè)很強(qiáng)大的軟件開發(fā)包,能為視頻監(jiān)控系統(tǒng)提供一整套的功能服務(wù),其功能模塊主要包括AVICAP,MCIAVI,MSVIDEO,AVIFILE,ICM,ACM等6個(gè)模塊,在VFW的支持下,包括視頻圖像的捕捉、播放、壓縮和存儲(chǔ)等功能都可以逐一實(shí)現(xiàn)??蛻舳死肁VICAP模塊執(zhí)行捕獲視頻的函數(shù)為AVI文件輸入輸出和視頻設(shè)備驅(qū)動(dòng)程序提供一個(gè)編程接口,AVICAP模塊獲取到屏幕上的視頻操作以后需要通過MSVIDEO模塊來處理,而MSVIDEO模塊主要調(diào)用的函數(shù)是DrawDib函數(shù),而MSVIDEO模塊把通過網(wǎng)絡(luò)接收到的圖像數(shù)據(jù)以特定格式進(jìn)行顯示。MCIAVI包含對(duì)VFW的MCI命令的解釋器。AVI文件則通過AVIFILE支持標(biāo)準(zhǔn)多媒體I/O函數(shù)所提供的更高的命令來訪問。ICM管理用于視頻壓縮、解壓縮的編解碼器。ACM功能模塊用于波形音頻壓縮、解壓的編解碼器的管理。DrawDib可以把DIB畫在屏幕上,使用了BITMAPINFO數(shù)據(jù)結(jié)構(gòu)。
2.4.3 圖像的壓縮
圖像的壓縮采用H.263標(biāo)準(zhǔn),H.263壓縮算法的核心函數(shù)包括了對(duì)幀內(nèi)壓縮的CodeOneIntra函數(shù)和對(duì)幀間壓縮的CodeOneOrTwo函數(shù)。CodeOneIntra函數(shù)實(shí)現(xiàn)了圖像像素宏塊的劃分。CodeOneOrTwo函數(shù)一首先定義了一個(gè)二維數(shù)組MV,其變量類型為MotionVecto:結(jié)構(gòu)體,用來保存每一宏塊的運(yùn)動(dòng)矢量。
參考文獻(xiàn):
[1]劉富弧.數(shù)字視頻監(jiān)控系統(tǒng)開發(fā)與應(yīng)用[M].北京:機(jī)械工業(yè)出版社,2003.
[2]康軍,戴冠中.基于Internet的工業(yè)以太網(wǎng)遠(yuǎn)程監(jiān)控系統(tǒng)設(shè)計(jì)[J].控制工程,2004.
[3]FERRAIOLO D F,SANDHU R S,GAVRILA S,et al.Proposed NIST standard for role-based access control[J].ACM Press,2001.
[4]Jerry D,Gibson,Toby Berger.多媒體數(shù)字壓縮原理與標(biāo)準(zhǔn)[M].北京:電子工業(yè)出版社,2000.
[5]ITU-T.H.263 Video coding for low bit rate communication[J/OL],1996.
作者簡(jiǎn)介:金磊(1981.11-),男,湖南人,碩士,專業(yè)組長(zhǎng),工程師,研究方向:臨床醫(yī)學(xué)工程,醫(yī)院信息化建設(shè);馬明瑞(1980.07-),男,回族,新疆人,碩士研究生,科員,工程師,研究方向:醫(yī)院信息化研究。
作者單位:新疆醫(yī)科大學(xué)附屬腫瘤醫(yī)院醫(yī)學(xué)工程部,烏魯木齊 830000