盛平,韓偉
(江蘇大學 江蘇 鎮江 212013)
無線網絡攝像機是wireless ip network camera的縮寫,是基于TCP/IP協議的網絡攝像機,主要組成結構是攝像頭,視頻服務器和無線wifi模塊,使用linux操作系統,支持H264,MPEG4編碼,支持RTSP視頻流傳輸協議,可以通過PC客戶端或者Android/IOS終端進行實時視頻預覽和觀看錄像回放;網絡攝像機實際上是一臺視頻服務器和攝像鏡頭模塊的集成,擁有IP地址和DDNS動態域名,并可通過WIFI網絡傳輸視頻信號。
Android是谷歌公司發布的一種基于Linux的自由及開放源代碼的操作系統,截止2014年第四季度,Android系統市場占有率為83.6%,遠遠高于蘋果的iOS系統、微軟WP系統和黑莓。中國移動已經建成全球最大的4G網絡,擁有4G基站70萬個,用戶數量超過8 000萬,高速的移動網絡促使著移動應用,尤其是對網絡帶寬依賴性非常強的流媒體應用大量增長,基于以上原因本文提出了一種基于無線網絡攝像機的Android客戶端,視頻流暢、穩定、可靠性高、實時性好,具有很好的市場應用前景。
Android是一個分層的環境,構建在 Linux內核的基礎上,它具有豐富的功能。Android應用程序是用 Java編程語言編寫的,它們在一個虛擬機(Dalvik Virtual Machine)中運行[1]。這是一種開源技術。每個 Android應用程序都在 Dalvik VM的一個實例中運行,這個實例駐留在一個由Linux內核管理的進程中。
本次開發對應的 Android 4.4.2(API level 19),相比與其他版本,Android4.4是一次重要的平臺發布版,為用戶和應用程序開發者增加了大量新特性,例如:Android4.4增加了幾個新的API,使應用程序能夠與照片,影片和音樂等媒體交互。Media Effects是一個新的媒體效果框架,為了最佳效果,其直接應用了OpenGL的紋理。
Android Studio是Google開發的一款面向Android開發者的IDE,基于Java語言集成開發環境IntelliJ搭建而成[2]。相比與Eclipse+ADT,Android Studio提供了 IntelliJ IDEA的智能代碼編輯技術,可實現自動代碼完成、重構、代碼分析等功能,Android studio還提供了一款英文名為Memory Monitor的性能分析工具,可顯示應用內存使用情況隨時間發生的變化,從而幫助開發者找出改進性能的辦法。而且,Android studio采用了一種基于自動化構建工具Gradle的系統,支持在IDE之內或之外進行開發編譯,有比較好的靈活性與擴展性。
本客戶端的設計主要由Android UI(user interface)模塊,視頻流接收模塊,視頻播放模塊,APP檢測更新等模塊組成;

圖1 客戶端功能模塊結構圖Fig.1 Structure chart of function module
Android SDK提供了Android平臺上使用Java進行應用開發的 API(Application Programming Interface,應用程序編程接口)和工具,VSTCCAM SDK是威視達康公司提供的供第三方開發者獲得威視達康前端設備視頻流的軟件開發工具包。本文主要使用這兩個SDK完成Android應用的開發。
Android UI模塊的功能有:用戶注冊和登錄;從服務器上獲取用戶賬號下面所有無線網絡攝像機的UID,名稱等,并以listview的格式顯示給用戶;添加和刪除無線網絡攝像機;查看用戶之前截取的圖像和錄制的視頻等。
視頻流接收模塊接收無線網絡攝像機通過云服務器轉發過來的視頻流,然后交給H264解碼模塊進行解碼,最后通過視頻播放模塊將實時監控視頻呈現給用戶。
本客戶端的具體流程:如果用戶已有賬號,則直接登錄,如果沒有賬號,進入注冊頁面進行注冊。用戶登錄后,APP從服務器獲取用戶已經添加的網絡攝像機列表,同時在另一個線程(Thread)中,APP向服務器發送檢測最新版本的請求,如果服務器上存在更新版本,則提示用戶是否升級。用戶通過添加/刪除攝像機模塊可以進行攝像機的添加和刪除動作,結果發送到服務器進行存儲,下次用戶從其他設備登錄可以獲得最新的攝像機列表。用戶選擇需要預覽的攝像機調用VSTCCAM SDK獲取監控實時視頻流,然后通過Surface ViewHolder將監控畫面呈現給用戶。如圖2所示。

圖2 客戶端設計流程圖Fig.2 Flow chart of client design
2.2.1 Android UI設計
系統界面設計包括登錄注冊界面和功能區界面,功能區界面按功能劃分有獲取并顯示攝像機列表,添加或是刪除攝像機,實時視頻預覽,下載最新版本應用4個部分,UI的設計遵循簡潔原則,使交互界面易于用戶理解和使用。應用界面的呈現使用Android SDK[3]中的Fragment控件,當我們的應用程序同時適用于平板電腦和手機時,可以利用fragment實現靈活的布局,改善用戶體驗。當應用運行在手機上時設備列表和實時預覽顯示在不同的頁面,當應用運行在平板上時設備列表和實時預覽這兩個fragment就可以嵌入在同一個activity中,從而更加充分的利用平板的屏幕空間。如圖:

