郝天鹿
(唐山學院 計算中心,河北 唐山063000)
視頻監控是安全防范系統的重要組成部分,它包括前端攝像機、傳輸線纜、視頻監控平臺。視頻監控系統以直觀性、實時性和生動性等特點而被廣泛應用于多種場合,是一種防范能力較強的綜合系統。近年來,隨著計算機通訊技術、網絡傳輸技術和圖形圖像處理技術的飛速發展,視頻監控技術也有了長足的發展[1]。
但是,由于 DVR(Digital Video Recorder,數字視頻錄像機,也稱硬盤錄像機)視頻輸入端口的限制和受地理位置的局限,并不能集中、統一地管理這些設備,導致使用者要記錄多個DVR的訪問地址,即 URL(Uniform Resource Locator,統一資源定位符),以及相應的賬號和密碼。為了解決上述問題,本文將結合我院3個校區的微機實驗室的視頻監控設備運行情況,介紹如何對這些設備進行統一管理,以提供準確的監控視頻。
微機實驗室視頻監控系統的拓撲結構如圖1所示。該系統采用海康公司8000系列的DVR和DS-2CD6233F-SDI型號的數字攝像機。若要將3個校區的微機實驗室的視頻監控進行統一管理,那么實驗室里的7個DVR就必須通過校園網絡進行連接。

圖1 微機實驗室視頻監控系統拓撲結構
軟件系統體系結構分為兩種情況;一種是C/S(Client/Server,即客戶機/服務器)結構,通過將任務合理分配到Client端和Server端,降低了Server端的資源開銷和Client端與Server端之間的通訊開銷。Client端需要安裝客戶端軟件才可進行管理操作,大部分程序主要在客戶端上,而服務器端主要提供數據管理、數據共享、數據及系統維護和并發控制等,客戶端程序主要完成用戶的具體業務[2]。另外一種是B/S(Browser/Server,即瀏覽器/服務器)結構,用戶界面完全通過系統網頁瀏覽器來實現,應用程序基本上都在服務器端。由于客戶端沒有程序,應用程序的升級和維護都可以在服務器端完成,來彌補客戶端升級、維護不便等方面的不足。由于客戶端使用瀏覽器,使得用戶界面“豐富多彩”,但數據的打印輸出等功能受到了限制。為了解決這個問題,可以單獨設計成ActiveX控件,或者采用第三方插件來彌補這個缺陷。
為了統一管理3個校區的微機實驗室的攝像機,并且記錄這些攝像機的基本信息,提供數據共享,根據海康公司官網提供的二次開發接口,本系統將采用C/S系統結構,它可以降低服務器資源的開銷,使實時視頻數據可以在客戶端計算機上流暢地顯示。
本系統采用Sql Server 2005數據管理系統,它是微軟公司推出的一款數據庫管理平臺,提供了企業級的數據管理功能。Sql Server 2005數據庫引擎為關系型數據和機構型數據提供了安全可靠的存儲功能,可以為龐大、復雜的應用程序提供安全、準確、快速的數據管理功能。
根據軟件系統的需求,一是管理微機室視頻攝像機的信息,二是為了管理登錄用戶的信息,所以只需設計兩個關系型的數據庫表即可,如圖2和圖3所示。

圖2 攝像機信息管理表

圖3 用戶登錄管理表
uniqueidentifier數據類型可存儲一個128位的二進制值數,其作用與GUID(全球唯一標識符)的功能一樣。GUID是全球唯一的二進制數,它是根據網卡和CPU時鐘而隨機生成的一個二進制數,它保證世界上的任何兩臺計算機都不會生成重復的GUID值。GUID主要用于Windows系統中,經常用于應用程序的產品號、注冊表鍵值、接口標識和數據庫等方面。
用戶登錄表中登錄密碼采用MD5的加密方式。MD5是計算機安全領域廣泛使用的一種散列函數,用以提供消息的完整性保護,它將整個文件當作一個大文本信息,通過其不可逆的字符串變換算法,產生了這個唯一的MD5信息摘要。
根據攝像機信息管理表的結構和設計用戶界面,對攝像機的基本信息進行管理,主要包括:設備所在位置,設備名稱,DVR的品牌,DVR的型號,DVR的IP地址或 URL,DVR的端口,登錄DVR的用戶名,登錄DVR的密碼,通道號,是否是URL標識。
若要使用DVR里固有的web程序來查看某一微機實驗室的實時監控視頻,就必須知道它連接在哪個DVR上的哪個通道上,并且還要知道登錄該DVR時的URL、用戶名和密碼。用戶只能訪問連接到該DVR上的攝像機的實時監控視頻,并不能跨越到其它的DVR上來訪問其它的攝像機的監控視頻。由此可見,設計一套對這些攝像機集中統一管理的系統是十分必要的。攝像機管理的主要功能包括:添加攝像機信息,修改攝像機信息,刪除攝像機信息。運行效果如圖4所示。

