王艷
(西安航空職業(yè)技術學院 計算機工程學院, 西安 710089)
無線通訊技術及智能手機的迅速發(fā)展和完善,為視頻監(jiān)控技術提供了強大的技術支撐,隨著移動視頻監(jiān)控的不斷發(fā)展,視頻監(jiān)控系統(tǒng)在各領域得到普遍應用,受到PC機不易移動的局限性,視頻數(shù)據(jù)通過PC端獲取的方式已經(jīng)難以滿足監(jiān)控的移動需求,且傳統(tǒng)視頻監(jiān)控還存在布線復雜程度較高、可拓展性較低等缺點,為使傳統(tǒng)視頻監(jiān)控系統(tǒng)的問題得以有效解決,對移動視頻監(jiān)控系統(tǒng)的研究成為重要方向之一,實現(xiàn)通過遠程視頻圖像監(jiān)控。
該技術具備高效的壓縮編碼功能,音視頻多媒體數(shù)據(jù)經(jīng)其處理后以媒體流形式通過網(wǎng)絡完成傳輸,移動客戶端邊播放邊下載,無需下載完整文件,縮短了用戶等待時間,并且已制定了相關標準。相比于PC機,移動視頻監(jiān)控終端設備的硬件資源有限但對實時性的要求較高,考慮到Android系統(tǒng)的CPU運算速度、緩存的局限,因此本文在設計移動視頻監(jiān)控系統(tǒng)時使用了流媒體實時傳輸協(xié)議(RTP),降低延遲,提高控制傳輸流的能力及系統(tǒng)的實時性,同時具備較強的自適應網(wǎng)絡帶寬資源能力[1]。
該技術主要由視頻編碼(規(guī)定了H.264 的編解碼算法)和網(wǎng)絡提取兩層構(gòu)成,具體的編碼原理如圖1所示。

圖1 H.264視頻編碼器框圖
具備較高的編碼效率和網(wǎng)絡友好性,視頻編碼層可有效描述視頻內(nèi)容,對原始視頻中冗余時間、空間及統(tǒng)計通過使用離散余弦編碼、運動估計等多種方法實現(xiàn)有效壓縮。H.264使用了包括靈活宏塊排序、多尺寸運動估計、環(huán)路去塊效應濾波器,像素運動補償?shù)认冗M的輔助技術,以使壓縮效率得以進一步提高;網(wǎng)絡提取層對傳輸時的H.264 碼流所需遵循的規(guī)范(在各種網(wǎng)絡情況下)進行了詳細規(guī)定,結(jié)合網(wǎng)絡資源情況,依據(jù)視頻的使用特征打包傳送數(shù)據(jù)[1]。
本文采用Client/Server 架構(gòu)完成移動視頻監(jiān)控系統(tǒng)總體架構(gòu)的設計,在客戶端、服務器端需分別對相應的軟件功能進行開發(fā),系統(tǒng)總體架構(gòu)如圖2所示。

圖2 遠程視頻監(jiān)控系統(tǒng)架構(gòu)
主要由視頻監(jiān)控設備、視頻服務器、監(jiān)控客戶終端三部分構(gòu)成,各部分間的通信連接通過網(wǎng)絡完成,采用攝像頭完成監(jiān)控視頻采集端的原始視頻數(shù)據(jù)的采集過程,攝像頭通過云臺的使用完成對旋轉(zhuǎn)的控制,CMOS視頻采集模塊采集圖像,AD轉(zhuǎn)換模塊完成所采集圖像到數(shù)字圖像的轉(zhuǎn)換,并傳送至終端服務器[2]。
在解碼H.264 標準的視頻時需先完成解碼軟件的移植,考慮到運算量較大的H.264解碼算法復雜,本文采用軟件包FFMPEG(C語言編碼)來實現(xiàn),作為一種音視頻解碼包,F(xiàn)FMPEG具備跨平臺、源代碼開放的優(yōu)勢,提高了錄制、編碼和流化音視頻能力,從而實現(xiàn)了Linux及Android的高效兼容。通過將FFMPEG 代碼包移植到Android操作系統(tǒng)即可對由H.264編碼的視頻數(shù)據(jù)進行解碼,為對其他本地語言編寫的代碼進行調(diào)用,移植過程中由于是采用C語言編寫的FFMPEG 軟件包,Android 系統(tǒng)中C 程序的調(diào)用需使用Java 本地接口(JNI),本文通過JNI接口的使用完成了Java 虛擬機同應用程序間的相互調(diào)用,實現(xiàn)Java能夠同本地代碼間的互操作;為實現(xiàn)Android系統(tǒng)對C/C++程序的調(diào)用,JNI 可在基于Java的Android系統(tǒng)中被提供,這些接口由本地代碼(其他語言編寫)實現(xiàn),需在Android系統(tǒng)中進行注冊,Android系統(tǒng)JN I接口具體如圖3所示。

