文獻(xiàn)標(biāo)識碼: A
文章編號: 0258-7998(2012)07-0138-02
目前視頻監(jiān)控系統(tǒng)正朝著數(shù)字化、網(wǎng)絡(luò)化、功能綜合化的方向不斷發(fā)展。傳統(tǒng)的視頻監(jiān)控系統(tǒng)大多通過線纜或光纖將視頻信號傳輸?shù)奖O(jiān)控中心,但由于網(wǎng)線的限制,不利于監(jiān)控系統(tǒng)的迅速搭建。隨著無線網(wǎng)絡(luò)特別是3G網(wǎng)絡(luò)的普及,視頻監(jiān)控系統(tǒng)面臨著更加廣闊和自由的空間[1]。
3G網(wǎng)絡(luò)在移動環(huán)境下支持的帶寬有限,而視頻監(jiān)控系統(tǒng)的實(shí)時性要求盡可能清晰流暢地傳輸視頻信號,因此需要在保證視頻信號不失真的情況下,進(jìn)行最大可能的壓縮。H.264標(biāo)準(zhǔn)采用了高精度、多模式預(yù)測技術(shù)提高壓縮比以降低碼流[2],可廣泛應(yīng)用于遠(yuǎn)程監(jiān)控、電視會議以及可視電話等領(lǐng)域。
本文介紹了一種基于Android系統(tǒng)的視頻監(jiān)控系統(tǒng),利用PDA結(jié)合H.264編碼技術(shù)和3G無線網(wǎng)絡(luò)通信技術(shù)實(shí)現(xiàn)了對遠(yuǎn)程視頻的實(shí)時監(jiān)控。
1 系統(tǒng)概述
如圖1所示,系統(tǒng)采用C/S架構(gòu),硬件部分包括帶攝像頭的PDA、H.264編碼器和后臺監(jiān)控計(jì)算機(jī)。系統(tǒng)的關(guān)鍵技術(shù)是編碼器的設(shè)計(jì),將拍攝到的模擬信號轉(zhuǎn)換成數(shù)字信號,通過H.264編碼器進(jìn)行編碼壓縮,最后利用3G無線網(wǎng)絡(luò)將壓縮后的數(shù)據(jù)傳送到后臺監(jiān)控計(jì)算機(jī)完成實(shí)時顯示。后臺計(jì)算機(jī)還可以通過3G網(wǎng)絡(luò)向PDA發(fā)送控制命令,實(shí)現(xiàn)云臺控制等相關(guān)操作。本文主要介紹PDA端的設(shè)計(jì)與實(shí)現(xiàn)。
2 Android操作系統(tǒng)
Android是一種以Linux為基礎(chǔ)的開放源碼操作系統(tǒng),主要用于便攜設(shè)備。Android擁有一個提供Java編程語言功能的核心庫。每個Java編寫的應(yīng)用程序都擁有一個獨(dú)立的Dalvik虛擬機(jī)實(shí)例。Dalvik被設(shè)計(jì)成一個可以同時高效運(yùn)行多個虛擬系統(tǒng)的設(shè)備,這樣的特點(diǎn)使得Android系統(tǒng)能夠很好地適應(yīng)手機(jī)特殊的運(yùn)行環(huán)境。通過在Eclipse上安裝Android SDK插件,可以輕松搭建Android開發(fā)平臺,在該平臺編譯的代碼可自動生成APK文件,直接進(jìn)行安裝使用[3]。
3 PDA端視頻處理的實(shí)現(xiàn)
基于Android的視頻監(jiān)控系統(tǒng)最重要的部分就是PDA以及外設(shè)的設(shè)計(jì)和視頻的處理。PDA有限的內(nèi)存要求這部分的實(shí)現(xiàn)盡量做到低功耗、高性能,達(dá)到算法和軟件的最優(yōu)化。
由于DSP芯片具有極強(qiáng)的可編程性,方便后期進(jìn)行編碼的比較和優(yōu)化。因此編碼器采用ADI公司推出的DSP芯片Blackfin533。該芯片集成了大量的外設(shè)和存儲器接口,在結(jié)構(gòu)上對C/C++進(jìn)行了優(yōu)化,能夠達(dá)到很高的代碼密度,可以滿足H.264編碼的實(shí)時要求。
3.1 H.264算法的優(yōu)化選擇
與以往的視頻編碼標(biāo)準(zhǔn)(如H.263和Mpeg系列)只采用一種或兩種宏塊編碼模式不同,H.264采用從16×16到4×4的七種宏塊編碼模式,使得H.264相比H.263節(jié)省了大約50%的碼率。但同時面臨著可觀的運(yùn)算量消耗[4]。為了達(dá)到實(shí)時編碼,如何實(shí)現(xiàn)快速的模式選擇算法成為解決問題的關(guān)鍵[5-6]。H.264/AVC的宏塊編碼模式大量應(yīng)用了遍歷,使得運(yùn)算量過大,適當(dāng)?shù)販p少遍歷的模式或者提前終止遍歷就可以提高編碼的速度[7]。而減少無效遍歷的關(guān)鍵在于限制遍歷的范圍和制定可靠的終止準(zhǔn)則。
Curr為當(dāng)前待編碼的宏塊,A、B、C、D分別為四個方向的相鄰宏塊,A_cost、B_cost、C_cost和D_cost分別為A、B、C、D的編碼代價,門限T利用式(1)計(jì)算得出:
T=(5×A_cost+5×B_cost+4×C_cost+2×A_cost)>>4 (1)
Curr分別按照4個相鄰宏塊和自身宏塊的模式編碼,比較其代價值得到最優(yōu)編碼。圖2所示為對宏塊A和B的優(yōu)化編碼流程圖(對宏塊C和D的編碼類似)。通過測試比較及優(yōu)化算法的處理,視頻在保真的情況下,有效地降低了壓縮比,提高了算法的運(yùn)算速度。
3.2 軟件的設(shè)計(jì)
Android平臺實(shí)現(xiàn)主要包括通信模塊和數(shù)據(jù)處理模塊。
通信模塊采用了Socket網(wǎng)絡(luò)通信技術(shù)進(jìn)行UDB通信。通信之前的準(zhǔn)備工作是完成Socket的創(chuàng)建,同時綁定Socket和端口號,設(shè)置開始監(jiān)聽端口。監(jiān)聽開始后,主程序循環(huán)監(jiān)聽、接收請求信號,同時創(chuàng)建新的客戶連接Socket以及相應(yīng)的通信進(jìn)程。
數(shù)據(jù)處理模塊主要是對視頻流數(shù)據(jù)的提取和傳導(dǎo)。開啟攝像頭后,在視頻預(yù)覽時截取視頻流每一幀的數(shù)據(jù)。把截取到的數(shù)據(jù)傳輸?shù)綉?yīng)用層進(jìn)行圖像繪制,通過外設(shè)傳輸?shù)紻SP芯片進(jìn)行視頻編碼,編碼后將數(shù)據(jù)通過網(wǎng)絡(luò)傳送到后臺監(jiān)控室。Android應(yīng)用層[8]的核心代碼如下:
p0=socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
// 創(chuàng)建socket
bind(p0,(struct sockaddr *)&(addr_org),sizeof(struct sock-
addr_in)); // 綁定IP和端口
sendto(p0, SendDataBuff, ulLen, 0, (struct sockaddr *)&
(addr_dst), sizeof(sockaddr_in));
// 向指定IP發(fā)送SendDataBuff中的視頻數(shù)據(jù)
public ImageSurfaceView(Context context, AttributeSet attrs)
{paint = new Paint(); paint.setColor(Color.WHITE);
paint.setAntiAlias(true);
…… setFocusable(true);} //初始化SurfaceView類
public void surfaceCreated(SurfaceHolder holder) {……
screenH = this.getHeight();screenW = this.getWidth
();handler.post(imageRunnable);}
//創(chuàng)建SurfaceView用于顯示捕捉的圖像
Camera openCamera() {} //打開攝像頭
android.hardware.camera.PreviewCallback
//用來調(diào)用每幀圖像數(shù)據(jù)data的接口
DSP芯片中軟件設(shè)計(jì)的主要目的是提高運(yùn)算速度和效率。宏塊編碼采用不同位置獨(dú)立編碼,編程時盡可能地將判斷轉(zhuǎn)移到循環(huán)外,杜絕了大量幀內(nèi)和幀間宏塊的重復(fù)判斷。利用快速的模式選擇算法對宏塊進(jìn)行編碼,進(jìn)一步提高了編碼效率。使用Blackfin533芯片專用的視頻指令SAA求取絕對差值求和函數(shù)SAD(),在很大程度上提高了運(yùn)算速度。具體SAA的使用代碼如下:
for(i=0;i<16*16;i++)
sad+=abs( *pSrc++ - *pRef++);
LSETUP(sad_START,sad_END) LC0=P1;
sad_START:
r3 = [i1++];
SAA(r1:0,r3:2) || r1= [i0++] || r2= [i1++];
SAA(r1:0,r3:2)(R) || r0= [i0++] || r3= [i1++];
SAA(r1:0,r3:2) || r1= [i0++] || r2= [i1++];
sad_END:SAA(r1:0,r3:2)(R) || r0=[i0++] || r2=
[i1++]
4 實(shí)現(xiàn)結(jié)果
圖3為系統(tǒng)在HTC G14手機(jī)和后臺計(jì)算機(jī)中利用聯(lián)通3G網(wǎng)絡(luò)實(shí)驗(yàn)的結(jié)果。手機(jī)拍攝預(yù)覽的視頻顯示在計(jì)算機(jī)上;后臺可選擇監(jiān)視某一臺手機(jī)的視野,還可以通過發(fā)送命令放大或縮小視野的范圍,整個過程不受距離限制。經(jīng)過多次測試,PDA端與后臺在同一幀的顯示僅存在3 s~5 s的延遲。
目前,基于Android的視頻監(jiān)控系統(tǒng)已在實(shí)驗(yàn)室測試使用,基本完成了后臺計(jì)算機(jī)對PDA端攝像頭視野的實(shí)時監(jiān)控功能。系統(tǒng)利用了3G網(wǎng)絡(luò)數(shù)據(jù)高傳輸速度中和Android系統(tǒng)開發(fā)便利的優(yōu)勢,優(yōu)化了H.264編碼方法和軟件編程。整個系統(tǒng)從軟件到硬件,開發(fā)成本低,實(shí)際使用方便。隨著網(wǎng)絡(luò)技術(shù)和視頻編碼技術(shù)的不斷發(fā)展,移動視頻監(jiān)控有望在未來成為監(jiān)控系統(tǒng)的主流發(fā)展方向。
參考文獻(xiàn)
[1] 曹曉芳,王超,李杰.一種基于Android智能手機(jī)的遠(yuǎn)程視頻監(jiān)控的設(shè)計(jì)[J].電子器件,2011,34(6):709-712.
[2] 李文新,李宇光,胡延蘇,等.嵌入式無線局域網(wǎng)中H.264視頻傳輸?shù)腝oS研究[J].計(jì)算機(jī)科學(xué),2011,38(5):83-85.
[3] 耿東久,索岳,陳渝,等.基于Android手機(jī)的遠(yuǎn)程訪問和控制系統(tǒng)[J].計(jì)算機(jī)應(yīng)用,2011,31(2):559-561.
[4] 西剎子.安防天下——智能網(wǎng)絡(luò)視頻監(jiān)控技術(shù)詳解與實(shí)踐[M].北京:清華大學(xué)出版社,2010.
[5] 閆健恩,許海燕,林建秋.基于ADSP-Blackfin533的H.264視頻編碼器的實(shí)現(xiàn)[J].微計(jì)算機(jī)信息,2006(5):27-29.
[6] 顧梅花,余寧梅,寇立康,等.H.264快速模式選擇算法中的提前終止策略[J].中國圖像圖形學(xué)報,2011,16(3):305-309.
[7] 盧光輝.P幀快速模式選擇算法[J].電子科技大學(xué)學(xué)報,2010,39(3):397-401.
[8] 韓超,梁泉.Android系統(tǒng)原理及開發(fā)要點(diǎn)詳解[M].北京:電子工業(yè)出版社,2010.