圖3 平板電腦布局Fig.3 Layout in tablet
2.2.2 登陸功能、攝像機列表獲取等功能設計
Android客戶端通過Http請求方式[4],從服務器調用登陸接口,獲取攝像機列表接口,實現登陸并獲取設備列表,查詢報警信息,添加和刪除攝像機等功能。
Android客戶端登陸成功驗證并獲取到攝像機列表后,使用Android SDK提供的ListView組件呈現,它以列表的形勢展現具體內容,比較適合多個攝像機的展示。
2.2.3 獲取攝像機實時視頻流模塊設計
獲取實時視頻流功能的實現主要依靠攝像機廠商提供的SDK。首先將libavi_utils.so,libvstc2_jni.so導入到 Android工程中libs/armeabi/目錄下。根據接口的描述,為了使用該接口,需要新建包”vstc2.nativecaller”。 接著在類 NativeCaller中加載庫libavi_utils.so,libvstc2_jni.so并對本地方法進行聲明。如下:


在 StartActivity類中調用 NativeCaller.PPPPInitial()初始化服務器,之后使用onBind()啟動類名為bridgeservice的服務,使用service之前需要在AndroidManifest.xml配置文件中添加Service,具體添加方法如下:

2.2.4 視頻實時預覽的程序設計
在整個移動安防監控系統中,Android端視頻實時預覽的最后也最重要的一步,由于4G或WIFI等無線網絡的不穩定性與帶寬限制,實時預覽時Android客戶端必須對接收到的RTSP數據流進行高效的解碼。
Android提供了一個專門的視圖控制器Android.widget.VideoView[5],封裝了MediaPlay的創建和初始化過程,Video View可以用在布局管理器中,提供包括縮放和著色在內的很多顯示選項。為了顯示實時預覽視頻,創建VideoView部件并將他設置為用戶界面的內容,然后設置傳入的bitmap并觸發start()方法。VideoView類可以從不同的來源(例如資源文件或內容提供器)讀取圖像,本系統通過從威視達康SDK獲取的視頻流讀取畫面數據。
SurfaceView繼承于視圖(View),可以直接從內存或者DMA等硬件接口取得圖像數據,是個非常重要的繪圖容器,這個視圖里內嵌了一個專門用于繪制的Surface[6]。Surface View類中主要方法如表1所示。

表1 SurfaceView主要方法Tab.1 Method of surfaceview


SurfaceHolder是一個接口,用于管理SurfaceView。里面有兩個常用的內部接口SurfaceHolder.Callback和Surface Holder.Callback2,Callback2 用來實現 Callback。
通過SurfaceHolder來操作畫面對象,當SurfaceView初始 化 后 通 過 調 用 getHolder() 獲 取 SurfaceHolder,把SurfaceHandler傳給另一線程并且用lockCanvas()獲取canvas。 完成繪圖后,調用 unlockCanvasAndPost()釋放 canvas鎖,并顯示視圖。
2.2.5 檢測新版本功能程序設計
Android客戶端進入到MainActivity主進程中,會另開一個線程,向服務發送一個post請求,Android客戶端解析出服務器返回的帶有最新的版本信息的數據后進行對比,如果版本號相同則不進行任何提示,如果本機版本號低于服務器提供的版本號則彈窗窗口提示用戶選擇是否升級。用戶確認升級后,調用Android SDK提供的DownloadManager接口,進行下載。
本測試環境下使用的移動終端采用三星galaxy4,該機型采用的是Android4.4.2系統,網絡環境為中國移動4G網絡。
本次實驗使用的無線網絡攝像機是型號為C7837WIP,生產廠商為深圳威視達康。攝像機具體參數如表2所示。

表2 無線網絡攝像機參數Tab.2 Parameters of wireless ip camera
軟件安裝完成后對核心功能進行測試。輸入賬號密碼驗證成功后進入APP主界面,選擇相應的攝像機進行實時預覽。登陸界面和設備列表界面如圖4所示。點擊需要預覽的攝像機進入實時預覽界面,在4G網絡下,視頻流暢,卡頓和掉幀率較低,穩定性、實時性都比較好。實時監控效果圖如圖5所示。

圖4 登陸界面和設備列表界面Fig.4 UI of log in and camera list
本文以Android為平臺,開發了一款針對無線網絡攝像機的客戶端。通過和服務器之間進行交互,實現用戶登陸,注冊,添加刪除攝像機等功能;利用攝像機廠商提供的網絡SDK獲得視頻流,再結合Android提供的SurfaceView接口實現了實時視頻預覽;程序設計時應充分考慮到使用場景和用戶體驗,將大部分操作移動到后臺執行,同時自動更新客戶端版本,同時用戶界面人性化,操作簡單。整個方案可以應用到許多多媒體應用中,如視頻數據采集,庭院看護,以及遠程交流,實現穩定可靠隨時隨地的實時視頻服務。

圖5 實時監控效圖Fig.5 Picture of video surfaceillance
[1]Shane Conder,Lauren Darcey.Android wireless application development[M].Boston:Addison-Wesley,2010.
[2]Reto Meier.Professional Android 2 application development[M].Indianapolis:Wiley Pub,2009.
[3]James Steele,Nelson.To The Android developer's cookbook:building applications with the Android SDK[M].Boston:Addison-Wesley,2010.
[4]柯元旦,宋銳.Android程序設計[M].北京:北京航空航天大學出版社,2010.
[5]Jordan.Practical Android Projects[M].California-Berkeley,Apress,2011.
[6]丁偉.基于Android平臺的移動流媒體客戶端[D].廣州:中山大學,2010.