IP Camera遠程監(jiān)控系統(tǒng)的設(shè)計與實現(xiàn)
視頻監(jiān)控系統(tǒng)是一個集計算機處理技術(shù)、網(wǎng)絡(luò)通信技術(shù)和數(shù)字音視頻編解碼技術(shù)于一身的綜合系統(tǒng)。作為一種成熟的多媒體應(yīng)用,視頻監(jiān)控逐步走向數(shù)字化、網(wǎng)絡(luò)化、綜合化、無線智能化的潮流中。
用戶普遍要求訪問地點不受地域限制,能隨時隨地訪問被監(jiān)控地點,這就要求系統(tǒng)設(shè)計一個合理的服務(wù)機制,能夠?qū)崟r提供給用戶可靠的服務(wù)。
提出了一種基于流媒體服務(wù)器的遠程視頻監(jiān)控系統(tǒng),較好地解決了上述問題。結(jié)合流媒體技術(shù),就視頻監(jiān)控系統(tǒng)中涉及到的一些關(guān)鍵技術(shù)進行討論,并提出實現(xiàn)方法,最終實現(xiàn)了該系統(tǒng),取得了較好的應(yīng)用效果。
1 系統(tǒng)整體框架
遠程視頻監(jiān)控的主要分為3 大部分: 監(jiān)控端、服務(wù)器端和視頻采集端,如圖1 所示,下面將分別介紹各個部分的功能。
視頻采集端主要由攝像機、電動鏡頭、云臺、WIFI 模塊、SD 卡等模塊組成,主要負(fù)責(zé)音視頻數(shù)據(jù)的采集和傳輸。主要功能如下: ① 采集編碼部分:將現(xiàn)場采集到的音視頻數(shù)據(jù)進行壓縮編碼; ② 數(shù)據(jù)傳輸部分: 將壓縮完成的音視頻數(shù)據(jù)傳送到流媒體服務(wù)器; ③ 移動偵測部分: 進行移動偵測的功能,并將移動圖像存入到 SD 卡中; ④ PTZ 控制部分: 根據(jù)監(jiān)控端的控制指令,進行 PTZ 控制; ⑤ 報警部分: 完成報警功能。
服務(wù)器端主要完成音視頻數(shù)據(jù)的分組轉(zhuǎn)發(fā)、視頻數(shù)據(jù)存儲、設(shè)備管理、用戶管理、權(quán)限管理和日志管理等功能。
監(jiān)控端主要實現(xiàn)視頻監(jiān)控功能,分為 PC 監(jiān)控端和移動監(jiān)控端。用戶可以使用任何一臺聯(lián)網(wǎng) PC機或者移動端當(dāng)做監(jiān)控端,隨時隨地能調(diào)用本系統(tǒng)各監(jiān)控點的視頻數(shù)據(jù),并進行 PTZ 控制。
2 遠程監(jiān)控系統(tǒng)的實現(xiàn)
2. 1 服務(wù)器端
服務(wù)器端主要包括流媒體服務(wù)器、Web 服務(wù)器以及存儲管理服務(wù)器。其中流媒體服務(wù)器主要提供視頻直播、點播等功能。Web 服務(wù)器主要提供用戶統(tǒng)一的 Web 頁面和 Web Service 接口。存儲管理服務(wù)器負(fù)責(zé)視頻數(shù)據(jù)的存儲與調(diào)度。
2. 1. 1 流媒體服務(wù)器
流媒體服務(wù)器的主要功能是以流式協(xié)議( RTSP、MMS、RTMP 等) 將視頻文件以流媒體形式傳輸?shù)娇蛻舳耍┯脩粼诰€觀看; 也可從視頻采集、壓縮軟件接收實時視頻流,再以流媒體形式直播給客戶端。流媒體應(yīng)用系統(tǒng)的主要性能取決于流媒體服務(wù)器的性能和服務(wù)質(zhì)量 。因此,流媒體服務(wù)器是流媒體應(yīng)用系統(tǒng)的基礎(chǔ),選擇一款性能優(yōu)越的服務(wù)器是該系統(tǒng)的關(guān)鍵。
Wowza Media Server 是一款高性能、多線程的流媒體服務(wù)器軟件。專為多種終端設(shè)備提供音視頻播放服務(wù),支持 iOS、Windows、Android、BlackMerry 等主流系統(tǒng)的終端設(shè)備,開發(fā)者可以根據(jù)不同的應(yīng)用環(huán)境,選擇 RTSP、RTMP、HTTP Live Streaming 等不同的傳輸協(xié)議; Wowza Media Server 支持 H. 264 編碼標(biāo)準(zhǔn)進行封裝的 FLV、MP4、MOV、3GP 等音視頻格式; Wowza Media Server 能夠記錄實時流,同時允許用戶播放、暫停、恢復(fù)和實時回放直播流。
Wowza Media Server 提供了強大的接口功能,可以方便實現(xiàn)二次開發(fā)。在本系統(tǒng)中,流媒體服務(wù)器需要主動接收采集端傳輸?shù)囊曨l數(shù)據(jù)實現(xiàn)直播,并通過配置命令的形式,對數(shù)據(jù)進行存儲,該功能的實現(xiàn)是對 Wowza Media Server 流媒體服務(wù)器一個擴展的過程,實現(xiàn)方法如下: ① 攝像頭首先發(fā)送一個心跳包到流媒體服務(wù)器,表示此時在線; ② 攝像頭向流媒體服務(wù)器發(fā)送數(shù)據(jù),流媒體服務(wù)器接收到數(shù)據(jù)之后,根據(jù)攝像頭序列號生成不同的映射文件,并將相應(yīng)的數(shù)據(jù)寫入數(shù)據(jù)庫。如果攝像頭 IP 地址發(fā)生變化,會重復(fù)執(zhí)行上述步驟; ③ 流媒體服務(wù)器與存儲管理服務(wù)器交互,對視頻數(shù)據(jù)進行保存。
2. 1. 2 Web 服務(wù)器
Web 服務(wù)器主要提供用戶統(tǒng)一訪問入口以及Web Service 接口功能。本系統(tǒng)采用 Struts + Hibernate + Spring 技術(shù),結(jié) 合 ExtJS 框架,開發(fā)了一套Web 工程,實現(xiàn)了以下幾個功能: ① 用戶管理: 包括添加、刪除、修改、查詢用戶的功能; ② 權(quán)限管理: 包括添加、刪除、修改、查詢權(quán)限的功能; ③ 設(shè)備管理:包括添加、刪除、修改、查詢攝像頭的功能; 重啟重置攝像頭功能; PTZ 控制功能; ④ 日志管理: 包括用戶所有操作日志存儲以及日志查詢功能; ⑤ 直播列表獲取: 獲取當(dāng)前登陸用戶所有在線攝像頭列表,用于視頻直播; ⑥ 點播列表獲取: 根據(jù)用戶、IP 攝像頭、文件創(chuàng)建日期查詢視頻點播列表,用于視頻點播;⑦ 在網(wǎng)頁中嵌入 Flash 播放器,用于播放視頻;⑧ 提供移動端 Web Service 訪問接口,用于移動監(jiān)控。
2. 1. 3 存儲管理服務(wù)器
存儲管理服務(wù)器提供對監(jiān)控系統(tǒng)下各種存儲方案的統(tǒng)一管理,是監(jiān)控綜合平臺下的存儲系統(tǒng)的管理核心,簡稱 VRM。VRM 可管理前端設(shè)備存儲、網(wǎng)絡(luò)服務(wù)器存儲、嵌入式服務(wù)器存儲及 iSCSI 直寫存儲等多種存儲方式,并提供了快速高效的錄像數(shù)據(jù)的檢索、回放及備份功能。
VRM 實現(xiàn)了錄像計劃的配置、錄像計劃的同步、錄像數(shù)據(jù)的查詢及回放、網(wǎng)絡(luò)存儲服務(wù)器的管理、IP-SAN 設(shè)備的管理等功能。錄像計劃的配置、更新和刪除操作均由客戶端發(fā)送信令至 Web 服務(wù)器,再由 Web 服務(wù)器轉(zhuǎn)發(fā)至 VRM,最后由 VRM 依據(jù)存儲類型等分發(fā)至其管理的各個存儲服務(wù)器。同時 Web 服務(wù)器與 VRM 之間實現(xiàn)了定時同步機制,保證了錄像計劃的一致性。
客戶端的回放可以從存儲設(shè)備直接取流或者通過 VRM 與流媒體服務(wù)器提供的點播服務(wù)來進行?;胤耪埱髸r,客戶端不用明確了解系統(tǒng)采用的存儲方式,即可實現(xiàn)對錄像的查詢與回放,VRM 服務(wù)器為客戶端和存儲設(shè)備之間架起了一座橋梁。
2. 2 Flash Player 實現(xiàn)
為了減輕監(jiān)控端操作的負(fù)擔(dān),增強系統(tǒng)的可維護性,本系統(tǒng)中將使用 Flash Player 作為 PC 端的播放器。為了實現(xiàn)基于 Web 服務(wù)器的 B/S 的監(jiān)控機制,本系統(tǒng)將監(jiān)控畫面做成 JSP 頁面,并且把所有網(wǎng)頁放入 Web 服務(wù)器用于用戶訪問。在 JSP 頁面中必須提供Flash Player 插件的classid 和文件路徑,如果本機的注冊表中查找到該 classid,則不必下載。否則必須按照codebase 指定的路徑下載該控件。標(biāo)簽中的 id 是該 Flash Player 對象的名稱,用于訪問和設(shè)置對象屬性、調(diào)用對象方法,加載方法如下。< object" width = "636" height = "470" id = " liveOrVOD" align = "middle"classid = "clsid: d27cdb6e - ae6d - 11cf - 96b8- 444553540000 " codebase = " http: / /download. macromedia. com/pub/shockwave/cabs/flash/swflash. cab#version =9,0,0,0”> < /object >。