劉炳均 譚國(guó)斌
中國(guó)人民解放軍總后軍事交通運(yùn)輸研究所車輛裝備檢測(cè)試驗(yàn)中心 300161
設(shè)計(jì)模式在網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng)設(shè)計(jì)開發(fā)中的應(yīng)用
劉炳均 譚國(guó)斌
中國(guó)人民解放軍總后軍事交通運(yùn)輸研究所車輛裝備檢測(cè)試驗(yàn)中心 300161
隨著視頻監(jiān)控系統(tǒng)的功能日益復(fù)雜,監(jiān)控軟件的開發(fā)面臨著許多諸如代碼冗余、開發(fā)效率低等新的問題。利用設(shè)計(jì)模式可以更加簡(jiǎn)單方便地復(fù)用成功的設(shè)計(jì)和體系結(jié)構(gòu),從而更快更好的完成系統(tǒng)的設(shè)計(jì)。實(shí)踐證明,充分利用設(shè)計(jì)模式提高了開發(fā)的效率,增強(qiáng)了系統(tǒng)的可維護(hù)性和可擴(kuò)展性。
視頻監(jiān)控;設(shè)計(jì)模式
網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng)是以攝像機(jī)為前端設(shè)備,以視頻服務(wù)器,硬盤錄像機(jī)等設(shè)備為中介,以計(jì)算機(jī)網(wǎng)絡(luò)為信息傳輸平臺(tái),以計(jì)算機(jī)為終端,實(shí)現(xiàn)數(shù)字視頻的傳輸、存儲(chǔ)和播放等功能的安全防范系統(tǒng)。它以其直觀、準(zhǔn)確、及時(shí)和信息內(nèi)容豐富而廣泛應(yīng)用于生產(chǎn)管理、保安等許多場(chǎng)合。
進(jìn)入二十一世紀(jì),隨著傳輸技術(shù)、計(jì)算機(jī)、網(wǎng)絡(luò)以及圖像處理技術(shù)的飛速發(fā)展,視頻監(jiān)控技術(shù)也有了很大的提高。飛速發(fā)展的技術(shù)和人們的需求要求視頻監(jiān)控系統(tǒng)實(shí)現(xiàn)基于各種網(wǎng)絡(luò)的點(diǎn)對(duì)點(diǎn)、一點(diǎn)對(duì)多點(diǎn)、多點(diǎn)對(duì)多點(diǎn)的實(shí)時(shí)監(jiān)控、遙控?cái)z像機(jī)、報(bào)警處理、信息管理等多種功能。這就要求網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng)具有很強(qiáng)的可維護(hù)性、可擴(kuò)展性,對(duì)軟件開發(fā)人員提出了挑戰(zhàn)。
本文在對(duì)網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng)進(jìn)行分析的基礎(chǔ)上,針對(duì)系統(tǒng)開發(fā)中遇到的幾個(gè)問題,提出了基于設(shè)計(jì)模式的解決方案,實(shí)現(xiàn)了一個(gè)具有分布監(jiān)控、集中管理,任意整合、隨意擴(kuò)充等功能的網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng)。
設(shè)計(jì)模式是對(duì)被用來(lái)在特定場(chǎng)景下解決一般設(shè)計(jì)問題的類和相互通信的對(duì)象的描述。它是面向?qū)ο笤O(shè)計(jì)者在實(shí)際工作中針對(duì)特定問題的經(jīng)驗(yàn)和解決方案的總結(jié),它通過規(guī)范和有效的形式記錄這些設(shè)計(jì)經(jīng)驗(yàn),使人們可以更加簡(jiǎn)單方便地復(fù)用成功的設(shè)計(jì)和體系結(jié)構(gòu),設(shè)計(jì)出復(fù)用性和靈活性更好的系統(tǒng)。
設(shè)計(jì)模式使得軟件系統(tǒng)的對(duì)象建模更加合理,對(duì)象間的耦合度更小,能獲得更高層次的設(shè)計(jì)復(fù)用和代碼復(fù)用。同時(shí),使用設(shè)計(jì)模式可以降低軟件系統(tǒng)設(shè)計(jì)的復(fù)雜度。將軟件設(shè)計(jì)結(jié)果及其使用的設(shè)計(jì)模式同時(shí)記錄,可以幫助開發(fā)人員理解這些可復(fù)用思想,提高軟件系統(tǒng)的可理解性。
1995年Gamma等4人在《Design Patterns Elements of Reusable Object -Oriented Software》一書中介紹了3類(創(chuàng)建型、結(jié)構(gòu)型和行為型)23種常用的設(shè)計(jì)模式。這本書的發(fā)表是設(shè)計(jì)模式發(fā)展的一個(gè)重要的里程碑式的標(biāo)志性事件。
網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng)分為兩個(gè)部分,服務(wù)器端和客戶端。其中,服務(wù)器端的主要功能有:設(shè)備管理、軟件中間件管理、用戶權(quán)限管理、系統(tǒng)配置等??蛻舳说闹饕δ苡?實(shí)時(shí)監(jiān)控、錄像查看、報(bào)警處理、視頻服務(wù)器配置等。圖1所示為系統(tǒng)的功能結(jié)構(gòu)圖。
根據(jù)系統(tǒng)的功能需求對(duì)系統(tǒng)進(jìn)行分析,系統(tǒng)設(shè)計(jì)中有幾個(gè)難點(diǎn):
在系統(tǒng)中,將所有的硬件設(shè)備(攝像機(jī)、硬盤錄像機(jī)等)、軟件中間件(流媒體服務(wù)器、流轉(zhuǎn)發(fā)服務(wù)器、電視墻服務(wù)器等)、用戶、方案和系統(tǒng)設(shè)置統(tǒng)稱為“資源”。另外系統(tǒng)中還存在一種特殊的資源——“區(qū)域”。區(qū)域是一個(gè)抽象的概念,它可以包含子區(qū)域或直接包含各種硬件設(shè)備或軟件中間件。根據(jù)需求,在所開發(fā)的視頻監(jiān)控系統(tǒng)中,需要更改資源的屬性,并且把所有的資源整合到一個(gè)層次分明的樹形結(jié)構(gòu)中,進(jìn)行統(tǒng)一配置管理。這就需要對(duì)資源類進(jìn)行抽象與重組。
系統(tǒng)的客戶端需要實(shí)現(xiàn)的功能主要有:圖像預(yù)覽、文件下載回放、云臺(tái)控制、語(yǔ)音對(duì)講、監(jiān)聽、錄像、抓拍、日志管理、系統(tǒng)配置等等。這些功能都是通過對(duì)具體的DVR(硬盤錄像機(jī))進(jìn)行控制來(lái)實(shí)現(xiàn)的。
DVR廠家提供了訪問DVR的SDK接口,這些接口有上千個(gè)之多。系統(tǒng)需要支持多個(gè)廠家的設(shè)備,而每個(gè)廠家提供的SDK又各不相同。因此,系統(tǒng)開發(fā)的一大困難是:系統(tǒng)SDK相當(dāng)復(fù)雜,在程序中直接調(diào)用SDK勢(shì)必導(dǎo)致代碼的臃腫、重復(fù),不利于系統(tǒng)的維護(hù)和擴(kuò)展。因此,系統(tǒng)設(shè)計(jì)的目標(biāo)是既能同時(shí)兼容多個(gè)廠家設(shè)備的SDK,又能保證DVR訪問接口的統(tǒng)一。
系統(tǒng)中的DVR可以產(chǎn)生兩大類的報(bào)警信息:系統(tǒng)報(bào)警和異常報(bào)警。系統(tǒng)報(bào)警主要是指DVR的硬盤異常報(bào)警、制式異常報(bào)警、非法訪問報(bào)警等;異常報(bào)警主要是指視頻信號(hào)的通道移動(dòng)偵測(cè)報(bào)警、DVR的報(bào)警輸入端口上傳的報(bào)警等。
對(duì)于不同的報(bào)警信息系統(tǒng)有默認(rèn)的處理方式,同時(shí)系統(tǒng)還需要支持用戶自定義的報(bào)警的處理方式。比如對(duì)于通道移動(dòng)偵測(cè)報(bào)警,用戶可能要求系統(tǒng)自動(dòng)顯示該通道的視頻信號(hào),同時(shí)要彈出對(duì)話框提示發(fā)生了報(bào)警,有可能還需要彈出該通道所在地點(diǎn)的電子地圖。也就是說對(duì)于同一種報(bào)警信息,可能同時(shí)有多種不同處理方式,這些處理方式是不確定的,是可以通過用戶來(lái)自定義的。這要求系統(tǒng)有極大的靈活性,可以隨時(shí)添加或刪除不同的報(bào)警處理方式。這種報(bào)警信息的處理能夠代表系統(tǒng)中的一類問題,即對(duì)于不確定的消息的響應(yīng)。
在對(duì)系統(tǒng)分析的基礎(chǔ)上開始進(jìn)行系統(tǒng)設(shè)計(jì)。首先,對(duì)系統(tǒng)中對(duì)象進(jìn)行抽象,確定系統(tǒng)中的類和類之間的關(guān)系,然后針對(duì)系統(tǒng)特點(diǎn)提出了基于設(shè)計(jì)模式的解決方案,很好的解決了系統(tǒng)設(shè)計(jì)中的難點(diǎn)。
根據(jù)系統(tǒng)資源的種類,定義不同的資源相對(duì)應(yīng)的類。主要有:區(qū)域類(C R e g i o n)、嵌入式硬盤錄像機(jī)類(C E m b e d d e d D e v)、流媒體服務(wù)器(C S t r e a m S e r v e r N o d e)、用戶類(CUser)、預(yù)案類(CActionPlan)、動(dòng)作類(C A c t i o n)、預(yù)覽組類(C B r o w s e G r o u p)、預(yù)覽窗口(CBrowseWindow)等等。
要將不同資源組成一個(gè)樹形的結(jié)構(gòu),就要求不同的資源之間存在父子關(guān)系。在系統(tǒng)設(shè)計(jì)中,使用設(shè)計(jì)模式中的Composite模式解決這一問題。
Composite模式的意圖是將對(duì)象組合成樹形結(jié)構(gòu)以表示“部分—整體”的層次關(guān)系。Composite使得用戶對(duì)單個(gè)對(duì)象和組合對(duì)象的使用具有一致性。其結(jié)構(gòu)圖如圖2所示。
圖2 Composite模式結(jié)構(gòu)圖
要實(shí)現(xiàn)樹形結(jié)構(gòu),所有的資源類必須擁有父節(jié)點(diǎn)和子節(jié)點(diǎn)的集合,這是資源類之間的共性,通過提煉這個(gè)共性,抽象出一個(gè)模板類CParentClass,用這個(gè)類來(lái)描述節(jié)點(diǎn)間的父子關(guān)系。CParentClass的結(jié)構(gòu)圖如圖3所示。
圖3 CParentClass結(jié)構(gòu)圖
以CParentClass為模板,構(gòu)造一個(gè)基本節(jié)點(diǎn)類CBaseNode,用于表示樹型結(jié)構(gòu)中的節(jié)點(diǎn),作為Composite模式中的Component,所有的硬件、軟件類節(jié)點(diǎn)、用戶類節(jié)點(diǎn)、預(yù)案類節(jié)點(diǎn)、預(yù)覽組類節(jié)點(diǎn)和系統(tǒng)配置類節(jié)點(diǎn)都從該類派生,都成為一個(gè)Composite。這樣所有的相關(guān)類就都具有了父子關(guān)系,可以形成一個(gè)完整的清晰的樹形結(jié)構(gòu)。
面對(duì)系統(tǒng)SDK過于繁瑣的問題,系統(tǒng)需要提供一個(gè)統(tǒng)一的接口來(lái)實(shí)現(xiàn)所有DVR的功能。在系統(tǒng)設(shè)計(jì)中,使用設(shè)計(jì)模式中的Facade模式解決了這個(gè)問題。
Facade模式的意圖是為子系統(tǒng)中的一組接口提供一個(gè)一致的界面,它定義了一個(gè)高層接口,這個(gè)接口使得這一子系統(tǒng)更加容易使用。這個(gè)意圖與系統(tǒng)的需求完全相符。
不同的廠家生產(chǎn)的不同型號(hào)的DVR的SDK接口并不相同,但是DVR所提供的功能卻大同小異。通過功能抽象,將對(duì)DVR的基本操作封裝到一個(gè)CDVR類中,這是一個(gè)虛基類,它沒有具體的實(shí)現(xiàn),只提供了一些功能接口供上層調(diào)用,從而對(duì)客戶屏蔽了復(fù)雜的SDK。
具體不同廠家DVR功能,是通過派生CDVR類來(lái)實(shí)現(xiàn)的。比如希望系統(tǒng)支持“??怠鼻度胧紻VR,就從C E m b D V R類(嵌入式D V R類,從CDVR類派生)派生出了CHikEmbDVR類。在CHikEmbDVR類中,通過調(diào)用SDK實(shí)現(xiàn)了對(duì)海康嵌入式DVR的各種操作。這幾個(gè)類的結(jié)構(gòu)圖如圖4所示。這樣就實(shí)現(xiàn)了一個(gè)以CDVR類為最上層接口的F a c a d e模式的子系統(tǒng)。
圖4 DVR系列類關(guān)系圖
對(duì)報(bào)警處理的要求是可以隨時(shí)添加或刪除不同的報(bào)警處理方式。就是說需要實(shí)現(xiàn)這樣的功能:當(dāng)某資源的報(bào)警狀態(tài)發(fā)生改變時(shí),所有需要對(duì)該報(bào)警進(jìn)行響應(yīng)的對(duì)象都要針對(duì)該報(bào)警信息做出相應(yīng)的反應(yīng)。解決這個(gè)問題,應(yīng)用了Observer模式。
圖5 Observer模式結(jié)構(gòu)圖
圖6 系統(tǒng)報(bào)警監(jiān)聽處理類結(jié)構(gòu)圖
圖7 報(bào)警監(jiān)聽處理順序圖
Observer模式的意圖是定義對(duì)象間的一種一對(duì)多的依賴關(guān)系,當(dāng)一個(gè)對(duì)象的狀態(tài)發(fā)生改變時(shí),所有依賴于它的對(duì)象都得到通知,并被自動(dòng)更新。Observer模式的結(jié)構(gòu)圖如圖5所示。
在系統(tǒng)中建立了兩個(gè)類:CDVRMsgHandler和CListener類。其中CDVRMsgHandler類用來(lái)處理所有上傳的報(bào)警信息,在系統(tǒng)中充當(dāng)了目標(biāo)者(Subject)的角色,CListener類用來(lái)監(jiān)聽CDVRMsgHandler類發(fā)出的報(bào)警信息,在系統(tǒng)中充當(dāng)了觀察者(Observer)的角色,所有可能需要對(duì)報(bào)警信息做出響應(yīng)的類都從CListener類派生,作為具體報(bào)警監(jiān)聽者。在系統(tǒng)運(yùn)行時(shí),需要監(jiān)聽報(bào)警的Listener只需要在CDVRMsgHandler類對(duì)象中注冊(cè),就可以監(jiān)聽到所有的報(bào)警信息,從而對(duì)相應(yīng)的報(bào)警做出響應(yīng)。具體的報(bào)警監(jiān)聽的類結(jié)構(gòu)圖如圖6所示,報(bào)警產(chǎn)生時(shí)程序?qū)?bào)警的處理順序如圖7所示。
在系統(tǒng)中,還應(yīng)用設(shè)計(jì)模式解決了許多其他的問題,比如用A b s t r a c t Factory模式解決了多種設(shè)備即插即用的問題;用Mediator模式解決了多個(gè)對(duì)象間消息傳遞的問題;用Adapter模式實(shí)現(xiàn)了CEmbeddedDev類對(duì)象與CDVR類對(duì)象的對(duì)應(yīng),從而解決了通過資源對(duì)象播放視頻的問題。限于篇幅關(guān)系,具體的解決方案這里不再贅述。
本文以網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng)的開發(fā)為線索,討論了設(shè)計(jì)模式在面向?qū)ο蟮能浖O(shè)計(jì)開發(fā)中的應(yīng)用。面對(duì)系統(tǒng)開發(fā)中遇到的各種難題,提出了各種基于設(shè)計(jì)模式解決方案。通過設(shè)計(jì)模式的應(yīng)用,系統(tǒng)的結(jié)構(gòu)更加合理,開發(fā)效率大大提高,系統(tǒng)的可擴(kuò)展性、可維護(hù)性更強(qiáng)。
如今,設(shè)計(jì)模式已經(jīng)在軟件生產(chǎn)中獲得了越來(lái)越廣泛的應(yīng)用,它對(duì)于降低軟件開發(fā)成本,提高生產(chǎn)效率和軟件的可靠性具有越來(lái)越重要的意義。
[1] Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides等著;李英軍等譯.設(shè)計(jì)模式:可復(fù)用面向?qū)ο筌浖幕A(chǔ)[M].第一版.北京:機(jī)械工業(yè)出版社.2000.9; 20-25
[2] 文艾,劉鵬,莫國(guó)慶,周光友.視頻監(jiān)控系統(tǒng)可復(fù)用播放器框架研究[J].計(jì)算機(jī)應(yīng)用研究.2008;25(增刊)∶2090-2092
10.3969/j.issn.1001-8972.2010.11.040