楊軍
摘 要:隨著中國(guó)移動(dòng)互聯(lián)網(wǎng)的快速發(fā)展,基于移動(dòng)平臺(tái)的視頻監(jiān)控憑借其獨(dú)特的優(yōu)越性開(kāi)始進(jìn)入人們的視野。移動(dòng)視頻監(jiān)控不僅具有傳統(tǒng)監(jiān)控的功能,而且具有移動(dòng)性和實(shí)時(shí)性,用戶(hù)可以通過(guò)移動(dòng)終端隨時(shí)隨地監(jiān)控,滿(mǎn)足用戶(hù)多元化的需求。數(shù)字化、網(wǎng)絡(luò)化、智能化是目前視頻監(jiān)控技術(shù)發(fā)展的方向。文章視頻監(jiān)控Android端的一種有效解決方案。Android移動(dòng)設(shè)備端進(jìn)行視頻及地理信息采集,通過(guò)流媒體協(xié)議將經(jīng)過(guò)編碼的H.264實(shí)時(shí)視頻數(shù)據(jù)發(fā)送到服務(wù)器端,服務(wù)器端進(jìn)行存儲(chǔ)及解碼,監(jiān)控客戶(hù)端完成視頻播放、視頻管理及輔助控制。
關(guān)鍵詞:Android平臺(tái);MediaRecorder;視頻監(jiān)控
中圖分類(lèi)號(hào):TN943 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1006-8937(2015)20-0016-02
1 目前視頻監(jiān)控系統(tǒng)面臨的問(wèn)題及基于Android平
臺(tái)的遠(yuǎn)程視頻監(jiān)控系統(tǒng)的優(yōu)點(diǎn)
隨著現(xiàn)代信息化技術(shù)的發(fā)展,視頻監(jiān)控系統(tǒng)已經(jīng)得到廣泛應(yīng)用,但同時(shí)使用傳統(tǒng)的視頻監(jiān)控系統(tǒng)將面臨諸多問(wèn)題:
①給用戶(hù)增加額外的工程成本。
②同時(shí)面臨視頻采集終端固定和圖像采集角度確定這兩個(gè)問(wèn)題,不能全方位多角度地展示現(xiàn)場(chǎng)情況等缺陷。
③視頻數(shù)據(jù)傳輸問(wèn)題也限制了傳統(tǒng)視頻監(jiān)控系統(tǒng)的使用。
與傳統(tǒng)遠(yuǎn)程視頻監(jiān)控系統(tǒng)相比,基于Android平臺(tái)的遠(yuǎn)程視頻監(jiān)控系統(tǒng)具有以下優(yōu)點(diǎn):
①無(wú)布點(diǎn)限制,系統(tǒng)可移動(dòng)性好。
②可以實(shí)現(xiàn)現(xiàn)場(chǎng)數(shù)據(jù)的多人多角度視頻采集。
③實(shí)現(xiàn)社會(huì)資源利用的最大化。
2 移動(dòng)開(kāi)發(fā)平臺(tái)
智能手機(jī)為移動(dòng)視頻監(jiān)控系統(tǒng)提供了良好的開(kāi)發(fā)平臺(tái),而智能手機(jī)操作系統(tǒng)為監(jiān)控客戶(hù)端提供軟件開(kāi)發(fā)和運(yùn)行環(huán)境,智能操作系統(tǒng)的特性直接影響到人機(jī)交互的易用性和穩(wěn)定性。自上而下分為5層,下面簡(jiǎn)述各層的功能。
①硬件驅(qū)動(dòng)層:該層是最底層,由硬件部分和驅(qū)動(dòng)部分構(gòu)成,為操作系統(tǒng)層提供功能性支撐及抽象的概念。因此操作系統(tǒng)可以移植在各種不同的硬件設(shè)備上,具有靈活的移植性。
②操作系統(tǒng)層:該層的主要功能是為業(yè)務(wù)功能層的應(yīng)用程序提供編程接口及核心功能。它提供了良好的人機(jī)交互界面,可完成文件系統(tǒng)管理,多任務(wù)調(diào)度管理,內(nèi)存管理等。
③業(yè)務(wù)功能層:他介于應(yīng)用操作系統(tǒng)和軟件當(dāng)中,主要完成通信、通用功能。通信功能提供通話(huà),無(wú)線(xiàn)協(xié)議棧和IP協(xié)議等支持;通用功能提供多媒體子系統(tǒng)和安全子系統(tǒng)。
④用戶(hù)界面層:UI層是最后展示給用戶(hù)可視化操作的界面層,為用戶(hù)的操作提供方便。
⑤應(yīng)用層:應(yīng)用層是以業(yè)務(wù)功能層為基礎(chǔ),為用戶(hù)提供功能繁多的應(yīng)用,如電子商務(wù)類(lèi)業(yè)務(wù)、消息類(lèi)業(yè)務(wù)、個(gè)人信息管理和GPS位置類(lèi)業(yè)務(wù)等。
3 Android移動(dòng)設(shè)備端子系統(tǒng)設(shè)計(jì)
Android移動(dòng)設(shè)備端子系統(tǒng)主要包含視頻采集模塊,GPS信息采集模塊,數(shù)據(jù)傳輸模塊,遠(yuǎn)程控制模塊等。
視頻數(shù)據(jù)采集模塊:在控制前端,用戶(hù)可以將攝像頭對(duì)準(zhǔn)某一監(jiān)控區(qū)域,使用手機(jī)攝像頭采集監(jiān)控區(qū)域的視頻圖像。攝像頭可以根據(jù)用戶(hù)需要調(diào)整焦距,用戶(hù)同時(shí)根據(jù)服務(wù)器端提示進(jìn)行監(jiān)控角度調(diào)整。
GPS數(shù)據(jù)采集模塊:在整個(gè)視頻監(jiān)控過(guò)程中,該模塊負(fù)責(zé)進(jìn)行GPS信息采集(采集經(jīng)度及緯度),如果監(jiān)控過(guò)程中用戶(hù)的位置改變,該模塊要給出最新的GPS信息。主要用于對(duì)視頻進(jìn)行標(biāo)記,便于服務(wù)器端對(duì)歷史數(shù)據(jù)或?qū)崟r(shí)數(shù)據(jù)進(jìn)行檢索。
移動(dòng)設(shè)備基本信息采集模塊:在視頻數(shù)據(jù)傳輸前,服務(wù)器需要記錄移動(dòng)設(shè)備基本信息,這些基本信息是通過(guò)該模塊采集。主要包含:IMSI、手機(jī)號(hào)碼、移動(dòng)運(yùn)營(yíng)商名字信息。
控制模塊:該模塊主要是響應(yīng)服務(wù)器端控制信息,主要工作是根據(jù)服務(wù)器控制信息對(duì)攝像頭焦距進(jìn)行調(diào)整,對(duì)視頻質(zhì)量進(jìn)行控制,同時(shí)給出用戶(hù)最佳的監(jiān)控位置提示信息,便于服務(wù)器端獲取高質(zhì)量的數(shù)據(jù)信息。
通信模塊:該模塊將移動(dòng)設(shè)備采集到的實(shí)時(shí)視頻數(shù)據(jù)及GPS信息根據(jù)傳輸協(xié)議打包實(shí)時(shí)發(fā)送到服務(wù)器,并對(duì)傳輸過(guò)程進(jìn)行控制。
4 視頻采集設(shè)計(jì)與實(shí)現(xiàn)
Android 多媒體框架的核心是Open Core,它也被稱(chēng)為PV(Packet Video)。他實(shí)現(xiàn)Android平臺(tái)的所有音視頻采集、播放的功能。程序開(kāi)發(fā)人員可以通過(guò)Open Core方便快速的開(kāi)發(fā)出符合需求的多媒體應(yīng)用程序,例如:視頻會(huì)議,音視頻的采集、回放,實(shí)時(shí)的流媒體播放等應(yīng)用。
4.1 錄制步驟
在實(shí)際開(kāi)發(fā)中我們并不會(huì)過(guò)多的研究Open Core的實(shí)現(xiàn),Android提供了上層的Media API給開(kāi)發(fā)人員使用,MediaPlayer和MediaRecorder。本系統(tǒng)將采用MediaRecorder進(jìn)行視頻采集。MediaRecorder錄制分為以下幾個(gè)步驟。
第一步:實(shí)例化MediaRecorder 類(lèi)對(duì)象。
MediaRecorder myMediaRecorder
=new android.media.MediaRecorder();
第二步:初始化myMediaRecorder 對(duì)象,對(duì)視頻采集參數(shù)進(jìn)行設(shè)置,具體設(shè)置順序及參數(shù)如下:
①設(shè)置視頻。
②設(shè)置輸出格式。
③設(shè)置幀頻率。
④設(shè)置視頻采集像素。
⑤設(shè)置視頻編碼方式為。
⑥設(shè)置手機(jī)(預(yù)覽)顯示面板。
⑦設(shè)置信息輸出流。
第三步:開(kāi)始錄制:
①讓MediaRecorder 對(duì)象處于就緒狀態(tài)。
②開(kāi)始錄音。
第四步:停止錄制并釋放資源:
①停止錄制。
②從新啟動(dòng)MediaRecorder對(duì)象讓它處于空閑狀態(tài)。
③釋放和MediaRecorder對(duì)向相關(guān)的所有資源。
通過(guò)以上幾個(gè)步驟,可以采集到相關(guān)視頻數(shù)據(jù),并將視頻數(shù)據(jù)輸出到指定文件,通過(guò)播放器可以正常播放已經(jīng)錄制的視頻。
4.2 存在的問(wèn)題
但是以上功能并不能適合本系統(tǒng)需要,主要存在兩方面的問(wèn)題:
①數(shù)據(jù)輸出到本地文件中,無(wú)法實(shí)時(shí)獲取每一幀數(shù)據(jù),無(wú)法將實(shí)時(shí)數(shù)據(jù)向服務(wù)器端發(fā)送;
②通過(guò)多次試驗(yàn)發(fā)現(xiàn),H.264的Sequence Parameter Sets(SPS)和Picture Parameter Set(PPS)值在視頻錄制結(jié)束時(shí)才回寫(xiě)到輸出文件的頭部,而在視頻數(shù)據(jù)開(kāi)始傳輸時(shí)就需要這些參數(shù),顯然目前的方法是無(wú)法在視頻錄制過(guò)程中進(jìn)行實(shí)時(shí)傳輸。
4.3 改進(jìn)措施
為了解決上面遇到的問(wèn)題,本系統(tǒng)對(duì)視頻錄制過(guò)程進(jìn)行了如下改進(jìn):
通過(guò)LocalServerSocket、LocalSocket對(duì)數(shù)據(jù)輸出流進(jìn)行實(shí)時(shí)獲取;通過(guò)相同參數(shù)設(shè)置進(jìn)行二次視頻錄制,其中一次獲取SPS及PPS,另外一次進(jìn)行視頻數(shù)據(jù)獲取。
①通過(guò)LocalServerSocket、LocalSocket對(duì)數(shù)據(jù)輸出流進(jìn)行實(shí)時(shí)獲取。
MediaRecorder對(duì)象采集到視頻數(shù)據(jù)后將數(shù)據(jù)輸出流設(shè)置到LocalServerSocket的輸出流中,LocalServerSocket對(duì)象和LocalSocket對(duì)象建立連接,在LocalSocket對(duì)象的輸入流中獲取實(shí)時(shí)視頻數(shù)據(jù),然后將視頻數(shù)據(jù)交給通信組件。
②通過(guò)相同參數(shù)設(shè)置進(jìn)行二次視頻錄制,其中一次獲取SPS及PPS、另外一次進(jìn)行視頻數(shù)據(jù)獲取。
系統(tǒng)進(jìn)行一次視頻數(shù)據(jù)采集,將進(jìn)行兩次錄制,且兩次錄制參數(shù)相同,第一次錄制僅僅獲取SPS及PPS值,然后停止第一次錄制,開(kāi)始正常的第二次錄制。試驗(yàn)證明第一次錄制時(shí)間很短,大約為0.1 s,對(duì)用戶(hù)來(lái)講是基本上是連續(xù)的。
5 數(shù)據(jù)傳輸設(shè)計(jì)與實(shí)現(xiàn)
系統(tǒng)的通信組件是采用多線(xiàn)程技術(shù),它獨(dú)立于視頻采集組件,即數(shù)據(jù)采集是一個(gè)線(xiàn)程,通信是一個(gè)線(xiàn)程。通過(guò)系統(tǒng)的總體結(jié)構(gòu)設(shè)計(jì)可以看出,系統(tǒng)通信一共分了三個(gè)部分,分別是:視頻數(shù)據(jù)傳輸前的基本參數(shù)通信、視頻數(shù)據(jù)通信、視頻采集完成后輔助數(shù)據(jù)通信。第一部分和第三部分通信是基于TCP協(xié)議的通信,信息載體為XML,服務(wù)器端負(fù)責(zé)建立連接的是監(jiān)聽(tīng)主線(xiàn)程;視頻數(shù)據(jù)通信是基于UDP協(xié)議的,采用RTP進(jìn)行封裝,通過(guò)RTCP進(jìn)行傳輸控制,通信目標(biāo)是服務(wù)器端為該客戶(hù)啟動(dòng)的新的監(jiān)聽(tīng)進(jìn)程。
5.1 視頻數(shù)據(jù)傳輸前的基本參數(shù)傳輸
Android移動(dòng)設(shè)備端程序啟動(dòng)后,用戶(hù)點(diǎn)擊通信按鈕,觸發(fā)通信組件后,系統(tǒng)開(kāi)始采集手機(jī)基本信息,將這些信息利用XML進(jìn)行封裝。在服務(wù)器端主監(jiān)聽(tīng)進(jìn)程接收到數(shù)據(jù)請(qǐng)求后,對(duì)數(shù)據(jù)進(jìn)行解析,然后將數(shù)據(jù)寫(xiě)入數(shù)據(jù)庫(kù)中。
5.2 視頻數(shù)據(jù)傳輸
RTP封裝模塊主要負(fù)責(zé)對(duì)H.264視頻流進(jìn)行打包,封裝成RTP數(shù)據(jù)包,并且將包發(fā)送到緩沖區(qū)。函數(shù)原型設(shè)計(jì):
void createRTP(char[] data,String[]args)。
參數(shù)data:需要打包的視頻數(shù)據(jù)存儲(chǔ)地址。
參數(shù)args:視頻打包是需要的參數(shù),主要包含數(shù)據(jù)包大小等數(shù)據(jù)。
數(shù)據(jù)發(fā)送模塊主要對(duì)數(shù)據(jù)緩沖區(qū)數(shù)據(jù)進(jìn)行發(fā)送,當(dāng)?shù)谝淮伟l(fā)送數(shù)據(jù)包時(shí),則應(yīng)產(chǎn)生并發(fā)送控制包中的SDES類(lèi)型的CNAME包,在發(fā)送數(shù)據(jù)包的時(shí)候,要對(duì)數(shù)據(jù)包進(jìn)行相關(guān)統(tǒng)計(jì),包括包的數(shù)目,發(fā)送的字節(jié)等。函數(shù)原型設(shè)計(jì):
void sendRTP(char[] RTPData,int len,String[] args);
參數(shù)RTPData:需要發(fā)送的RTP數(shù)據(jù)包的存儲(chǔ)地址。
參數(shù)len:本次發(fā)送的數(shù)據(jù)長(zhǎng)度。
參數(shù)args:根據(jù)RTCP反饋的控制信息組成參數(shù)信息。
5.3 視頻采集完成后輔助數(shù)據(jù)傳輸
當(dāng)視頻數(shù)據(jù)采集完畢并上傳完畢后,用戶(hù)可以給自己上傳的視頻增加描述,該部分功能主要通過(guò)TCP協(xié)議實(shí)現(xiàn),將該段視頻的唯一ID及視頻描述信息封裝成XML發(fā)送給服務(wù)器主監(jiān)聽(tīng)程序。
6 結(jié) 語(yǔ)
本文對(duì)視頻監(jiān)控技術(shù)的研究現(xiàn)狀進(jìn)行了了解,分析了基于Android平臺(tái)的遠(yuǎn)程視頻監(jiān)控系統(tǒng)的研究目的和進(jìn)行軟件開(kāi)發(fā)的重要意義,提出了一種基于Android平臺(tái)遠(yuǎn)程視頻監(jiān)控系統(tǒng)的手機(jī)端設(shè)計(jì)方案,經(jīng)過(guò)嚴(yán)格測(cè)試,驗(yàn)證本方案可行并運(yùn)行穩(wěn)定。
參考文獻(xiàn):
[1] 常志沛.基于Android的智能手機(jī)視頻監(jiān)控系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].大連:大連海事大學(xué),2011.
[2] 李海寧.基于H.264的智能手機(jī)監(jiān)控系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].大連:大連理工大學(xué),2009.