陳威兵,張剛林,馮 璐
(長沙學院 電子與通信工程系,湖南 長沙410003)
責任編輯:任健男
由于新一代移動通信網絡數(shù)據傳輸能力的增強和智能手機處理芯片運算能力的提高,使用3G智能手機作為視頻監(jiān)控客戶端成為可能[1],這極大地擴展了視頻監(jiān)控的應用環(huán)境和使用方式,也滿足了個人隨時隨地實現(xiàn)視頻監(jiān)控的需求。這種監(jiān)控系統(tǒng)應用范圍很廣,比如實施家居安全、未成年或老弱家庭成員的監(jiān)護、車輛監(jiān)控;特定責任人員對所負責的工作或實驗場所的監(jiān)控;小型企業(yè)、連鎖店、商鋪的監(jiān)控等。
目前,移動視頻監(jiān)控系統(tǒng)有很多[2-3]。它們實現(xiàn)了手機監(jiān)控的愿望,但也存在諸多不足,主要體現(xiàn)在以下幾方面:1)傳輸?shù)囊曨l標準普遍采用國際主流的MPEG-4、H.264等,都不是針對安防領域的,對全天候、各種復雜拍攝環(huán)境下的現(xiàn)場還原性不佳,在壓縮編碼效率和視頻質量之間的平衡不理想,缺少對監(jiān)控專用信息的支持;2)只能實現(xiàn)一路視頻監(jiān)控,減少了監(jiān)控應用模式。本文開發(fā)的移動視頻監(jiān)控系統(tǒng)采用我國具有自主知識產權的專為安防產品設計的數(shù)字音視頻壓縮標準SVAC,手機監(jiān)控終端采用多畫面播放,可實現(xiàn)多路監(jiān)控。符合本文要求的視頻監(jiān)控前端和監(jiān)控網絡設備均已有成熟產品,所以本文著重介紹自主開發(fā)的手機監(jiān)控客戶端軟件的設計、監(jiān)控視頻的傳輸模式和傳輸協(xié)議。
以智能手機為監(jiān)控客戶端的視頻監(jiān)控系統(tǒng)通??梢栽O計成如圖1所示的結構。其中,監(jiān)控前端可采用無線定點監(jiān)控、無線移動監(jiān)控、有線定點監(jiān)控3種監(jiān)控模式。嵌入式視頻服務器配置在監(jiān)控前端內,它具備多路視頻采集、壓縮編碼、視頻存儲、多制式網絡通信功能;內置Web Server,支持多用戶登錄,支持多種平臺接入。為了加強視頻管理、轉發(fā)和存儲能力,根據需要,可將嵌入式視頻服務器級聯(lián)到網絡中心服務器和網絡專用存儲服務器中。手機監(jiān)控終端通過3G、WiFi等無線網絡登錄中心服務器獲得轉發(fā)視頻或直接登錄視頻服務器獲得實時監(jiān)控視頻。
圖1 手機視頻監(jiān)控系統(tǒng)總體框架
3G智能手機視頻監(jiān)控是一種軟件監(jiān)控,完成的功能比較多,采用瀏覽器軟件并不能完成,需要開發(fā)專門的基于手機操作系統(tǒng)的客戶端監(jiān)控軟件。本文設計的手機監(jiān)控客戶端軟件的總體框架如圖2所示,采用C/S架構。它由網絡通信模塊、視頻緩存模塊、視頻解碼模塊、視頻顯示模塊、視頻存儲模塊、輪切定時模塊和主控模塊構成。其中,網絡通信模塊負責與服務器的溝通(包括用戶登錄、數(shù)據傳輸協(xié)議約定等),并對接收的數(shù)據進行拆分、解析,將視頻數(shù)據送入相應的視頻緩沖區(qū),將從監(jiān)控前端傳來的告警信息傳給顯示模塊呈現(xiàn);視頻解碼器從壓縮視頻緩沖區(qū)讀取壓縮視頻數(shù)據并進行相應的解碼后經解碼視頻緩沖區(qū)傳送給顯示模塊;輪切定時器用于多路監(jiān)控畫面之間的輪切控制;顯示模塊在主控模塊發(fā)出的界面控制命令下,利用OpenGL圖形庫將解碼后圖像繪制到屏幕上實現(xiàn)視頻播放,并進行屏幕刷新;主控模塊也可對用戶操作進行識別,并進行視頻變換、視頻存儲等處理,同時對用戶發(fā)出的針對視頻前端的命令通過網絡通信模塊發(fā)送給視頻前端,如云臺控制、圖片抓拍等。
圖2 手機監(jiān)控客戶端總體框架
目前,支持智能手機的操作系統(tǒng)有很多,主流的有Google公司的Android和蘋果公司的iOS等。本文選擇在Android系統(tǒng)上開發(fā)手機監(jiān)控客戶端軟件主要是考慮其開放性,開發(fā)者在為其開發(fā)應用程序時將擁有更大的自由度[4]。其應用程序開發(fā)時采用Java語言編寫,但可以通過JNI機制來調用C/C++庫,這樣可以將運行在PC平臺的成熟視頻解碼軟件、多畫面顯示軟件、視頻處理軟件移植到Android系統(tǒng)中,從而降低開發(fā)難度。搭建Android應用程序開發(fā)平臺需要安裝的軟件比較多,包括JDK,Eclipse,Android SDK,Android ADT,Android NDK,Cygwin等。代碼開發(fā)完成后,可以在Eclipse中啟動Android模擬器AVD進行程序調試和界面效果演示。最后的Java代碼通過編譯后,可以用ADT將其打包成APK文件,用于在手機終端中安裝或直接調用。
視頻壓縮編碼技術是視頻監(jiān)控系統(tǒng)實施網絡化的關鍵[5]。本文采用的視頻標準SVAC(Surveillance Video and Audio Coding,安全防范監(jiān)控數(shù)字視音頻編解碼)之所以特別適合安防環(huán)境,主要因為其有以下技術優(yōu)勢:1)支持高精度視頻數(shù)據;2)支持感興趣區(qū)域(ROI)變質量編碼;3)支持可伸縮視頻編碼(SVC);4)支持高性能熵編碼;5)支持監(jiān)控專用信息。
Android本身不支持SAVC視頻解碼,且還沒有廠家發(fā)布開源的SVAC解碼庫。為提高SVAC視頻解碼軟件的開發(fā)效率,筆者所在實驗室首先依據SVAC編解碼技術要求(GB/T 25724—2010)在PC平臺上以C/C++自主開發(fā)SVAC解碼參考代碼。其采用的通用解碼流程如圖3所示,視頻解碼器接收編碼比特流后,對條帶中的宏塊,經熵解碼、逆掃描、反量化及反變換產生一組殘差數(shù)據D',并根據碼流中信息通過幀內預測或幀間預測得到預測數(shù)據PRED,預測數(shù)據與殘差數(shù)據通過計算生成重建圖像F',重建圖像經去塊濾波產生最終的解碼圖像。
圖3 SVAC視頻解碼流程圖
在接收編碼比特流之前,首先要對接收的NAL(網絡提取層)單元進行解碼,即從NAL單元中提取RBSP(原始字節(jié)序列負荷)語法結構,如果encryption_idc為1還需進行解密處理,得到未加密的RBSP語法結構。在此基礎上,再依據解碼出的nal_unit_type值選取圖3通用流程的全部或部分過程進行解碼,如nal_unit_type=1對應非IDR圖像的編碼條帶,nal_unit_type=4對應IDR圖像的SVC增強層編碼條帶。除了常規(guī)視頻條帶的解碼外,要特別注意SVAC支持的ROI區(qū)域解碼和SVC視頻條帶解碼。當roi_flag=1時說明打開了ROI模式,此時需要由ROI的top_left和bottom_right確定ROI矩形區(qū)域位置,并依據不同的編碼約定參數(shù)對ROI區(qū)域和背景區(qū)域進行解碼,還需要對ROI區(qū)域的邊界進行漸變處理,以消除邊界效應。nal_unit_type為3和4時對應都是增強層條帶,增強層解碼圖像幀的寬度和高度均為基本層解碼圖像幀的2倍,此時要用增強層圖像的寬度和高度參數(shù)去代替基本層的對應參數(shù)。
在完成SVAC參考代碼優(yōu)化后,就可以利用NDK將其移植并生成對應的動態(tài)鏈接庫(.so文件);動態(tài)庫形成后,拷貝到Java文件項目的libs/armeabi目錄下供Java函數(shù)調用,從而在Android環(huán)境中實現(xiàn)SAVC視頻解碼。
多畫面手機視頻監(jiān)控是具有實際意義的,通常用戶需要同時對多個目標進行視頻監(jiān)控,或者調用同一場景中的多個攝像頭從不同角度觀察同一目標。不過受制于移動網絡傳輸能力、手機CPU的處理速度以及手機屏幕的分辨率,畫面數(shù)也受限(本文設定4個)。
要實現(xiàn)分時多畫面視頻播放,首先使用XML布局文件定義多畫面播放器界面,由<LinearLayout>創(chuàng)建一個視圖組,本文LinearLayout視圖組中包括4個VideoView對象(對應4個播放區(qū))和播放、停止、放大、縮小等12個Button對象(對應12個操作按鈕)。VideoView類需要重寫,它運行時調用SVACDecoder()函數(shù)實現(xiàn)視頻解碼,調用重寫的onDraw()方法進行視圖顯示,為確保視頻播放更為流暢,本文視頻緩沖采用壓縮視頻緩沖和解碼視頻緩沖雙緩沖區(qū)機制。為保障程序運行速度,多畫面中只有一個活動窗口可以播放動態(tài)視頻和聲音,并接受用戶指令,非活動窗口只簡單顯示最后一幀靜態(tài)解碼圖像。多畫面的活動窗口可采用定時器控制輪切,也接受用戶人工控制。輪切定時器控制使用Timer類來發(fā)起fixed-delay,使用TimerTask類處理delay到了之后的視頻輪切任務,使用TimerHand類接收用戶人工控制消息后的處理任務。
視頻數(shù)據的接收、解析、解碼和播放本身就一個復雜過程,再加上要進行多畫面監(jiān)控處理就更復雜了,極易出現(xiàn)阻塞并影響整個程序的運行[6]。因此,本文的監(jiān)控客戶端程序采用多線程并行處理,以提高程序運行速度。程序運行時,主線程完成主控模塊功能,即響應用戶操作并做出對應的視頻處理、顯示界面控制。創(chuàng)建9個子線程:1個定時輪切子線程、4個數(shù)據接收子線程和4個視頻解碼子線程。子線程數(shù)目看似比較多,但實際運行時,只有一路活動監(jiān)控視頻的數(shù)據接收和視頻解碼子線程被執(zhí)行,其他路監(jiān)控視頻的子線程處于掛起狀態(tài),不占用CPU資源。Java實現(xiàn)多線程有繼承Thread類和實現(xiàn)Runnable接口兩種方法,由于Java禁止一個類多重繼承,但允許一個類實現(xiàn)多個接口,而本文程序子線程數(shù)目較多,故只能采用第二種方式,即通過實現(xiàn)java.lang.Runnable接口來完成。另外,對于多線程需要利用synchronized關鍵字和wait()、notify()等方法實現(xiàn)線程間的同步,以避免各線程訪問共享資源時發(fā)生沖突。
3.3.1 網絡通信協(xié)議
手機監(jiān)控客戶端與服務器之間的通信內容包括信令和數(shù)據,數(shù)據主要是視頻流(監(jiān)控信息和安全信息也包含在其中)和交互數(shù)據。本文使用HTTP協(xié)議實現(xiàn)客戶端與服務器之間鏈接與交互(視頻數(shù)據傳輸除外),方法是采用Android提供的3種HTTP接口之一的Apache接口(org.apache.http),使用其HttpClient類來實現(xiàn),交互需調用的函數(shù)有DafaultHttpClient(),HttpGet(),HttpPost()和HttpResponse()等。對于視頻數(shù)據傳輸部分,媒體會話采用RTSP實時流傳輸協(xié)議,視頻數(shù)據使用RTP/RTCP機制完成傳輸控制。其中,RTP實時傳輸協(xié)議是一個針對IP網絡數(shù)據流的傳輸協(xié)議,雖然提供的是一個不可靠連接,但保障了數(shù)據的實時性。RTCP實時傳輸控制協(xié)議負責傳輸質量管理,提供流量控制和擁塞控制服務,它很好地保障了視頻數(shù)據傳輸?shù)木W絡自適應性[7]。
3.3.2 主要交互流程
客戶端與服務器之間的主要交互流程有:
1)用戶登錄,第一次使用監(jiān)控客戶端程序,都需要登錄服務器并在其管理程序中登記、注冊,進行驗證授權。
2)實時流請求,主要為實時監(jiān)控服務,包括媒體鏈路的創(chuàng)建和撤消。
3)錄像回放,主要為客戶端調閱存儲在服務器上的監(jiān)控歷史視頻服務,同樣包括媒體鏈路的創(chuàng)建和撤消。
4)用戶操作命令發(fā)送,數(shù)據在主控模塊中獲得。如ROI區(qū)域參數(shù)的獲得需利用onTouchListener觸屏事件接口:在Android平臺上重寫View類提供的onTouchEvent(MotioEvent event)方法,MotioEvent分別有按下、抬起、移動和取消4個動作,而event.getX()和event.getY()可記錄觸點坐標值;當使用按下、移動、抬起3個動作時,記錄按下、抬起的坐標就可以確定ROI的矩形區(qū)域。
為了對本文設計的視頻監(jiān)控手機客戶端軟件進行測試驗證,搭建了移動視頻監(jiān)控原型系統(tǒng)作為試驗條件:監(jiān)控前端采用了中星電子有限公司的高清網絡攝像機VSIPC6091HC20S,它支持SVAC視頻壓縮標準,嵌入了視頻服務器,分辨率最高25 f/s@1 080p和25 f/s@720p可選,支持編碼參數(shù)動態(tài)配置,720p時支持圖像基本層和增強層設置,至多支持2個ROI區(qū);智能手機選用三星I9220,它的操作系統(tǒng)是Android 2.3,CPU頻率為1 433 MHz,RAM容量1 Gbyte,主屏尺寸為5.3 in(1 in=2.54 cm);無線網絡選用了WCDMA和WiFi。
在以上試驗條件下得到的視頻監(jiān)控效果如圖4所示。支持單畫面監(jiān)控和4畫面監(jiān)控,畫面切換時長在5 s左右。網絡環(huán)境良好時,單屏可播放720p高清視頻,幀率可至25 f/s,多屏時可播放QIF視頻,幀率可至15 f/s。對于活動窗口視頻,可通過屏幕觸點縮放視頻,也可給監(jiān)控前端設立ROI區(qū)。由于SVAC視頻編碼可選用白天/夜晚兩種編碼模式,因此全天24 h的監(jiān)控視頻效果并無明顯差異。
圖4 手機監(jiān)控客戶端視頻效果圖
本文設計的手機視頻監(jiān)控客戶端達到了使用移動終端進行實時監(jiān)控的目標,視頻較為流暢。由于采用了SVAC視頻標準,可以更好地滿足安防需求;使用多畫面輪切的方法實現(xiàn)了多路視頻監(jiān)控。但由于視頻處理較為復雜,且需處理多畫面流程,還只能選用中高檔手機作為監(jiān)控平臺,網絡傳輸環(huán)境要求也較高,下一步希望有所改進。另外,由于移動監(jiān)控一般為非專業(yè)值守人員,需要在監(jiān)控前端增加智能視頻分析能力(如圖像質量診斷、越界等行為分析、人臉抓拍、識別、人數(shù)統(tǒng)計等)[8],并將智能分析數(shù)據作為SVAC比特流中的擴展數(shù)據傳輸給監(jiān)控終端。
[1]鄧濤,曹寧.基于3G網絡的手機視頻監(jiān)控與遠程控制系統(tǒng)及其應用[J].電信科學,2009,25(10):101-104.
[2]NAKASHIMA Y,BABAGUCHI N,F(xiàn)AN J P.Intended human object detection for automatically protecting privacy in mobile video surveillance[J].Multimedia Systems,2012,18(2):157-173.
[3]吳建華,徐浩,丁月華.移動網絡手機實時監(jiān)控系統(tǒng)的設計與實現(xiàn)[J].計算機工程與設計,2010,31(10):2196-2198.
[4]曹曉芳,王超,李杰.一種基于Android智能手機的遠程視頻監(jiān)控的設計[J].電子器件,2011,34(6):709-712.
[5]陳威兵,張剛林,劉光燦.AVS-S在移動視頻監(jiān)控網絡中的應用分析[J].計算機測量與控制,2012,20(8):2114-2116.
[6]GONG Songchun,F(xiàn)U Songyin,CHEN Zheng.A real-time video monitoring system of mobile terminals based on android platform:a case study of electric power systems[J].Research Journal of Applied Sciences,Engineering and Technology,2013,5(7):2412-2419.
[7]鄧蕊.基于Android的視頻監(jiān)控的研究與實現(xiàn)[D].西安:西安電子科技大學,2012.
[8]陳彩蓮.基于Android移動平臺的智能視頻監(jiān)控系統(tǒng)設計[D].天津:天津大學,2011.