劉炳均 譚國斌
中國人民解放軍總后軍事交通運輸研究所車輛裝備檢測試驗中心 300161
設計模式在網絡視頻監控系統設計開發中的應用
劉炳均 譚國斌
中國人民解放軍總后軍事交通運輸研究所車輛裝備檢測試驗中心 300161
隨著視頻監控系統的功能日益復雜,監控軟件的開發面臨著許多諸如代碼冗余、開發效率低等新的問題。利用設計模式可以更加簡單方便地復用成功的設計和體系結構,從而更快更好的完成系統的設計。實踐證明,充分利用設計模式提高了開發的效率,增強了系統的可維護性和可擴展性。
視頻監控;設計模式
網絡視頻監控系統是以攝像機為前端設備,以視頻服務器,硬盤錄像機等設備為中介,以計算機網絡為信息傳輸平臺,以計算機為終端,實現數字視頻的傳輸、存儲和播放等功能的安全防范系統。它以其直觀、準確、及時和信息內容豐富而廣泛應用于生產管理、保安等許多場合。
進入二十一世紀,隨著傳輸技術、計算機、網絡以及圖像處理技術的飛速發展,視頻監控技術也有了很大的提高。飛速發展的技術和人們的需求要求視頻監控系統實現基于各種網絡的點對點、一點對多點、多點對多點的實時監控、遙控攝像機、報警處理、信息管理等多種功能。這就要求網絡視頻監控系統具有很強的可維護性、可擴展性,對軟件開發人員提出了挑戰。
本文在對網絡視頻監控系統進行分析的基礎上,針對系統開發中遇到的幾個問題,提出了基于設計模式的解決方案,實現了一個具有分布監控、集中管理,任意整合、隨意擴充等功能的網絡視頻監控系統。
設計模式是對被用來在特定場景下解決一般設計問題的類和相互通信的對象的描述。它是面向對象設計者在實際工作中針對特定問題的經驗和解決方案的總結,它通過規范和有效的形式記錄這些設計經驗,使人們可以更加簡單方便地復用成功的設計和體系結構,設計出復用性和靈活性更好的系統。
設計模式使得軟件系統的對象建模更加合理,對象間的耦合度更小,能獲得更高層次的設計復用和代碼復用。同時,使用設計模式可以降低軟件系統設計的復雜度。將軟件設計結果及其使用的設計模式同時記錄,可以幫助開發人員理解這些可復用思想,提高軟件系統的可理解性。
1995年Gamma等4人在《Design Patterns Elements of Reusable Object -Oriented Software》一書中介紹了3類(創建型、結構型和行為型)23種常用的設計模式。這本書的發表是設計模式發展的一個重要的里程碑式的標志性事件。
網絡視頻監控系統分為兩個部分,服務器端和客戶端。其中,服務器端的主要功能有:設備管理、軟件中間件管理、用戶權限管理、系統配置等。客戶端的主要功能有:實時監控、錄像查看、報警處理、視頻服務器配置等。圖1所示為系統的功能結構圖。

根據系統的功能需求對系統進行分析,系統設計中有幾個難點:
在系統中,將所有的硬件設備(攝像機、硬盤錄像機等)、軟件中間件(流媒體服務器、流轉發服務器、電視墻服務器等)、用戶、方案和系統設置統稱為“資源”。另外系統中還存在一種特殊的資源——“區域”。區域是一個抽象的概念,它可以包含子區域或直接包含各種硬件設備或軟件中間件。根據需求,在所開發的視頻監控系統中,需要更改資源的屬性,并且把所有的資源整合到一個層次分明的樹形結構中,進行統一配置管理。這就需要對資源類進行抽象與重組。
系統的客戶端需要實現的功能主要有:圖像預覽、文件下載回放、云臺控制、語音對講、監聽、錄像、抓拍、日志管理、系統配置等等。這些功能都是通過對具體的DVR(硬盤錄像機)進行控制來實現的。
DVR廠家提供了訪問DVR的SDK接口,這些接口有上千個之多。系統需要支持多個廠家的設備,而每個廠家提供的SDK又各不相同。因此,系統開發的一大困難是:系統SDK相當復雜,在程序中直接調用SDK勢必導致代碼的臃腫、重復,不利于系統的維護和擴展。因此,系統設計的目標是既能同時兼容多個廠家設備的SDK,又能保證DVR訪問接口的統一。
系統中的DVR可以產生兩大類的報警信息:系統報警和異常報警。系統報警主要是指DVR的硬盤異常報警、制式異常報警、非法訪問報警等;異常報警主要是指視頻信號的通道移動偵測報警、DVR的報警輸入端口上傳的報警等。
對于不同的報警信息系統有默認的處理方式,同時系統還需要支持用戶自定義的報警的處理方式。比如對于通道移動偵測報警,用戶可能要求系統自動顯示該通道的視頻信號,同時要彈出對話框提示發生了報警,有可能還需要彈出該通道所在地點的電子地圖。也就是說對于同一種報警信息,可能同時有多種不同處理方式,這些處理方式是不確定的,是可以通過用戶來自定義的。這要求系統有極大的靈活性,可以隨時添加或刪除不同的報警處理方式。這種報警信息的處理能夠代表系統中的一類問題,即對于不確定的消息的響應。
在對系統分析的基礎上開始進行系統設計。首先,對系統中對象進行抽象,確定系統中的類和類之間的關系,然后針對系統特點提出了基于設計模式的解決方案,很好的解決了系統設計中的難點。
根據系統資源的種類,定義不同的資源相對應的類。主要有:區域類(C R e g i o n)、嵌入式硬盤錄像機類(C E m b e d d e d D e v)、流媒體服務器(C S t r e a m S e r v e r N o d e)、用戶類(CUser)、預案類(CActionPlan)、動作類(C A c t i o n)、預覽組類(C B r o w s e G r o u p)、預覽窗口(CBrowseWindow)等等。
要將不同資源組成一個樹形的結構,就要求不同的資源之間存在父子關系。在系統設計中,使用設計模式中的Composite模式解決這一問題。
Composite模式的意圖是將對象組合成樹形結構以表示“部分—整體”的層次關系。Composite使得用戶對單個對象和組合對象的使用具有一致性。其結構圖如圖2所示。

