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