結合我國實際情況和未來的發展趨勢, 開發出基于Java的視頻監控系統,實現對云臺和鏡頭的遠程控制。系統包括RS-232/RS-485 的轉換,解碼器和云臺、鏡頭以及它們與計算機串口的硬件連接,通過Pelco-D協議,采用Java的擴展類庫comm.Jar庫進行串口通信。 隨著銀行、賓館、交通要道等大型場所和小區管理的發展,安全成為至關重要的問題。在此情形下,高性能的數碼監控系統成為各應用部門所關心的熱點。對于數碼監控系統來說,其主要功能是將監控現場的場景轉換成視頻信號傳遞給計算機進行處理。為了加大監控范圍,提高控制效率,一方面可以增加攝像機的數目,另一方面也可以在監控系統中配置具有云臺和鏡頭調節功能的高性能攝像機,以便在視頻信號的采集過程中,可以通過服務器端或客戶端對攝像機的攝像角度和鏡頭實施控制。另外,在科技飛速發展的今天,各種犯罪手段也層出不窮,通過網絡對監控現場的云臺及鏡頭進行控制和調節,并進行記錄,對于警方破案尤為重要。 現在的許多視頻監控系統是采用VC開發,而基于Java開發的遠程監控系統并不多見。由于Java的平臺無關性和天生完整的網絡支持,Java在網絡通信中得到廣泛應用。本系統開發出基于Java的視頻監控系統,通過串行通信及Pelco-D協議,實現對云臺與鏡頭的遠程控制。憑著Java跨平臺的優點,基于Java開發的視頻監控系統有望移植到手機平臺。 一、系統設計 遠程視頻監控系統結構如圖1所示。 1、RS-232/RS-485轉換器 計算機的COM口采用的是RS-232 通信方式,本系統所采用的云臺解碼器的通訊接口為RS-485,因此需在計算機COM口接一個RS-232/RS-485轉換器。RS-232-C(又稱EIA RS-232-C)接口是目前最常用的一種串行通訊接口,是在1970年由美國電子工業協會(EIA)聯合貝爾系統、調制解調器廠家及計算機終端生產廠家共同制定的用于串行通訊的標準。 RS-485由RS-232發展而來,彌補了RS-232的不足。 RS-232是點對點的通信,不能實現多機之間相互通信,而RS-485就可以實現多機通信。另外,RS-232的最大傳輸距離為15m,而R-2485則可達1.2km。轉換器可使計算機與云臺解碼器之間構成點到點、點到多點的遠程多機通信網絡,實現多機應答通信。 2、解碼器 本系統采用智能解碼器,具有較強抗干擾、低功耗、防死機和強驅動力等優點,能自動識別國內大多數常用協議,包括特殊協議,如科力矩陣協議、EE矩陣協議和曼碼矩陣協議等。在云臺解碼器中,通過跳線設置波特率、特殊協議及云臺地址,由串口與服務器端計算機進行通信。解碼器的主要作用是:通過串口接收服務器端計算機的控制碼,并對此控制碼進行地址和命令解析,將解析的命令轉換成相應的能夠驅動云臺轉動的控制電壓,再傳遞給云臺以控制云臺的轉動、攝像機鏡頭的調節及停止操作。 3、云臺和鏡頭 云臺由攝像頭支架和驅動器組成。驅動器的作用是通過步進電機來驅動攝像頭支架的轉動,從而帶動攝像頭的轉動。 一個高性能攝像機云臺可以使支架向多個方向(上、下、左、右、左上、左下、右上和右下等)轉動,并可以調節攝像頭的焦距、光圈、景深等。通過解碼器以及解碼器的控制協議,可以對云臺和鏡頭進行控制。 4、解碼器的控制協議 (1)Pelco-D協議 由于所采用的解碼器可識別大多數常用協議,本系統選用了Pelco-D作為控制協議。Pelco-D協議一般用于矩陣和其他設備之間的通信。PTZ在安防監控中是"pan/t ilt/zoom "的簡寫, 代表云臺全方位(上、下、左、右)移動及鏡頭變倍和變焦控制。以普通監控控制PTZ為例,一般采用多芯連線,控制器以開關觸點控制云臺、鏡頭各個方向的連接供電,以達到云臺移動、鏡頭變倍的目的。協議分為一般PTZ命令及擴展命令。一般PTZ命令的格式為一個含7個元素的message數組,每個元素就是一個字節(byte),byte1,byte 2,...,byte7分別對應同步字、地址碼、命令字1、命令字2、數據1、數據2和校驗碼。每個字節不同的位(bit)設置分別代表不同的控制命令。同步字通常都是FF;地址碼是指與矩陣通信的那臺設備的邏輯地址,可以在設備中設置;命令字1和命令字2的bit0,bit1,...,bit7的不同設置分別對應鏡頭和云臺的不同操作;數據1表示鏡頭左右平移的速度,數值從$00(停止)到$3F(高速),另外還有一個值是$FF,表示最高速;數據2表示鏡頭上下移動的速度,數值從$00(停止)到$3F(最高速);校驗碼是指byte2到byte6這5個數的和(若超過255,則除以256,然后取余數)。 擴展命令是由byte3至byte6這4個字節分別對應協議中定義的各個控制指令, 例如預設、清屏、自動對焦等。 (2)用Java實現Pelco-D協議 PelcoD. java對命令字1、命令字2、數據1和數據2的定義: //command1 p rivate final byte FocusN ear = 0x01; p rivate final byte IrisOpen = 0x02; p rivate final byte IrisClo se = 0x04; p rivate final byte CameraO nO ff = 0x08; p rivate final byte A utoM anualScan = 0x10; p rivate final sho rt Sense = 0x80; //command2 p rivate final stat ic byte PanR igh t = 0x02; p rivate final stat ic byte PanL eft = 0x04; p rivate final stat ic byte T iltU p = 0x08; p rivate final stat ic byte T iltDow n = 0x10; p rivate final byte ZoomTele = 0x20; p rivate final byte ZoomW ide = 0x40; p rivate final byte FocusFar = 0x80; //data1 p rivate final byte PanSpeedM in = 0x00; p rivate final byte PanSpeedM ax = 0xFF; //data2 p rivate final byte T iltSpeedM in = 0x00; p rivate final byte T iltSpeedM ax = 0x14; 以左右轉動為例,寫Pan 的類: public enum Pan{ R igh t ( (byte) 0x02), L eft ( (byte) 0x04); p rivate byte value; p rivate Pan (byte intV alue) { value= intV alue; } public byte getV alue () { return value; } } 控制云臺轉動,設定云臺轉動速度: public byte [ ] CameraPan (byte deviceA ddress, byte act ion, byte speed) { if (speed< = PanSpeedM in) Speed = PanSpeedM in; if (speed< PanSpeedM ax) speed = PanSpeedM ax; return M essage. GetM essage ( deviceA ddress, ( byte ) 0x00, act ion, (byte) speed, (byte) 0x00) ; } 向串口傳遞數組: public stat ic byte [ ] GetM essage (byte address, byte command1, byte command2, byte data1, byte data2) { A ddress = address; Data1= data1; Data2= data2; Command1= command1; Command2= command2; CheckSum= (byte) (STX&A ddress&Command1& Command2&Data1&Data2); return new byte [ ] {STX, A ddress, Command1, Com2 mand2, Data1,Data2, CheckSum}; 二、Java串口編程 Sun的J2SE中并沒有直接提供串行通信協議的開發包,而是以獨立的jar包形式發布在java.sun. com網站上,即comm. jar,稱之為Java com-m un ication API,它是J2SE的標準擴展。comm.jar分別提供了對常用的RS-232串行端口和IEEE1284并行端口通訊的支持。 下載了comm.jar開發包后,與之一起的還有2個重要的文件:win32com.dll和javax.comm.Prop-ert iesL comm. jar提供了通訊用的java API,win32com. dll提供了供comm. jar調用的本地驅動接口,而javax. comm. p ropert ies是這個驅動的類配置文件首先將comm. jar復制到\\lib\\ex t目錄,再將w in32com. dll復制到JDK 的\\b in目錄下,然后將javax.comm.p ropert ies復制到\\lib目錄。 1、打開串口 使用串口前必先打開串口: try{ portId = CommPort Ident ifier. getPort Identifier("COM 1" ); serialPort=(SerialPort)port Id. open ("My app", 60); }catch (Port InU seExcep t ion e) {. . . . . . } catch (NoSuchPo rtExcep t ion e) {. . . . . . } 2、設定參數 設定串口的物理參數:波特率、數據長度、數據 的停止位長度和數據校驗類型L根據Pelco2D協議設置波特率為4 800 b it/s,1位起始位和1位停止位,8位數據位,無校驗: t ry{ serialPo rt. setSerialPo rtParam s(2400, SerialPo rt. DA TAB ITS- 8, SerialPo rt. STO PB ITS- 1, SerialPo rt. PAR ITY- NON E); }catch (U nsuppo rtedCommOperat ionExcep t ion e) {. . . . . . } 三、網絡控制 1、Socket通信 采用Socket(套接字)通信。Socket是實現客戶機與服務器進行通信的一種機制,它是2臺計算機進行通信的端口。在Java程序中,可以將Socket類和ServerSocket類分別用于客戶機和服務器中,分別創建獨立的Socket,將2個Socket進行連接,實現連接后,就可以通過Socket進行通信。 在本系統中,服務器端起一線程進行監聽,一旦收到客戶端對服務器的指定端口發出的請求,即根據客戶端傳來的指令來控制云臺和鏡頭?蛻舳送ㄟ^發送字符串與服務器端匹配控制命令。如控制云臺向上,則客戶端: public vo id up () { t ry{ Socket mysocket= new Socket ( InetA ddress. getLocal2 Ho st () , 5678); mysocket. getO utputSt ream ( ). w rite ( " up ". getBytes () ); mysocket. clo se (); }catch ( IO Excep t ion e) { e. p rintStackT race (); } } 服務器端: if (command. equals ("up " ) ) { . . . . . . ??實現向上操作 } 用戶只需在界面中點擊"上"、"下"、"左"、"右"等命令按鈕,系統即向服務器發送命令。 2、控制沖突的解決 當有多個客戶端同時登陸并控制云臺,或服務器端和客戶端同時控制云臺,便會發生控制沖突。解決控制沖突的策略是設置控制狀態?蛻舳藢υ婆_或鏡頭的控制是通過服務器端進行的。 客戶端若要發送云臺或鏡頭控制命令,必須首先向服務器端發送控制申請命令,服務器在接收到客戶端控制申請命令后,就會檢查控制狀態。 (1)當沒有控制申請的時候控制狀態為空,服務器接受控制申請;當云臺和鏡頭正在被控制,控制狀態為忙,申請控制需要等待,服務器將通知正在控制的用戶。 (2)正在控制的用戶若在15min內無控制操作,服務器端自動解除控制,若要繼續控制則要重新申請。 (3)若申請控制的是服務器端,服務器會告知正在操作的客戶端將在1min內退出。 四、實現方法 根據Pelco-D協議,對云臺和鏡頭的控制,實質是通過串口對解碼器輸入一個包含七位數據碼的數組,解碼器通過所輸入的數據碼對云臺及鏡頭進行控制建立好協議的主體,就可以建立一個控制窗口界面,實現各種控制功能,使用戶在客戶端方便地進行監控。如要建立云臺上、下、左、右的控制,則在界面中建立4個控制按鈕并分別實現對應的消息。 以下是實現控制云臺向左轉動的程序: public stat ic vo id main (St ring[ ] args) { PelcoD pelcoD= new PelcoD (); addressin= 0x01; speeding= 0x20; //獲得數據碼流 byte [ ] messagesend= pelcoD. CameraT ilt (addressin, PelcoD. Pan. L eft. getV alue () , speedin); t ry{ //寫入數據碼流 out. w rite (messagesend, 0, 7); }catch ( IO Excep t ion e) {. . . . . . } catch (N ullPo interExcep t ion e) {. . . . . . } //關閉串口 serialPo rt. clo se (); } 發送數據碼流的例子: 如第1 個云臺, 開啟攝像機: FF, 01, 88, 00, 00, 00, 89; 第2 個云臺, 關閉攝像機: FF, 02, 08, 00, 00, 00, 09; 第2 個云臺, 以最大速度的一半左轉: FF, 02, 00, 04, 00, 20, 26; 第2 個云臺, 停止: FF, 02, 00, 00, 00, 00, 02; 第10 個云臺,開啟攝像機,焦距拉遠,左轉: FF, 0A , 88, 90, 00, 40, 62。 五、結束語 本系統利用Java串口通信,實現了對云臺和鏡頭的控制。軟件具有工作于多種操作系統的性能,用戶可隨時隨地通過IP網控制監控現場,使監控網絡的互通成為現實,為現代視頻監控提供一種可行方案。 |