。1)前端監(jiān)控現場由監(jiān)控現場主機及一些外圍設備組成。外圍設備包括攝像機、電動鏡頭、云臺、防護罩、監(jiān)視器、多功能解碼器及報警器。監(jiān)控現場主機運行客戶前端軟件,實現視頻、音頻數據的實時采集、壓縮、解壓縮(音頻)(視頻傳輸 單向的,音頻傳輸是雙向的)及打包傳送;對壓縮的視(音)頻數據進行經存儲(也可在分近中心進行)。存儲方式為循環(huán)存儲、定時存儲、手動存儲及運動視頻檢測啟動存儲。接收來自分控中心的控制指令(也可在本地實施),對云臺動作(上、下、左、右及自動)電動鏡頭的三可變(光圈、焦距和聚焦)。
可以通過setsocket函數設置套接字的屬性,如地址重用,緩沖區(qū)是接收還是發(fā)送。
M_localAddr.sin_family = AF_INET;
M_localAddr.sin_port=m_iPort;//本地端口號
M_localAddr..sin _addr.S_un.S_addr=m_uLocalIP;//本地IP地址;
(3)綁定(將新創(chuàng)建的套字節(jié)與本地插口地址進行綁定):
bind(m_socket,(PSOCKADDR)&(m_localAddr),sizeof(m_localAddr);
(4)設置生存時間(即數據包最多允許路由多少個網段):
WSAIoctl(m_socket,SIO_MULTICAST_SCOPE,//設置數據報生存時間;
&iMcastTTL,//生存時間大;
sizeof(iMcastTTL),NULL,0,&cbRet,NULL,NULL);
。5)配置Loopback,以決定組播數據幀是否回送:
int bLoopback=FALSE;
WSAIoct(m_socket,SIO_MULTIPOINT_LOOPBACK,//允許或禁止組播數據幀回送;
&bLoopback,sizeof(bLoopback),NULL,0,&cbRet,NULL,NULL);
(6)收發(fā)數據:
在發(fā)送方(前端、客戶端)響應發(fā)送的消息函數中調用下面函數:
WSASendTo (m_socket,&stWSABuf,&cbRet,0,(struct sockaddr*)&stDestAddr,//發(fā)送的目的地址;
sizeof(struct(sockaddr),NULL,NULL);
在發(fā)送方(前端、客戶端)響應接收消息函數中調用下面函數:
WSARecvFrom(m_socket,&stWSABuf,1,& cbRet,&Flag,(struct sockaddr*)&stSrcAddr,//源地址;
&iLen,NULL,NULL);
。7)將組播套接字設置為異步I/O工作模式,在該套節(jié)字上接收事件為基礎的網絡事件通知:
WSAEventSelect(m_socket,m_hNetworkEvent,//網絡事件句柄;將此套字節(jié)與該事件句柄并聯在一起;
FD_WRITE|FD_READ);//發(fā)生此兩個事件之一,則將m_hNetworkEvent置為有信號狀態(tài);
。8)在工作線程中設置:
WSAWaitForMultipleEvent(3,//等待事件的個數);
p->m_eventArray,//存放事件句柄的數組;
FALSE,WSA_INFINITE,FALSE);
。9)關閉組播套字節(jié):
closesocket(m_socket);
接收端(后端、服務器端)實現步驟:
。1)-(3)與發(fā)送端(客戶端)相同;
(4)調用WSAJLoinLeaf加入組播組:
SOCKET NetSock=WSAJoinLeaf(sock,//必須為組播標志進行創(chuàng)建,否則調用失;
。≒SOCKADDR)&(m_stDestAddr,//組播導址,與發(fā)送方的目的地址相同;
sizeof(m_stDestAddr),UNLL,NULL,NULL,NULL,
JL_BOTH));//允許接收和發(fā)送;
(5)與客戶端(6)相同;(6)與客戶端(7)相同;(7)與客戶端(8)相同;(8)離開組播組;closesocket(NewSock);//NewSock是調用WSAoinLeaf()返回的套節(jié)字。
2.3 在監(jiān)控系統(tǒng)中網絡傳輸模塊的設計
網絡傳輸模塊流程如圖2所示。
發(fā)送端(前端監(jiān)控現場主機、客戶端)監(jiān)控主機運行客戶端程序。在主線程中,啟動視同、音頻兩個線程分別對視頻及音頻進行采集,放入視(音)頻緩沖區(qū);視頻在本地回放;同時,監(jiān)聽分控中心的連接請求,收到連接請求,TCP三次握手,建立TCP連接(信令通道);通過信令通道,向分控心發(fā)送二組組播地址及端口號(對應視頻及音頻,音頻兩個線程;分別在視(音)頻線程中完成;利用Winsock2建立視(音)頻數據通道(UDP)(源碼前已述及);對視(音)頻進行壓縮編碼、組播發(fā)送;音頻線程接收分控中心的音頻數據包,解碼并播放;實現視頻的單向傳輸和音頻的雙向傳輸。
接收端(后端分控中心、服務器端)分控中心主機運行服務器端程序,在主線程中向前端監(jiān)控現場主機發(fā)出連接請求(CALL),三次握手建立TCP連接(信令通道);后端接收到組播地址及端口號后,啟動視(音)頻兩個線程,完成;利用Winsock2建立視(音)頻數據通道(UDP),加入視(音)頻組播組,接收壓縮視(音)頻包,并解碼顯示(播放);其中音頻線程,還要完成音頻數據包解碼顯示(播放);其中音頻線程,還要完成音頻數據包的壓縮、發(fā)送;實現視頻的單向傳輸、音頻的雙向傳輸。
一個后端分控中心可同時監(jiān)控12路前端視頻及音頻信號,在設計服務器端監(jiān)控程序時,采用多線程技術,每建立一對前端監(jiān)控主機與后端分控中心(服務器)的TCP連接,就開兩個接收線程(一個接收視頻線程;一個接收音頻線程),視頻線程接收視頻數據包進行解壓縮及回放;音頻線程接收音頻數據包進行解壓縮及播放。對云臺及攝像機的控制指令通過信令通道傳輸。
本系統(tǒng)運行在Win2000平臺上,用VC++6.0開發(fā)工具開發(fā)。
在遠程數字音視頻監(jiān)控系統(tǒng)的傳輸模塊設計中,根據音頻頻數據傳輸及控制信號傳輸的特點,運用IP組播技術極大地減輕了網絡負擔,避免了資源的浪費,節(jié)省了網絡帶寬;利用TCP/IP協(xié)議設計了信令通道(TCP)和數據通道(UDP);運用Windows多線程機制實現了音頻數據的實時、多點傳輸和控制信號的可靠傳,提高了程序運行的效率。在該系統(tǒng)的基礎上進行改造和擴展,可以應用到遠程教學、遠程醫(yī)療等多種多媒體通信;因此,遠程數字音視頻監(jiān)控系統(tǒng)的設計和實現不僅具有監(jiān)控方面的現實意義,而且對于許多應用都有借鑒和參考價值。
中國通信網(www.c114.net)—電子技術應用