【摘 要】近年來,隨著生活節(jié)奏的加快,移動手持設(shè)備的普及,以及人們自我保護(hù)意識的增強(qiáng),使得基于移動手持設(shè)備的視頻監(jiān)控系統(tǒng)需求量大量增加。本文針對目前需求現(xiàn)狀,借助Android系統(tǒng)的用戶界面編程、H.264解碼器、以及Android網(wǎng)絡(luò)與通信等技術(shù)設(shè)計了一款遠(yuǎn)程視頻監(jiān)控系統(tǒng)。用戶可根據(jù)調(diào)時操作階段選擇觀看監(jiān)控視頻,為外出者提供了極大的方便。
【關(guān)鍵詞】wifi;Android;視頻監(jiān)控
1.引言
Android系統(tǒng)采用了開源的Linux操作系統(tǒng),底層使用了訪問硬件速度最快的C語言,應(yīng)用層采用了簡單而強(qiáng)大的Java語言,這使得Android在一眾手機(jī)操作系統(tǒng)中尤為突出。在這個移動互聯(lián)網(wǎng)時代,Android系統(tǒng)更是具有無限的潛能。良好的無線網(wǎng)絡(luò)環(huán)境,配合人們危機(jī)意識增強(qiáng)的現(xiàn)象及Android終端的普及促使產(chǎn)生了利用手機(jī)隨時隨地可進(jìn)行遠(yuǎn)程監(jiān)控房屋財產(chǎn)等的需求。因此,設(shè)計與研究基于wifi網(wǎng)絡(luò)環(huán)境面向Android的遠(yuǎn)程視頻監(jiān)控系統(tǒng),具有明顯的現(xiàn)實性意義。
本文所設(shè)計的平臺是基于Google開發(fā)的開源操作系統(tǒng)Android,并利用java web技術(shù)與wifi網(wǎng)絡(luò)環(huán)境實現(xiàn)的。本系統(tǒng)為經(jīng)常加夜班或者出差的白領(lǐng)等具有相同需求人們提供了方便,可供大家進(jìn)行調(diào)時監(jiān)控,以便更加安心的專注于工作學(xué)習(xí)等。
2.系統(tǒng)分析與設(shè)計
2.1 系統(tǒng)設(shè)計思想
遠(yuǎn)程視頻監(jiān)控系統(tǒng)是基于數(shù)字視頻監(jiān)控系統(tǒng)的遠(yuǎn)程應(yīng)用系統(tǒng),通常有基于PC技術(shù)、基于網(wǎng)絡(luò)攝像機(jī)和基于嵌入式Web服務(wù)器等幾種遠(yuǎn)程監(jiān)控系統(tǒng)的實現(xiàn)方式。
基于PC的多媒體遠(yuǎn)程監(jiān)控系統(tǒng)一般由圖像信號采集、輸出控制、視頻圖像處理、信號傳輸、視頻圖像遠(yuǎn)程接收及遠(yuǎn)程控制等幾部分組成。
“網(wǎng)絡(luò)攝像機(jī)”是一種可以用IP地址識別的、集攝像和圖像壓縮并按網(wǎng)絡(luò)協(xié)議傳輸圖像數(shù)據(jù)的智能攝像機(jī),它可以完成系統(tǒng)功能,而不會帶來額外的維護(hù)需求。在對視頻實時性要求不高的條件下,網(wǎng)絡(luò)攝像機(jī)可以滿足監(jiān)控要求。監(jiān)控中心服務(wù)器、監(jiān)視終端和網(wǎng)絡(luò)攝像機(jī)構(gòu)成一個Intranet網(wǎng),利用網(wǎng)絡(luò)協(xié)議提供的各種管理工具可以有效地管理各個監(jiān)控點的圖像信息。
隨著生活節(jié)奏的加快和手持終端設(shè)備的普及,利用PC實現(xiàn)遠(yuǎn)程視頻監(jiān)控已經(jīng)不能滿足人們的需求了。近年來基于Android平臺的監(jiān)控系統(tǒng)層出不窮,但是大多軟件功能都不完善,偏向?qū)崟r監(jiān)控為主。
然而,對于現(xiàn)在的大多數(shù)人而言,實時監(jiān)控占用了太大的時間和精力,正常情況下,用戶不可能進(jìn)行24小時的監(jiān)控。
本系統(tǒng)將采用調(diào)時監(jiān)控的方法,結(jié)合現(xiàn)在遍布的wifi網(wǎng)絡(luò),利用IP地址可識別的攝像頭,將畫面存入服務(wù)器,用戶根據(jù)自己特有的密令進(jìn)行調(diào)用,從而滿足用戶真正的隨時隨地讀取監(jiān)控視頻。
2.2 系統(tǒng)構(gòu)架
本系統(tǒng)Android客戶端采用系統(tǒng)自帶的SQLite數(shù)據(jù)庫,服務(wù)器端使用開源的MySQL數(shù)據(jù)庫。服務(wù)器端Servlet響應(yīng)HTTPRequest請求,通過Dao接口訪問后臺數(shù)據(jù)庫,并將結(jié)果返回,Servlet獲取結(jié)果后,將視頻流發(fā)送至客戶端。為了使程序代碼簡潔易懂,便于管理和二次開發(fā),系統(tǒng)采用MVC+DAO的設(shè)計模式及分層開發(fā)思想。系統(tǒng)組成如圖1-1所示。
圖1-1 系統(tǒng)整體框架圖
3.客戶端設(shè)計與實現(xiàn)
本系統(tǒng)的客戶端分別由網(wǎng)絡(luò)通訊模塊、視頻解碼與顯示模塊等構(gòu)成。用戶登錄后,通過調(diào)時功能獲取相應(yīng)的視頻段名稱,由網(wǎng)絡(luò)通訊模塊接受來自服務(wù)器的數(shù)據(jù),對數(shù)據(jù)進(jìn)行解析,并將數(shù)據(jù)暫存于緩沖區(qū),之后由視頻解碼模塊負(fù)責(zé)從緩沖區(qū)中讀取數(shù)據(jù)并通過H.264解碼器進(jìn)行解碼。最后通過圖形庫將解碼后圖像繪制到屏幕上實現(xiàn)視頻播放。
3.1 客戶端界面設(shè)計
遠(yuǎn)程視頻監(jiān)控系統(tǒng)的客戶端界面設(shè)計主要由Android的GUI系統(tǒng)實現(xiàn)的,負(fù)責(zé)提供交互接口。GUI系統(tǒng)提供了Java語言框架和C語言框架組成,對下層通過調(diào)用顯示輸入、輸出設(shè)備將軟件與底層硬件聯(lián)系起來,對上層則提供了Java層次的繪圖接口。圖2-1為登錄界面運行結(jié)果。
圖2-1 登錄界面
3.2 顯示模塊
系統(tǒng)運行時首先獲取Android平臺網(wǎng)絡(luò)環(huán)境,若網(wǎng)絡(luò)環(huán)境不是wifi網(wǎng)絡(luò),則以對話框的形式提醒用戶,避免造成流量損失。
獲取Android終端wifi網(wǎng)絡(luò)環(huán)境的代碼如下:
WifiManager wifiManager;
wifiManager=(WifiManager)this.getSystemService(Service.WIFI_SERVICE);
顯示模塊主要是用戶輸入查詢時間和反饋的查詢結(jié)果的顯示。為了提高用戶體驗,本系統(tǒng)利用Android的線程安全特性,運用了多線程和異步等方式。其中客戶端請求并顯示的流程圖如3-1所示。
圖3-1 客戶端請求與顯示流程圖
Android客戶端連接后臺服務(wù)器的關(guān)鍵代碼如下:
HttpPost request = HttpUtil.getHttp-
Post(url);//根據(jù)url獲得HttpPost對象
String result = null;
try{//獲得響應(yīng)對象
HttpResponse response=HttpUtil.getHttpResponse(request);
// 判斷是否請求成功
if(response.getStatusLine().getStatusCode()==200){
result=EntityUtils.toString(res-
ponse.getEntity());//獲得響應(yīng)
return result;
}
}……
3.3 網(wǎng)絡(luò)通訊模塊與視頻解碼模塊實現(xiàn)
當(dāng)系統(tǒng)進(jìn)行網(wǎng)絡(luò)搜索時,需要網(wǎng)絡(luò)連接,因此需要確定當(dāng)前網(wǎng)絡(luò)狀態(tài),程序會使用android.net.ConnectivityManager 類來檢查網(wǎng)絡(luò)連接,Android 系統(tǒng)是運行在Linux 內(nèi)核上的,有自己的一套嚴(yán)格的安全及權(quán)限機(jī)制。由于本模塊要用到網(wǎng)絡(luò)連接和獲取網(wǎng)絡(luò)狀態(tài),這都需要具有相應(yīng)的權(quán)限,所以必須在AndroidMainifest.Xml中聲明所需的權(quán)限,否則無法正常運行,且程序不會報錯,只能通過捕獲異常來發(fā)現(xiàn)這一問題。具體的聲明如下:
允許應(yīng)用程序訪問( 獲?。?網(wǎng)絡(luò)信息。
本系統(tǒng)服務(wù)器終端要接受來自監(jiān)控前端的視頻數(shù)據(jù),采用Socket網(wǎng)絡(luò)通信技術(shù)。在進(jìn)行Socket前必須對其進(jìn)(下轉(zhuǎn)第23頁)(上接第19頁)行初始化,創(chuàng)建Socket服務(wù)線程。當(dāng)監(jiān)聽產(chǎn)生后,主進(jìn)程負(fù)責(zé)不斷循環(huán)地監(jiān)聽接收到的請求并建立新的客戶連接,創(chuàng)建針對此Socket的通信進(jìn)程。其中的主要代碼如下:
public class Socket ConnectionMana-
gement
{
protected static Socket socket=null;
public static boolean establishConnection(String ipAddress,int port)
{
try
{
socket = new Socket(InetAddress.getByName(ipAddress),port);
}catch(UnknownHostException e)
{
//TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e)
{
//TODO Auto-generated catch block
e.printStackTrace();
}
return socket.isConnected();
}
public static boolean isConnected()
{
if (socket != null)
return socket.isConnected();
else
return false;
}
public static Socket getInstance()
{
return socket;
}
}
本系統(tǒng)運用的是H.264解碼技術(shù),它是在MPEG-4技術(shù)的基礎(chǔ)之上建立起來的,其編解碼流程主要包括5個部分:幀間和幀內(nèi)預(yù)測、變換和反變換、量化和反量化、環(huán)路濾波、熵編碼。
技術(shù)實現(xiàn)是在Android操作系統(tǒng)上封裝編譯生成Android底層的動態(tài)鏈接庫,從而實現(xiàn)H.264標(biāo)準(zhǔn)解碼。這里采用X264解碼器,可對GIF格式圖像實時編碼。
4.結(jié)論
根據(jù)移動終端的發(fā)展現(xiàn)狀和移動用戶的需求,本文基于wifi網(wǎng)絡(luò)面向Android開發(fā)了遠(yuǎn)程視頻監(jiān)控平臺,該系統(tǒng)目前仍在測試運行中。通過在模擬器上仿真測試以及在Android手機(jī)終端上的實際檢測,該系統(tǒng)運行效果穩(wěn)定、整體性能較好。該系統(tǒng)能夠為移動用戶提供方便、實用、靈活、快捷的遠(yuǎn)程監(jiān)控,具有非常實用的價值。隨著智能手機(jī)的普及和wifi網(wǎng)絡(luò)的發(fā)展,該系統(tǒng)具有廣泛的應(yīng)用前景。
參考文獻(xiàn):
[1]郭宏志著.Android應(yīng)用開發(fā)詳解[M].北京:電子工業(yè)出版社,2010,6.
[2]吳亞峰,蘇亞光著.Android應(yīng)用案例開發(fā)大全[M].北京:人民郵電出版社,2011,9.
[3]吳亞峰,索伊娜等著.Android核心技術(shù)與實例詳解[M].北京:電子工業(yè)出版社,2010,10.
本文受清華攜手Google助力西部教育項目之大學(xué)生科技創(chuàng)新項目部分資助。
作者簡介:李巧巧,女,現(xiàn)就讀于青海大學(xué)計算機(jī)技術(shù)與應(yīng)用系,研究方向:計算機(jī)技術(shù)與應(yīng)用。