結(jié)合我國實(shí)際情況和未來的發(fā)展趨勢, 開發(fā)出基于Java的視頻監(jiān)控系統(tǒng),實(shí)現(xiàn)對云臺和鏡頭的遠(yuǎn)程控制。系統(tǒng)包括RS-232/RS-485 的轉(zhuǎn)換,解碼器和云臺、鏡頭以及它們與計(jì)算機(jī)串口的硬件連接,通過Pelco-D協(xié)議,采用Java的擴(kuò)展類庫comm.Jar庫進(jìn)行串口通信。
隨著銀行、賓館、交通要道等大型場所和小區(qū)管理的發(fā)展,安全成為至關(guān)重要的問題。在此情形下,高性能的數(shù)碼監(jiān)控系統(tǒng)成為各應(yīng)用部門所關(guān)心的熱點(diǎn)。對于數(shù)碼監(jiān)控系統(tǒng)來說,其主要功能是將監(jiān)控現(xiàn)場的場景轉(zhuǎn)換成視頻信號傳遞給計(jì)算機(jī)進(jìn)行處理。為了加大監(jiān)控范圍,提高控制效率,一方面可以增加攝像機(jī)的數(shù)目,另一方面也可以在監(jiān)控系統(tǒng)中配置具有云臺和鏡頭調(diào)節(jié)功能的高性能攝像機(jī),以便在視頻信號的采集過程中,可以通過服務(wù)器端或客戶端對攝像機(jī)的攝像角度和鏡頭實(shí)施控制。另外,在科技飛速發(fā)展的今天,各種犯罪手段也層出不窮,通過網(wǎng)絡(luò)對監(jiān)控現(xiàn)場的云臺及鏡頭進(jìn)行控制和調(diào)節(jié),并進(jìn)行記錄,對于警方破案尤為重要。
現(xiàn)在的許多視頻監(jiān)控系統(tǒng)是采用VC開發(fā),而基于Java開發(fā)的遠(yuǎn)程監(jiān)控系統(tǒng)并不多見。由于Java的平臺無關(guān)性和天生完整的網(wǎng)絡(luò)支持,Java在網(wǎng)絡(luò)通信中得到廣泛應(yīng)用。本系統(tǒng)開發(fā)出基于Java的視頻監(jiān)控系統(tǒng),通過串行通信及Pelco-D協(xié)議,實(shí)現(xiàn)對云臺與鏡頭的遠(yuǎn)程控制。憑著Java跨平臺的優(yōu)點(diǎn),基于Java開發(fā)的視頻監(jiān)控系統(tǒng)有望移植到手機(jī)平臺。
一、系統(tǒng)設(shè)計(jì)
遠(yuǎn)程視頻監(jiān)控系統(tǒng)結(jié)構(gòu)如圖1所示。
1、RS-232/RS-485轉(zhuǎn)換器
計(jì)算機(jī)的COM口采用的是RS-232 通信方式,本系統(tǒng)所采用的云臺解碼器的通訊接口為RS-485,因此需在計(jì)算機(jī)COM口接一個RS-232/RS-485轉(zhuǎn)換器。RS-232-C(又稱EIA RS-232-C)接口是目前最常用的一種串行通訊接口,是在1970年由美國電子工業(yè)協(xié)會(EIA)聯(lián)合貝爾系統(tǒng)、調(diào)制解調(diào)器廠家及計(jì)算機(jī)終端生產(chǎn)廠家共同制定的用于串行通訊的標(biāo)準(zhǔn)。 RS-485由RS-232發(fā)展而來,彌補(bǔ)了RS-232的不足。 RS-232是點(diǎn)對點(diǎn)的通信,不能實(shí)現(xiàn)多機(jī)之間相互通信,而RS-485就可以實(shí)現(xiàn)多機(jī)通信。另外,RS-232的最大傳輸距離為15m,而R-2485則可達(dá)1.2km。轉(zhuǎn)換器可使計(jì)算機(jī)與云臺解碼器之間構(gòu)成點(diǎn)到點(diǎn)、點(diǎn)到多點(diǎn)的遠(yuǎn)程多機(jī)通信網(wǎng)絡(luò),實(shí)現(xiàn)多機(jī)應(yīng)答通信。
2、解碼器
本系統(tǒng)采用智能解碼器,具有較強(qiáng)抗干擾、低功耗、防死機(jī)和強(qiáng)驅(qū)動力等優(yōu)點(diǎn),能自動識別國內(nèi)大多數(shù)常用協(xié)議,包括特殊協(xié)議,如科力矩陣協(xié)議、EE矩陣協(xié)議和曼碼矩陣協(xié)議等。在云臺解碼器中,通過跳線設(shè)置波特率、特殊協(xié)議及云臺地址,由串口與服務(wù)器端計(jì)算機(jī)進(jìn)行通信。解碼器的主要作用是:通過串口接收服務(wù)器端計(jì)算機(jī)的控制碼,并對此控制碼進(jìn)行地址和命令解析,將解析的命令轉(zhuǎn)換成相應(yīng)的能夠驅(qū)動云臺轉(zhuǎn)動的控制電壓,再傳遞給云臺以控制云臺的轉(zhuǎn)動、攝像機(jī)鏡頭的調(diào)節(jié)及停止操作。
3、云臺和鏡頭
云臺由攝像頭支架和驅(qū)動器組成。驅(qū)動器的作用是通過步進(jìn)電機(jī)來驅(qū)動攝像頭支架的轉(zhuǎn)動,從而帶動攝像頭的轉(zhuǎn)動。 一個高性能攝像機(jī)云臺可以使支架向多個方向(上、下、左、右、左上、左下、右上和右下等)轉(zhuǎn)動,并可以調(diào)節(jié)攝像頭的焦距、光圈、景深等。通過解碼器以及解碼器的控制協(xié)議,可以對云臺和鏡頭進(jìn)行控制。
4、解碼器的控制協(xié)議
(1)Pelco-D協(xié)議
由于所采用的解碼器可識別大多數(shù)常用協(xié)議,本系統(tǒng)選用了Pelco-D作為控制協(xié)議。Pelco-D協(xié)議一般用于矩陣和其他設(shè)備之間的通信。PTZ在安防監(jiān)控中是“pan/t ilt/zoom ”的簡寫, 代表云臺全方位(上、下、左、右)移動及鏡頭變倍和變焦控制。以普通監(jiān)控控制PTZ為例,一般采用多芯連線,控制器以開關(guān)觸點(diǎn)控制云臺、鏡頭各個方向的連接供電,以達(dá)到云臺移動、鏡頭變倍的目的。協(xié)議分為一般PTZ命令及擴(kuò)展命令。一般PTZ命令的格式為一個含7個元素的message數(shù)組,每個元素就是一個字節(jié)(byte),byte1,byte 2,。..,byte7分別對應(yīng)同步字、地址碼、命令字1、命令字2、數(shù)據(jù)1、數(shù)據(jù)2和校驗(yàn)碼。每個字節(jié)不同的位(bit)設(shè)置分別代表不同的控制命令。同步字通常都是FF;地址碼是指與矩陣通信的那臺設(shè)備的邏輯地址,可以在設(shè)備中設(shè)置;命令字1和命令字2的bit0,bit1,。..,bit7的不同設(shè)置分別對應(yīng)鏡頭和云臺的不同操作;數(shù)據(jù)1表示鏡頭左右平移的速度,數(shù)值從$00(停止)到$3F(高速),另外還有一個值是$FF,表示最高速;數(shù)據(jù)2表示鏡頭上下移動的速度,數(shù)值從$00(停止)到$3F(最高速);校驗(yàn)碼是指byte2到byte6這5個數(shù)的和(若超過255,則除以256,然后取余數(shù))。
擴(kuò)展命令是由byte3至byte6這4個字節(jié)分別對應(yīng)協(xié)議中定義的各個控制指令, 例如預(yù)設(shè)、清屏、自動對焦等。
(2)用Java實(shí)現(xiàn)Pelco-D協(xié)議
PelcoD. java對命令字1、命令字2、數(shù)據(jù)1和數(shù)據(jù)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;
以左右轉(zhuǎn)動為例,寫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;
}
}
控制云臺轉(zhuǎn)動,設(shè)定云臺轉(zhuǎn)動速度:
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) ;
}
向串口傳遞數(shù)組:
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中并沒有直接提供串行通信協(xié)議的開發(fā)包,而是以獨(dú)立的jar包形式發(fā)布在java.sun. com網(wǎng)站上,即comm. jar,稱之為Java com-m un ication API,它是J2SE的標(biāo)準(zhǔn)擴(kuò)展。comm.jar分別提供了對常用的RS-232串行端口和IEEE1284并行端口通訊的支持。
下載了comm.jar開發(fā)包后,與之一起的還有2個重要的文件:win32com.dll和javax.comm.Prop-ert iesL comm. jar提供了通訊用的java API,win32com. dll提供了供comm. jar調(diào)用的本地驅(qū)動接口,而javax. comm. p ropert ies是這個驅(qū)動的類配置文件首先將comm. jar復(fù)制到\\lib\\ex t目錄,再將w in32com. dll復(fù)制到JDK 的\\b in目錄下,然后將javax.comm.p ropert ies復(fù)制到\\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、設(shè)定參數(shù)
設(shè)定串口的物理參數(shù):波特率、數(shù)據(jù)長度、數(shù)據(jù)
的停止位長度和數(shù)據(jù)校驗(yàn)類型L根據(jù)Pelco2D協(xié)議設(shè)置波特率為4 800 b it/s,1位起始位和1位停止位,8位數(shù)據(jù)位,無校驗(yàn):
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)
{。 . 。 . 。 . }
三、網(wǎng)絡(luò)控制
1、Socket通信
采用Socket(套接字)通信。Socket是實(shí)現(xiàn)客戶機(jī)與服務(wù)器進(jìn)行通信的一種機(jī)制,它是2臺計(jì)算機(jī)進(jìn)行通信的端口。在Java程序中,可以將Socket類和ServerSocket類分別用于客戶機(jī)和服務(wù)器中,分別創(chuàng)建獨(dú)立的Socket,將2個Socket進(jìn)行連接,實(shí)現(xiàn)連接后,就可以通過Socket進(jìn)行通信。
在本系統(tǒng)中,服務(wù)器端起一線程進(jìn)行監(jiān)聽,一旦收到客戶端對服務(wù)器的指定端口發(fā)出的請求,即根據(jù)客戶端傳來的指令來控制云臺和鏡頭。客戶端通過發(fā)送字符串與服務(wù)器端匹配控制命令。如控制云臺向上,則客戶端:
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 ();
}
}
服務(wù)器端:
if (command. equals (“up ” ) ) {
。 . 。 . 。 .
??實(shí)現(xiàn)向上操作
}
用戶只需在界面中點(diǎn)擊“上”、“下”、“左”、“右”等命令按鈕,系統(tǒng)即向服務(wù)器發(fā)送命令。
2、控制沖突的解決
當(dāng)有多個客戶端同時登陸并控制云臺,或服務(wù)器端和客戶端同時控制云臺,便會發(fā)生控制沖突。解決控制沖突的策略是設(shè)置控制狀態(tài)。客戶端對云臺或鏡頭的控制是通過服務(wù)器端進(jìn)行的。 客戶端若要發(fā)送云臺或鏡頭控制命令,必須首先向服務(wù)器端發(fā)送控制申請命令,服務(wù)器在接收到客戶端控制申請命令后,就會檢查控制狀態(tài)。
(1)當(dāng)沒有控制申請的時候控制狀態(tài)為空,服務(wù)器接受控制申請;當(dāng)云臺和鏡頭正在被控制,控制狀態(tài)為忙,申請控制需要等待,服務(wù)器將通知正在控制的用戶。
(2)正在控制的用戶若在15min內(nèi)無控制操作,服務(wù)器端自動解除控制,若要繼續(xù)控制則要重新申請。
(3)若申請控制的是服務(wù)器端,服務(wù)器會告知正在操作的客戶端將在1min內(nèi)退出。
四、實(shí)現(xiàn)方法
根據(jù)Pelco-D協(xié)議,對云臺和鏡頭的控制,實(shí)質(zhì)是通過串口對解碼器輸入一個包含七位數(shù)據(jù)碼的數(shù)組,解碼器通過所輸入的數(shù)據(jù)碼對云臺及鏡頭進(jìn)行控制建立好協(xié)議的主體,就可以建立一個控制窗口界面,實(shí)現(xiàn)各種控制功能,使用戶在客戶端方便地進(jìn)行監(jiān)控。如要建立云臺上、下、左、右的控制,則在界面中建立4個控制按鈕并分別實(shí)現(xiàn)對應(yīng)的消息。
以下是實(shí)現(xiàn)控制云臺向左轉(zhuǎn)動的程序:
public stat ic vo id main (St ring[ ] args)
{
PelcoD pelcoD= new PelcoD ();
addressin= 0x01;
speeding= 0x20;
//獲得數(shù)據(jù)碼流
byte [ ] messagesend= pelcoD. CameraT ilt (addressin,
PelcoD. Pan. L eft. getV alue () , speedin);
t ry{
//寫入數(shù)據(jù)碼流
out. w rite (messagesend, 0, 7);
}catch ( IO Excep t ion e)
{。 . 。 . 。 . }
catch (N ullPo interExcep t ion e)
{。 . 。 . 。 . }
//關(guān)閉串口
serialPo rt. clo se ();
}
發(fā)送數(shù)據(jù)碼流的例子:
如第1 個云臺, 開啟攝像機(jī): FF, 01, 88, 00, 00,
00, 89;
第2 個云臺, 關(guān)閉攝像機(jī): FF, 02, 08, 00, 00,
00, 09;
第2 個云臺, 以最大速度的一半左轉(zhuǎn): FF, 02,
00, 04, 00, 20, 26;
第2 個云臺, 停止: FF, 02, 00, 00, 00, 00, 02;
第10 個云臺,開啟攝像機(jī),焦距拉遠(yuǎn),左轉(zhuǎn):
FF, 0A , 88, 90, 00, 40, 62。
五、結(jié)束語
本系統(tǒng)利用Java串口通信,實(shí)現(xiàn)了對云臺和鏡頭的控制。軟件具有工作于多種操作系統(tǒng)的性能,用戶可隨時隨地通過IP網(wǎng)控制監(jiān)控現(xiàn)場,使監(jiān)控網(wǎng)絡(luò)的互通成為現(xiàn)實(shí),為現(xiàn)代視頻監(jiān)控提供一種可行方案。
-
轉(zhuǎn)換器
+關(guān)注
關(guān)注
27文章
8717瀏覽量
147382 -
視頻監(jiān)控
+關(guān)注
關(guān)注
17文章
1711瀏覽量
65040 -
JAVA
+關(guān)注
關(guān)注
19文章
2970瀏覽量
104838
發(fā)布評論請先 登錄
相關(guān)推薦
評論