您好,登錄后才能下訂單哦!
??VMS系統的開放性和擴展性特性非常適合使用SOA(面向服務的架構)方法來進行設計。
??服務作為物理上獨立無關的軟件程序而存在,每個服務被賦予其自身獨特的功能上下文環境,并由一系列與該環境相關的能力所組成。服務提供的能力通過服務接口(服務合約)來表達。
??根據服務的可復用性,可編排性,可自治,可組合性等特點,在設計服務時宜使用自頂向下的設計思路,在設計模型時可先設計頂層的服務,確定頂層的服務邊界后,再逐層設計下層的子服務。
??在服務類型上,宜將服務分為實體服務,任務服務,工具服務三種類型 。
??VMS中涉及到媒體、元數據、系統管理數據(用戶,權限)等實體的服務可歸類為實體服務;媒體會話,任務調度之類與控制器相關的服務可歸類于任務服務;網絡傳輸,安全加密,日志等基礎服務可歸類于工具服務。
??使用實體服務,任務服務,工具服務三種服務模型可構建邏輯服務抽象層,如圖 1所示。
??使用SOA進行VMS的設計應首先聚焦于視頻監控系統的業務。以視頻數據為核心,一個視頻監控系統的基礎結構如圖 2所示:
??ONVIF作為基于Web service技術標準制定的安防設備開放操作接口,囊括了圖 2中包含的所有功能。其服務設計思想可作為VMS設計時的參考。
??分析一下ONVIF定義的服務,可歸為如下幾類:
??VMS中,將視頻流,錄像,設備參數,設備等視為不同的邏輯實體對象,系統功能即可視為對這些實體對象的操作。借鑒在電信管理網中使用的CMIP (Common Management Information Protocol,通用管理信息協議)所支持的CMIS服務,我們可在VMS中定義六種抽象出來的服務操作原語:
??自martin fowler發表了那篇著名的微服務博客文章之后,微服務架構在近幾年間在軟件界著實火了一把,在國內軟件界似乎出現了一種不談微服務的軟件架構設計就不夠高大上的現象。其實仔細剖析微服務的模式,我個人更認為微服務是SOA在實現層次的細化和擴充。微服務在分解服務為更細粒度時,同時也為分解的服務間關系帶來更多的復雜性。因此在使用面向服務的思路來實施VMS時也要根據實際場景和規模來選擇合適的方案。
??在前面的軟件架構中,設備接入,實時媒體流會話控制服務,錄像服務這三個系統中的核心服務在部署上,每個服務建議設計為服務集群(最簡單的方式是在一堆服務實例前加一個負載均衡器),可根據項目的實際規模進行配置伸縮。
??VMS中,我將數據分為控制面數據與媒體數據,視頻流這些媒體數據在規模大時可考慮選型如HDFS這樣的開源分布式存儲系統,在規模小時可使用單獨的磁陣即可。
??對于控制面的數據,如設備信息,媒體配置信息等數據,由于會被多個服務實例訪問,可考慮使用ElasticSearch, etcd這樣分布式協同系統。
??VMS中,我建議服務原語以Rest Api的形式定義,這樣在服務實例之間基于HTTP的restful接口就可實現服務原語在服務間的互操作(比如使用spring cloud作為服務實現框架)。
??同樣,消息服務器根據項目的規模來確定,在系統規模較小的場景下,使用輕量級的消息服務器(如使用redis就可以),系統規模較大的場景下,可以考慮kafka這樣的消息集群服務。
??VMS中涉及到RTSP,SDP,SIP,RTP/RTCP等多種流媒體相關協議,幸運的是,現在github上各種語言的流媒體中間件都可以找到,如果實在要我推薦,在我用過的產品中,我覺得gstreamer就很好。
傳統的VMS中,在瀏覽器中對視頻進行瀏覽需要借助自己編寫的控件,隨著WebRTC技術的出現,主流瀏覽器已經逐步支持WebRTC的規范,因而使用WebRTC實現免插件的視頻瀏覽成為可能。需要注意,目前瀏覽器的支持視頻編碼格式有限,在服務端可能要轉碼,另外也需要構建WebRTC的服務端作為視頻源。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。