圖4 攝像機管理運行效果
系統攝像機管理模塊主要是通過Treeview(樹狀結構控件)分層次展示的,在程序加載時,從攝像機信息管理表中讀取信息,動態生成樹狀結構。樹狀結構控件的優點是可以展開和折疊、顯示或隱藏其中的節點和具有分層目錄結構的特點[3]。
實時監控視頻的獲取,主要是通過海康公司提供的DLL(Dynamic Link Library,動態鏈接庫)來實現的。此 DLL是基于VC++進行編寫的,它是應用程序與DVR之間進行連接、通信和互操作的通道[4],在相應的DLL中提供了一系列的有關操作DVR的操作,比如實時預覽、錄像文件回放、下載、鎖定和備份、實時抓屏等,如要實現其相應的功能,只需按照規定的流程調用這些函數。
本系統采用Delphi語言進行開發設計,它不能直接調用海康公司所提供的DLL中的函數,所以還需要在程序中對這些函數重新封裝,以供Delphi程序使用。
獲取實時監控視頻的流程如圖5所示。根據用戶點擊的節點(攝像機),在數據庫中查詢出該攝像機屬于哪個DVR,連接在哪個通道,該DVR登錄時的用戶名、密碼和端口號,然后調用封裝后的函數,最后把實時監控視頻顯示在應用程序的窗體中。

圖5 獲取實時監控視頻流程圖
2.4.1 設備初始化
調用其它函數的前提,在程序中的定義為:
function NET_DVR_Init:BOOL;stdcall;external'HCNetSDK.dll';
stdcall要與原DLL中的函數的定義格式相同,external指明調用的DLL路徑與文件名,本系統主要采用了靜態調用的方式。
2.4.2 用戶注冊設備
向設備注冊用戶,在程序中的定義為:
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:設備信息。如果注冊成功,則返回用戶ID,后續對DVR的操作都需要通過此ID來實現。
2.4.3 啟動預覽監控視頻
獲取實時監控視頻數據流,并顯示在應用程序窗體中。在程序中的定義為:
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:采用何種方式預覽;fbRealData-CallBack_V30:指向回調函數的指針;pUser:用戶數據;bBlocked:請求碼流過程是否阻塞。其中回調函數的定義為:procedure testRealDataCallBack _V30 (lRealHandle:Longint;dwDataType:Longword;pBuffer:LPByte;dw-BufSize:Longword;pUser:Pointer);stdcall。
2.4.4 停止預覽監控視頻
使實時監控視頻停止在應用程序窗口中運行,在程序中的定義為:
function NET _DVR _StopRealPlay(lRealHandle:Longint):Boolean;stdcall;external'HCNetSDK.dll';
lRealHandle:預覽句柄,NET_DVR_StopRealPlay的返回值,它并沒有與設備斷開,在設備中還存有相應的登錄信息。
2.4.5 銷毀設備
用戶注銷,在程序中的定義為:
function NET_DVR_Logout_V30(lUserID:LongInt):BOOL;stdcall;external'HCNetSDK.dll';
IUserID:用戶ID,NET_DVR_Logout_V30的返回值,這時設備中已沒有了用戶登錄信息,若要繼續顯示監控視頻,還需要重新注冊用戶。
2.4.6 釋放資源
清理應用程序的資源,在程序中的定義為:
function NET_DVR_Cleanup:BOOL;stdcall;external'HCNetSDK.dll';
2.4.7 主要功能代碼
if NET_DVR_Init()then//初始化設備
self.Panel1.Caption:='初始化成功'
else
self.Panel1.Caption:='初始化失敗';
lUserID:=NET_DVR_Login_V30(deviceIP,device-Port,userName,passWord,
@struDeviceInfo);//登錄設備
if lUserID>=0then
self.Panel1.Caption:='登錄成功,正在加載視頻'
else
self.Panel1.Caption:='登錄失敗,錯誤代碼:
'+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);
綜上所述,根據流程圖,在程序中調用重新定義的函數,微機室實時監控視頻就可以顯示在應用程序的窗口中。
為了使用戶在同一時間內,可以查看更多的監控視頻,本系統采用了多屏顯示,以更加直觀的方式展示給用戶,提供一個良好的用戶界面。當用戶點擊最大化按鈕時,可以放大顯示區域,點擊最小化按鈕時,系統還原成默認狀態。
多屏顯示主要是通過動態生成窗體,并且窗體的大小一致,通過設置窗體的Left和Top這兩個屬性來控制窗體顯示的位置,設置窗體的Parent屬性來控制窗體顯示在哪個區域中,效果圖如圖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 系統運行效果圖
設計的基于校園網絡的微機實驗室視頻監控系統的特點在于:系統將多個DVR進行了整合,打破了地域的限制,統一管理了所有的攝像機;提供了一個良好的用戶界面,可以直觀、簡單、快捷、方便地查詢到目標監控視頻。
該系統已投入使用,經過長時間的測試,讀取局域網監控視頻,系統的反應時間小于0.1s,而讀取其它兩個校區監控視頻的反應時間則小于1.5s;當網絡速度達到30kb/s時,監控視頻就可以流暢顯示,這對于校園內的網絡來說影響非常小,不會影響校園網絡的正常運行。當然,將多個品牌的DVR再整合到該系統中,打破局域網的限制應用到互聯網上,將會有更廣闊的應用前景。
[1] 彭小楨,郝福珍,鄢楚平.基于B/S的視頻監控系統客戶端的設計與實現[J].計算機工程與應用,2007,43(24):208-210.
[2] 呂瀟超,侯增選.基于C/S結構的數字視頻監控軟件系統[J].科學技術與工程,2007(9):1894-1898.
[3] 張敬誼,張申生,盧新明.基于C/S結構的面向對象設備管理系統的研究[J].計算機工程,2002,28(1):236-238.
[4] 王云鵬,雷毅,潘翔,等.CAXA電子圖板的二次開發技術[J].計算機輔助設計與圖形學學報,2002,14(2):190-191.