郝天鹿
(唐山學(xué)院 計(jì)算中心,河北 唐山063000)
視頻監(jiān)控是安全防范系統(tǒng)的重要組成部分,它包括前端攝像機(jī)、傳輸線纜、視頻監(jiān)控平臺(tái)。視頻監(jiān)控系統(tǒng)以直觀性、實(shí)時(shí)性和生動(dòng)性等特點(diǎn)而被廣泛應(yīng)用于多種場(chǎng)合,是一種防范能力較強(qiáng)的綜合系統(tǒng)。近年來,隨著計(jì)算機(jī)通訊技術(shù)、網(wǎng)絡(luò)傳輸技術(shù)和圖形圖像處理技術(shù)的飛速發(fā)展,視頻監(jiān)控技術(shù)也有了長(zhǎng)足的發(fā)展[1]。
但是,由于 DVR(Digital Video Recorder,數(shù)字視頻錄像機(jī),也稱硬盤錄像機(jī))視頻輸入端口的限制和受地理位置的局限,并不能集中、統(tǒng)一地管理這些設(shè)備,導(dǎo)致使用者要記錄多個(gè)DVR的訪問地址,即 URL(Uniform Resource Locator,統(tǒng)一資源定位符),以及相應(yīng)的賬號(hào)和密碼。為了解決上述問題,本文將結(jié)合我院3個(gè)校區(qū)的微機(jī)實(shí)驗(yàn)室的視頻監(jiān)控設(shè)備運(yùn)行情況,介紹如何對(duì)這些設(shè)備進(jìn)行統(tǒng)一管理,以提供準(zhǔn)確的監(jiān)控視頻。
微機(jī)實(shí)驗(yàn)室視頻監(jiān)控系統(tǒng)的拓?fù)浣Y(jié)構(gòu)如圖1所示。該系統(tǒng)采用??倒?000系列的DVR和DS-2CD6233F-SDI型號(hào)的數(shù)字?jǐn)z像機(jī)。若要將3個(gè)校區(qū)的微機(jī)實(shí)驗(yàn)室的視頻監(jiān)控進(jìn)行統(tǒng)一管理,那么實(shí)驗(yàn)室里的7個(gè)DVR就必須通過校園網(wǎng)絡(luò)進(jìn)行連接。
圖1 微機(jī)實(shí)驗(yàn)室視頻監(jiān)控系統(tǒng)拓?fù)浣Y(jié)構(gòu)
軟件系統(tǒng)體系結(jié)構(gòu)分為兩種情況;一種是C/S(Client/Server,即客戶機(jī)/服務(wù)器)結(jié)構(gòu),通過將任務(wù)合理分配到Client端和Server端,降低了Server端的資源開銷和Client端與Server端之間的通訊開銷。Client端需要安裝客戶端軟件才可進(jìn)行管理操作,大部分程序主要在客戶端上,而服務(wù)器端主要提供數(shù)據(jù)管理、數(shù)據(jù)共享、數(shù)據(jù)及系統(tǒng)維護(hù)和并發(fā)控制等,客戶端程序主要完成用戶的具體業(yè)務(wù)[2]。另外一種是B/S(Browser/Server,即瀏覽器/服務(wù)器)結(jié)構(gòu),用戶界面完全通過系統(tǒng)網(wǎng)頁(yè)瀏覽器來實(shí)現(xiàn),應(yīng)用程序基本上都在服務(wù)器端。由于客戶端沒有程序,應(yīng)用程序的升級(jí)和維護(hù)都可以在服務(wù)器端完成,來彌補(bǔ)客戶端升級(jí)、維護(hù)不便等方面的不足。由于客戶端使用瀏覽器,使得用戶界面“豐富多彩”,但數(shù)據(jù)的打印輸出等功能受到了限制。為了解決這個(gè)問題,可以單獨(dú)設(shè)計(jì)成ActiveX控件,或者采用第三方插件來彌補(bǔ)這個(gè)缺陷。
為了統(tǒng)一管理3個(gè)校區(qū)的微機(jī)實(shí)驗(yàn)室的攝像機(jī),并且記錄這些攝像機(jī)的基本信息,提供數(shù)據(jù)共享,根據(jù)海康公司官網(wǎng)提供的二次開發(fā)接口,本系統(tǒng)將采用C/S系統(tǒng)結(jié)構(gòu),它可以降低服務(wù)器資源的開銷,使實(shí)時(shí)視頻數(shù)據(jù)可以在客戶端計(jì)算機(jī)上流暢地顯示。
本系統(tǒng)采用Sql Server 2005數(shù)據(jù)管理系統(tǒng),它是微軟公司推出的一款數(shù)據(jù)庫(kù)管理平臺(tái),提供了企業(yè)級(jí)的數(shù)據(jù)管理功能。Sql Server 2005數(shù)據(jù)庫(kù)引擎為關(guān)系型數(shù)據(jù)和機(jī)構(gòu)型數(shù)據(jù)提供了安全可靠的存儲(chǔ)功能,可以為龐大、復(fù)雜的應(yīng)用程序提供安全、準(zhǔn)確、快速的數(shù)據(jù)管理功能。
根據(jù)軟件系統(tǒng)的需求,一是管理微機(jī)室視頻攝像機(jī)的信息,二是為了管理登錄用戶的信息,所以只需設(shè)計(jì)兩個(gè)關(guān)系型的數(shù)據(jù)庫(kù)表即可,如圖2和圖3所示。
圖2 攝像機(jī)信息管理表
圖3 用戶登錄管理表
uniqueidentifier數(shù)據(jù)類型可存儲(chǔ)一個(gè)128位的二進(jìn)制值數(shù),其作用與GUID(全球唯一標(biāo)識(shí)符)的功能一樣。GUID是全球唯一的二進(jìn)制數(shù),它是根據(jù)網(wǎng)卡和CPU時(shí)鐘而隨機(jī)生成的一個(gè)二進(jìn)制數(shù),它保證世界上的任何兩臺(tái)計(jì)算機(jī)都不會(huì)生成重復(fù)的GUID值。GUID主要用于Windows系統(tǒng)中,經(jīng)常用于應(yīng)用程序的產(chǎn)品號(hào)、注冊(cè)表鍵值、接口標(biāo)識(shí)和數(shù)據(jù)庫(kù)等方面。
用戶登錄表中登錄密碼采用MD5的加密方式。MD5是計(jì)算機(jī)安全領(lǐng)域廣泛使用的一種散列函數(shù),用以提供消息的完整性保護(hù),它將整個(gè)文件當(dāng)作一個(gè)大文本信息,通過其不可逆的字符串變換算法,產(chǎn)生了這個(gè)唯一的MD5信息摘要。
根據(jù)攝像機(jī)信息管理表的結(jié)構(gòu)和設(shè)計(jì)用戶界面,對(duì)攝像機(jī)的基本信息進(jìn)行管理,主要包括:設(shè)備所在位置,設(shè)備名稱,DVR的品牌,DVR的型號(hào),DVR的IP地址或 URL,DVR的端口,登錄DVR的用戶名,登錄DVR的密碼,通道號(hào),是否是URL標(biāo)識(shí)。
若要使用DVR里固有的web程序來查看某一微機(jī)實(shí)驗(yàn)室的實(shí)時(shí)監(jiān)控視頻,就必須知道它連接在哪個(gè)DVR上的哪個(gè)通道上,并且還要知道登錄該DVR時(shí)的URL、用戶名和密碼。用戶只能訪問連接到該DVR上的攝像機(jī)的實(shí)時(shí)監(jiān)控視頻,并不能跨越到其它的DVR上來訪問其它的攝像機(jī)的監(jiān)控視頻。由此可見,設(shè)計(jì)一套對(duì)這些攝像機(jī)集中統(tǒng)一管理的系統(tǒng)是十分必要的。攝像機(jī)管理的主要功能包括:添加攝像機(jī)信息,修改攝像機(jī)信息,刪除攝像機(jī)信息。運(yùn)行效果如圖4所示。
圖4 攝像機(jī)管理運(yùn)行效果
系統(tǒng)攝像機(jī)管理模塊主要是通過Treeview(樹狀結(jié)構(gòu)控件)分層次展示的,在程序加載時(shí),從攝像機(jī)信息管理表中讀取信息,動(dòng)態(tài)生成樹狀結(jié)構(gòu)。樹狀結(jié)構(gòu)控件的優(yōu)點(diǎn)是可以展開和折疊、顯示或隱藏其中的節(jié)點(diǎn)和具有分層目錄結(jié)構(gòu)的特點(diǎn)[3]。
實(shí)時(shí)監(jiān)控視頻的獲取,主要是通過??倒咎峁┑腄LL(Dynamic Link Library,動(dòng)態(tài)鏈接庫(kù))來實(shí)現(xiàn)的。此 DLL是基于VC++進(jìn)行編寫的,它是應(yīng)用程序與DVR之間進(jìn)行連接、通信和互操作的通道[4],在相應(yīng)的DLL中提供了一系列的有關(guān)操作DVR的操作,比如實(shí)時(shí)預(yù)覽、錄像文件回放、下載、鎖定和備份、實(shí)時(shí)抓屏等,如要實(shí)現(xiàn)其相應(yīng)的功能,只需按照規(guī)定的流程調(diào)用這些函數(shù)。
本系統(tǒng)采用Delphi語(yǔ)言進(jìn)行開發(fā)設(shè)計(jì),它不能直接調(diào)用??倒舅峁┑腄LL中的函數(shù),所以還需要在程序中對(duì)這些函數(shù)重新封裝,以供Delphi程序使用。
獲取實(shí)時(shí)監(jiān)控視頻的流程如圖5所示。根據(jù)用戶點(diǎn)擊的節(jié)點(diǎn)(攝像機(jī)),在數(shù)據(jù)庫(kù)中查詢出該攝像機(jī)屬于哪個(gè)DVR,連接在哪個(gè)通道,該DVR登錄時(shí)的用戶名、密碼和端口號(hào),然后調(diào)用封裝后的函數(shù),最后把實(shí)時(shí)監(jiān)控視頻顯示在應(yīng)用程序的窗體中。
圖5 獲取實(shí)時(shí)監(jiān)控視頻流程圖
2.4.1 設(shè)備初始化
調(diào)用其它函數(shù)的前提,在程序中的定義為:
function NET_DVR_Init:BOOL;stdcall;external'HCNetSDK.dll';
stdcall要與原DLL中的函數(shù)的定義格式相同,external指明調(diào)用的DLL路徑與文件名,本系統(tǒng)主要采用了靜態(tài)調(diào)用的方式。
2.4.2 用戶注冊(cè)設(shè)備
向設(shè)備注冊(cè)用戶,在程序中的定義為:
function NET_DVR_Login_V30(sDVRIP:PAnsiChar;wDVRPort:Word;sUserName:PAnsiChar;sPassword:PAnsiChar;lpDeviceInfo:LPNET_DVR_DEVICEINFO_V30):Longint;stdcall;external'HCNetSDK.dll'
sDVRIP:DVR的IP地址,wDVRPort:訪問DVR端口:sUserName:用戶的登錄名;sPassword:用戶的登錄密碼;lp-DeviceInfo:設(shè)備信息。如果注冊(cè)成功,則返回用戶ID,后續(xù)對(duì)DVR的操作都需要通過此ID來實(shí)現(xiàn)。
2.4.3 啟動(dòng)預(yù)覽監(jiān)控視頻
獲取實(shí)時(shí)監(jiān)控視頻數(shù)據(jù)流,并顯示在應(yīng)用程序窗體中。在程序中的定義為:
function NET_DVR_RealPlay_V30(lUserID:Longint;lpClientInfo:LPNET_DVR_CLIENTINFO;fRealDataCall-Back_V30:TfRealDataCallBack_V30;pUser:Pointer;bBlocked:Boolean):Longint;stdcall;external'HCNetSDK.dll';
lUserID:NET_DVR_Login()或 NET_DVR_Login_V30()的返回值;lpClientInfo:采用何種方式預(yù)覽;fbRealData-CallBack_V30:指向回調(diào)函數(shù)的指針;pUser:用戶數(shù)據(jù);bBlocked:請(qǐng)求碼流過程是否阻塞。其中回調(diào)函數(shù)的定義為:procedure testRealDataCallBack _V30 (lRealHandle:Longint;dwDataType:Longword;pBuffer:LPByte;dw-BufSize:Longword;pUser:Pointer);stdcall。
2.4.4 停止預(yù)覽監(jiān)控視頻
使實(shí)時(shí)監(jiān)控視頻停止在應(yīng)用程序窗口中運(yùn)行,在程序中的定義為:
function NET _DVR _StopRealPlay(lRealHandle:Longint):Boolean;stdcall;external'HCNetSDK.dll';
lRealHandle:預(yù)覽句柄,NET_DVR_StopRealPlay的返回值,它并沒有與設(shè)備斷開,在設(shè)備中還存有相應(yīng)的登錄信息。
2.4.5 銷毀設(shè)備
用戶注銷,在程序中的定義為:
function NET_DVR_Logout_V30(lUserID:LongInt):BOOL;stdcall;external'HCNetSDK.dll';
IUserID:用戶ID,NET_DVR_Logout_V30的返回值,這時(shí)設(shè)備中已沒有了用戶登錄信息,若要繼續(xù)顯示監(jiān)控視頻,還需要重新注冊(cè)用戶。
2.4.6 釋放資源
清理應(yīng)用程序的資源,在程序中的定義為:
function NET_DVR_Cleanup:BOOL;stdcall;external'HCNetSDK.dll';
2.4.7 主要功能代碼
if NET_DVR_Init()then//初始化設(shè)備
self.Panel1.Caption:='初始化成功'
else
self.Panel1.Caption:='初始化失敗';
lUserID:=NET_DVR_Login_V30(deviceIP,device-Port,userName,passWord,
@struDeviceInfo);//登錄設(shè)備
if lUserID>=0then
self.Panel1.Caption:='登錄成功,正在加載視頻'
else
self.Panel1.Caption:='登錄失敗,錯(cuò)誤代碼:
'+inttostr(NET_DVR_GetLastError());
struPlayInfo.lChannel:=ichannel;
struPlayInfo.lLinkMode:=0;//TCP
struPlayInfo.sMultiCastIP:=NIL;struPlayInfo.hPlay-Wnd:=self.Panel1.Handle;
lRealHandle:=NET_DVR_RealPlay_V30(lUserID,@struPlayInfo,@testRealDataCallBack_V30,pUser,TRUE);
綜上所述,根據(jù)流程圖,在程序中調(diào)用重新定義的函數(shù),微機(jī)室實(shí)時(shí)監(jiān)控視頻就可以顯示在應(yīng)用程序的窗口中。
為了使用戶在同一時(shí)間內(nèi),可以查看更多的監(jiān)控視頻,本系統(tǒng)采用了多屏顯示,以更加直觀的方式展示給用戶,提供一個(gè)良好的用戶界面。當(dāng)用戶點(diǎn)擊最大化按鈕時(shí),可以放大顯示區(qū)域,點(diǎn)擊最小化按鈕時(shí),系統(tǒng)還原成默認(rèn)狀態(tài)。
多屏顯示主要是通過動(dòng)態(tài)生成窗體,并且窗體的大小一致,通過設(shè)置窗體的Left和Top這兩個(gè)屬性來控制窗體顯示的位置,設(shè)置窗體的Parent屬性來控制窗體顯示在哪個(gè)區(qū)域中,效果圖如圖6所示。主要代碼如下。
hbplayfrm.Parent:=ScrollBox1;
hbplayfrm.Width:=trunc(width1);
hbplayfrm.Height:=trunc(height1);
hbplayfrm.Top:=trunc(row1*(height1+5)+5);
hbplayfrm.Left:=trunc(col1*(width1+5)+5);
圖6 系統(tǒng)運(yùn)行效果圖
設(shè)計(jì)的基于校園網(wǎng)絡(luò)的微機(jī)實(shí)驗(yàn)室視頻監(jiān)控系統(tǒng)的特點(diǎn)在于:系統(tǒng)將多個(gè)DVR進(jìn)行了整合,打破了地域的限制,統(tǒng)一管理了所有的攝像機(jī);提供了一個(gè)良好的用戶界面,可以直觀、簡(jiǎn)單、快捷、方便地查詢到目標(biāo)監(jiān)控視頻。
該系統(tǒng)已投入使用,經(jīng)過長(zhǎng)時(shí)間的測(cè)試,讀取局域網(wǎng)監(jiān)控視頻,系統(tǒng)的反應(yīng)時(shí)間小于0.1s,而讀取其它兩個(gè)校區(qū)監(jiān)控視頻的反應(yīng)時(shí)間則小于1.5s;當(dāng)網(wǎng)絡(luò)速度達(dá)到30kb/s時(shí),監(jiān)控視頻就可以流暢顯示,這對(duì)于校園內(nèi)的網(wǎng)絡(luò)來說影響非常小,不會(huì)影響校園網(wǎng)絡(luò)的正常運(yùn)行。當(dāng)然,將多個(gè)品牌的DVR再整合到該系統(tǒng)中,打破局域網(wǎng)的限制應(yīng)用到互聯(lián)網(wǎng)上,將會(huì)有更廣闊的應(yīng)用前景。
[1] 彭小楨,郝福珍,鄢楚平.基于B/S的視頻監(jiān)控系統(tǒng)客戶端的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)工程與應(yīng)用,2007,43(24):208-210.
[2] 呂瀟超,侯增選.基于C/S結(jié)構(gòu)的數(shù)字視頻監(jiān)控軟件系統(tǒng)[J].科學(xué)技術(shù)與工程,2007(9):1894-1898.
[3] 張敬誼,張申生,盧新明.基于C/S結(jié)構(gòu)的面向?qū)ο笤O(shè)備管理系統(tǒng)的研究[J].計(jì)算機(jī)工程,2002,28(1):236-238.
[4] 王云鵬,雷毅,潘翔,等.CAXA電子圖板的二次開發(fā)技術(shù)[J].計(jì)算機(jī)輔助設(shè)計(jì)與圖形學(xué)學(xué)報(bào),2002,14(2):190-191.