圖3 Android 系統(tǒng) JNI接口
使用 FFMPEG前需先將FFMPEG代碼編譯成動態(tài)庫,在通過JNI 技術完成 FFMPEG函數(shù)的調(diào)用[3]。
系統(tǒng)的核心在于基于Linux 系統(tǒng)的服務器,主要負責對視頻進行捕獲、通過H.264進行編碼、進行RTP分包及云臺控制等,對前端采集設備和后端用戶的管理通過 SIP信令的轉(zhuǎn)發(fā)完成, 攝像頭采集到視頻數(shù)據(jù)后,服務器會對 FFMPEG 音視頻解碼包進行調(diào)用,并在此基礎上完成H.264 壓縮編碼,接下來的RTP打包則通過 JRTPLIB 庫完成,實現(xiàn)用戶客戶端到服務器端的 RTP 連接的創(chuàng)建及通過Socket 接口進行的發(fā)送環(huán)節(jié),確保了數(shù)據(jù)的實時傳輸功能的順利實現(xiàn);Android客戶端通過服務器的訪問,完成流媒體 RTP 數(shù)據(jù)包的接收,再通過JRTPLIB 庫的使用完成拆包處理后存放至接收緩沖區(qū),接下來完成 H.264 解碼(提高調(diào)用 FFMPEG),最終視頻播放、保存等通過調(diào)用Mediawork 庫完成(視頻播放數(shù)據(jù)格式為QCIF 或 CIF),幀速率超過20幀/秒、碼率大于64kps[4]。
采用具備Android 系統(tǒng)的設備作為本文移動視頻監(jiān)控的終端設備,作為同用戶進行交互的對象,客戶端需確保具備基本的美觀易于操作的界面的同時具備穩(wěn)定的相關功能,軟件系統(tǒng)功能構(gòu)成具體如圖4所示。

圖4 軟件系統(tǒng)構(gòu)成
(1) 客戶端界面的實現(xiàn)
應用程序用戶界面的創(chuàng)建通過Android 操作系統(tǒng)提供的多個常見UI 控件實現(xiàn),本文客戶端UI 界面主要由四個界面構(gòu)成(包括登陸認證、選擇通道、設置參數(shù)、播放視頻),具體的界面流程如圖5所示。

圖5 UI界面流程框圖
Android系統(tǒng)中的 UI 控件基于兩個類:View 和 ViewGroup,以Android 界面開發(fā)方法為依據(jù),各界面需完成對應的 XML 布局文件的編寫[5]。
(2) H.264 視頻解碼器的實現(xiàn)
作為移動監(jiān)控客戶終端的核心部分,視頻播放主要通過接收RTP 數(shù)據(jù)包、H.264 解碼及畫面顯示等過程完成,通過Android 系統(tǒng)采用軟件方式對H.264 碼流進行解碼,SIP 會話通過無線網(wǎng)絡傳輸?shù)紸ndroid 系統(tǒng)(在移植完音視頻編解碼包后),Android 系統(tǒng)將有效的 RTP 數(shù)據(jù)包從中分揀出來,在此基礎上拆包 RTP 完成有效負載的分解,實現(xiàn) H.264標準編碼過程(按照時間戳排序),即可獲取最終的視頻數(shù)據(jù),經(jīng)解碼的 H.264 數(shù)據(jù)通過應用程序不斷向視頻播放界面?zhèn)鬟f,通過畫面的不斷刷新即可在移動客戶端實現(xiàn)流暢視頻的獲取[5]。
(3) 播放功能的實現(xiàn)
在手機屏幕的視頻播放界面播放并顯示解碼后的視頻幀,本文播放功能的實現(xiàn)主要通過onDraw()函數(shù)的設計實現(xiàn),在畫面的顯示需調(diào)用Android 系統(tǒng)自帶的Canvason(一種函數(shù)Draw的參數(shù)是寫圖元素類的),在onDraw類中完成屏幕的分辨率的設置(通過屏幕寬、高度的獲取);在一個buffer 字節(jié)類中傳入經(jīng)解碼的數(shù)據(jù)完成圖像的輸出,再將這個字節(jié)類通過 onDraw函數(shù)的調(diào)用完成圖像的顯示,視頻數(shù)據(jù)的解碼通過調(diào)用DecoderNal()函數(shù)完成,有新的視頻數(shù)據(jù)解碼成功后則此函數(shù)解碼后返回的數(shù)值大于 0 時,此時通過對屏幕進行刷新,從而顯示新畫面[6]。
(4) 控制系統(tǒng)的實現(xiàn)
使用 TCP/IP 協(xié)議完成傳輸過程以確保控制指令的可靠性,視頻采集端云臺設備通過客戶端對應的功能按鈕即可完成控制過程,Android 操作系統(tǒng)的TCP/IP 協(xié)議棧相對完整,通過 Socket網(wǎng)絡即可完成應用程序的編程,從而實現(xiàn)系統(tǒng)控制指令的傳輸。基于Android的移動視頻監(jiān)控客戶端播放的畫面有較高的清晰流暢度,沒有出現(xiàn)長時間的卡頓現(xiàn)象,能夠滿足遠程移動監(jiān)控需要。
本文在研究整個監(jiān)控系統(tǒng)關鍵技術的基礎上(包括視頻編解碼、移動流媒體、實時傳輸?shù)?,依據(jù)視頻監(jiān)控系統(tǒng)的體系結(jié)構(gòu),結(jié)合JNI 技術,完成了基于Android 智能終端的移動視頻監(jiān)控系統(tǒng)客戶端的設計,通過在Android系統(tǒng)中設計H.264 視頻解碼器,實現(xiàn)監(jiān)控終端到手持設備上的移植過程,該無線視頻監(jiān)控系統(tǒng)客戶端的功能主要通過移動流媒體實現(xiàn),彌補了傳統(tǒng)的視頻監(jiān)控終端移動性較差的不足,用戶通過網(wǎng)絡即可接入網(wǎng)絡實現(xiàn)移動實時的視頻監(jiān)控過程,不受時空限制,能夠提供高效的遠程移動視頻監(jiān)控服務。