圖2 Composite模式結構圖
要實現樹形結構,所有的資源類必須擁有父節點和子節點的集合,這是資源類之間的共性,通過提煉這個共性,抽象出一個模板類CParentClass,用這個類來描述節點間的父子關系。CParentClass的結構圖如圖3所示。

圖3 CParentClass結構圖
以CParentClass為模板,構造一個基本節點類CBaseNode,用于表示樹型結構中的節點,作為Composite模式中的Component,所有的硬件、軟件類節點、用戶類節點、預案類節點、預覽組類節點和系統配置類節點都從該類派生,都成為一個Composite。這樣所有的相關類就都具有了父子關系,可以形成一個完整的清晰的樹形結構。
面對系統SDK過于繁瑣的問題,系統需要提供一個統一的接口來實現所有DVR的功能。在系統設計中,使用設計模式中的Facade模式解決了這個問題。
Facade模式的意圖是為子系統中的一組接口提供一個一致的界面,它定義了一個高層接口,這個接口使得這一子系統更加容易使用。這個意圖與系統的需求完全相符。
不同的廠家生產的不同型號的DVR的SDK接口并不相同,但是DVR所提供的功能卻大同小異。通過功能抽象,將對DVR的基本操作封裝到一個CDVR類中,這是一個虛基類,它沒有具體的實現,只提供了一些功能接口供上層調用,從而對客戶屏蔽了復雜的SDK。
具體不同廠家DVR功能,是通過派生CDVR類來實現的。比如希望系統支持“海康”嵌入式DVR,就從C E m b D V R類(嵌入式D V R類,從CDVR類派生)派生出了CHikEmbDVR類。在CHikEmbDVR類中,通過調用SDK實現了對海康嵌入式DVR的各種操作。這幾個類的結構圖如圖4所示。這樣就實現了一個以CDVR類為最上層接口的F a c a d e模式的子系統。

圖4 DVR系列類關系圖
對報警處理的要求是可以隨時添加或刪除不同的報警處理方式。就是說需要實現這樣的功能:當某資源的報警狀態發生改變時,所有需要對該報警進行響應的對象都要針對該報警信息做出相應的反應。解決這個問題,應用了Observer模式。

圖5 Observer模式結構圖

圖6 系統報警監聽處理類結構圖

圖7 報警監聽處理順序圖
Observer模式的意圖是定義對象間的一種一對多的依賴關系,當一個對象的狀態發生改變時,所有依賴于它的對象都得到通知,并被自動更新。Observer模式的結構圖如圖5所示。
在系統中建立了兩個類:CDVRMsgHandler和CListener類。其中CDVRMsgHandler類用來處理所有上傳的報警信息,在系統中充當了目標者(Subject)的角色,CListener類用來監聽CDVRMsgHandler類發出的報警信息,在系統中充當了觀察者(Observer)的角色,所有可能需要對報警信息做出響應的類都從CListener類派生,作為具體報警監聽者。在系統運行時,需要監聽報警的Listener只需要在CDVRMsgHandler類對象中注冊,就可以監聽到所有的報警信息,從而對相應的報警做出響應。具體的報警監聽的類結構圖如圖6所示,報警產生時程序對報警的處理順序如圖7所示。
在系統中,還應用設計模式解決了許多其他的問題,比如用A b s t r a c t Factory模式解決了多種設備即插即用的問題;用Mediator模式解決了多個對象間消息傳遞的問題;用Adapter模式實現了CEmbeddedDev類對象與CDVR類對象的對應,從而解決了通過資源對象播放視頻的問題。限于篇幅關系,具體的解決方案這里不再贅述。
本文以網絡視頻監控系統的開發為線索,討論了設計模式在面向對象的軟件設計開發中的應用。面對系統開發中遇到的各種難題,提出了各種基于設計模式解決方案。通過設計模式的應用,系統的結構更加合理,開發效率大大提高,系統的可擴展性、可維護性更強。
如今,設計模式已經在軟件生產中獲得了越來越廣泛的應用,它對于降低軟件開發成本,提高生產效率和軟件的可靠性具有越來越重要的意義。
[1] Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides等著;李英軍等譯.設計模式:可復用面向對象軟件的基礎[M].第一版.北京:機械工業出版社.2000.9; 20-25
[2] 文艾,劉鵬,莫國慶,周光友.視頻監控系統可復用播放器框架研究[J].計算機應用研究.2008;25(增刊)∶2090-2092
10.3969/j.issn.1001-8972.2010.11.040