[侯杰 劉雙廣]
基于Android的實(shí)時(shí)警用視頻監(jiān)控系統(tǒng)
[侯杰 劉雙廣]
目前,智能移動(dòng)設(shè)備的不斷普及和網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng)的快速發(fā)展,人們對(duì)視頻監(jiān)控的要求越來越高,手機(jī)視頻監(jiān)控不受空間上的制約,滿足多元化的要求。文章基于實(shí)際項(xiàng)目,提出了一種基于Android平臺(tái)的警用移動(dòng)視頻監(jiān)控系統(tǒng)方案。該系統(tǒng)由遠(yuǎn)程視頻采集端、視頻流服務(wù)器及移動(dòng)監(jiān)控終端構(gòu)成,采用開源的多媒體框架FFmpeg對(duì)視頻進(jìn)行H.264編解碼,采用RTP/RTCP協(xié)議來傳輸視頻數(shù)據(jù),并添加人臉、車牌識(shí)別等模塊。經(jīng)過測(cè)試證明該平臺(tái)能很好地實(shí)現(xiàn)移動(dòng)視頻監(jiān)控的功能,滿足項(xiàng)目需求,服務(wù)公安警用實(shí)戰(zhàn)。
遠(yuǎn)程監(jiān)控 Android平臺(tái) 移動(dòng)終端 視頻編解碼
侯杰
重慶郵電大學(xué)光通信和網(wǎng)絡(luò)重點(diǎn)實(shí)驗(yàn)室,碩士研究生。主要研究方向:通信新技術(shù)應(yīng)用。
劉雙廣
重慶郵電大學(xué)光通信和網(wǎng)絡(luò)重點(diǎn)實(shí)驗(yàn)室,高新興科技集團(tuán)股份有限公司研發(fā)中心,高級(jí)工程師,碩士生導(dǎo)師。主要研究方向:通信新技術(shù)應(yīng)用。
隨著4G時(shí)代的到來,移動(dòng)終端設(shè)備的高速智能化發(fā)展,各類智能手機(jī)操作系統(tǒng)性能不斷提高。由Google開發(fā)的Android操作系統(tǒng)基于開源Linux系統(tǒng)實(shí)現(xiàn),其中底層采用C語言設(shè)計(jì),而應(yīng)用層采用簡(jiǎn)便的Java語言進(jìn)行開發(fā)[1]。其免費(fèi)開源特性促進(jìn)了智能手機(jī)以及平板電腦的快速發(fā)展[2],也為無線視頻監(jiān)控提供了很好的軟、硬件平臺(tái)。傳統(tǒng)的基于PC終端的網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng)缺乏一定的靈活性,不能滿足用戶的移動(dòng)監(jiān)控等多元化需要[3]。本文在Android平臺(tái)上,設(shè)計(jì)并實(shí)現(xiàn)了可運(yùn)行于多種移動(dòng)終端的實(shí)時(shí)視頻監(jiān)控系統(tǒng)。經(jīng)測(cè)試,系統(tǒng)在不同無線網(wǎng)絡(luò)環(huán)境下均獲得了較好的實(shí)時(shí)監(jiān)控性能,可用于警用監(jiān)控以及無人值守等領(lǐng)域。
基于Android平臺(tái)的移動(dòng)視頻監(jiān)控系統(tǒng)以Android智能手機(jī)作為視頻監(jiān)控客戶端,借助于Android手機(jī)的便攜性和靈活性等優(yōu)點(diǎn),突破了傳統(tǒng)視頻監(jiān)控系統(tǒng)在時(shí)間和空間上的諸多限制[4],本系統(tǒng)將主要應(yīng)用于公安系統(tǒng),實(shí)現(xiàn)了隨時(shí)隨地進(jìn)行視頻監(jiān)控的目標(biāo)。
視頻監(jiān)控系統(tǒng)主要由視頻采集設(shè)備(帶云臺(tái)的的網(wǎng)絡(luò)攝像機(jī))、視頻流服務(wù)器以及基于Android的移動(dòng)智能終端(手機(jī)、平板)構(gòu)成,如圖1。視頻采集設(shè)備用來完成現(xiàn)場(chǎng)實(shí)時(shí)視頻的采集與視頻H.246壓縮編碼,然后采用網(wǎng)絡(luò)接入到Internet,把經(jīng)過壓縮后的視頻數(shù)據(jù)存放于視頻流服務(wù)器。視頻流服務(wù)器通過JMF類庫(kù)(Java媒體框架API)捕獲視頻,并通過實(shí)時(shí)傳輸協(xié)議RTP打包,最后利用Socket通信將壓縮后的視頻發(fā)送出去。視頻流服務(wù)器通過無線網(wǎng)絡(luò)建立獨(dú)立的IP地址,便于移動(dòng)視頻監(jiān)控終端通過Socket請(qǐng)求獲取視頻數(shù)據(jù)。移動(dòng)視頻監(jiān)控終端主要是向遠(yuǎn)程視頻流服務(wù)器發(fā)送監(jiān)控請(qǐng)求、視頻解壓、視頻播放及圖片保存等功能。客戶端在接收到壓縮后的監(jiān)控視頻數(shù)據(jù)后,對(duì)RTP包進(jìn)行解析,然后調(diào)用FFmpeg音視頻解碼庫(kù),實(shí)現(xiàn)H.264解碼,并將解碼后得到的視頻顯示在智能終端界面上,供用戶查看。
圖1 基于Android的移動(dòng)視頻監(jiān)控系統(tǒng)模型
(1)視頻采集端
全部采用有線的IP攝像頭,并通過局域網(wǎng)與當(dāng)?shù)氐淖臃?wù)器連接。攝像頭的類型主要分為云臺(tái)攝像頭和普通攝像頭,云臺(tái)攝像就是帶有云臺(tái)功能的攝像頭,可通過遠(yuǎn)程終端控制攝像頭的轉(zhuǎn)動(dòng)角度、焦距等,此模塊主要由鏡頭和感光元件組成,目前,根據(jù)不同的感光元件可以分為CCD和CMOS兩種。
(2)流媒體服務(wù)器
通過調(diào)用第三方SDK的方式獲取子服務(wù)器上的視頻數(shù)據(jù),并對(duì)傳輸過來的原始視頻數(shù)據(jù)進(jìn)行編碼,對(duì)處理后的視頻信息使用流媒體技術(shù)進(jìn)行串流化處理。其主要完成H.264數(shù)據(jù)的RTP封包工作、與客戶端的RTSP會(huì)話鏈接與實(shí)時(shí)的傳輸、控制工作。同時(shí)該部分還要完成用戶信息管理,以及視頻的存儲(chǔ)和周期性清除等工作。
(3)網(wǎng)絡(luò)傳輸
此模塊負(fù)責(zé)將流媒體數(shù)據(jù)包和控制信息通過以太網(wǎng)進(jìn)行傳輸,本文用的無線網(wǎng)絡(luò)為WiFi網(wǎng)絡(luò)。
(4)移動(dòng)終端
采用Android系統(tǒng)的移動(dòng)終端部分主要實(shí)現(xiàn)用戶的登錄,視頻數(shù)據(jù)的接收、解析、解碼、播放等工作,同時(shí)支持?jǐn)z像頭的云臺(tái)控制。
移動(dòng)視頻監(jiān)控系統(tǒng)總體框架可分為視頻巡邏、電子地圖、即拍即傳、人臉識(shí)別、車牌識(shí)別、移動(dòng)案件、語音對(duì)講、圖像瀏覽、告警查看等部分如圖2。主要的功能模塊需要滿足的需求如下:
視頻巡邏:是該系統(tǒng)最重要的功能模塊,將所有可進(jìn)行監(jiān)控信息查看的設(shè)備以列表形式展現(xiàn),用戶可根據(jù)需要選擇相應(yīng)的設(shè)備進(jìn)行查看,對(duì)監(jiān)控現(xiàn)場(chǎng)進(jìn)行實(shí)時(shí)的監(jiān)控。
電子地圖:在地圖中對(duì)攝像機(jī)位置進(jìn)行定位,便于快速查看。
人臉、車牌識(shí)別:通過融入智能算法,可以對(duì)手機(jī)拍攝的人臉和車牌進(jìn)行快速識(shí)別。
移動(dòng)案件:通過移動(dòng)端快速記錄案件詳情。
圖像瀏覽:系統(tǒng)不僅支持實(shí)時(shí)的視頻監(jiān)控,而且提供了對(duì)歷史數(shù)據(jù)進(jìn)行查看的功能。用戶可通過歷史數(shù)據(jù)查看模塊對(duì)歷史監(jiān)控?cái)?shù)據(jù)進(jìn)行重復(fù)查看。
圖2 系統(tǒng)框架
服務(wù)器端在整個(gè)監(jiān)控系統(tǒng)中主要負(fù)責(zé)原始數(shù)據(jù)的處理,存儲(chǔ)用戶數(shù)據(jù)文件和視頻數(shù)據(jù)的發(fā)送,在服務(wù)器端視頻得處理模塊和視頻數(shù)據(jù)的發(fā)送模塊以緩沖區(qū)為紐帶,當(dāng)服務(wù)器通過攝像頭采集到視頻信息,交給數(shù)據(jù)處理模塊進(jìn)行數(shù)據(jù)進(jìn)一步加工編碼,然后直接進(jìn)入緩沖區(qū),在緩沖中的視頻數(shù)據(jù),當(dāng)接到來自客戶端的請(qǐng)求指令,通過視頻發(fā)送模塊向客戶端程序發(fā)送。同時(shí)關(guān)于用戶的數(shù)據(jù)信息也存放在服務(wù)器端的數(shù)據(jù)庫(kù)中。整個(gè)流程如圖3。
圖3 服務(wù)器功能模塊流程
2.1視頻編碼模塊
由于攝像頭廠商提供的是高清攝像頭設(shè)備,因此視頻采集端采集到的視頻數(shù)據(jù)往往非常大,在網(wǎng)絡(luò)帶寬有限的移動(dòng)網(wǎng)絡(luò)中,更是不便于傳輸。所以,為了視頻數(shù)據(jù)更好地傳輸,需要將采集端得到的原始視頻數(shù)據(jù)進(jìn)行壓縮編碼[5]。
編碼模塊流程如下:首先利用攝像頭廠商提供的SDK,調(diào)用相關(guān)API,獲得原始視頻數(shù)據(jù)。然后對(duì)視頻數(shù)據(jù)進(jìn)行分辨率、碼率、幀率的轉(zhuǎn)換,將轉(zhuǎn)化后的視頻數(shù)據(jù)進(jìn)行H.264編碼,服務(wù)器端對(duì)視頻數(shù)據(jù)的H.264編碼使用了X.264開源庫(kù)函數(shù),編碼的過程和函數(shù)的作用描述如下:
小學(xué)生對(duì)于學(xué)習(xí)還是處于一個(gè)很朦朧的狀態(tài),這時(shí)就應(yīng)該培養(yǎng)他們對(duì)于學(xué)習(xí)的興趣。在小學(xué)階段,一切都是從零開始,在教師眼里都具有很強(qiáng)的可塑性,小學(xué)生的接受能力、學(xué)習(xí)能力、模仿能力都很強(qiáng),這時(shí),教師一定要傳遞一些正能量讓他們往積極的方向發(fā)展。
x264_param_default_preset(Param,"fast",zerolatency)用于設(shè)置參數(shù)初始化,使用zerolatency選項(xiàng)使編碼不存在延時(shí)。Param-〉i_threads = X264_SYNC_ LOOKAHEAD_AUTO是設(shè)置當(dāng)取到緩沖區(qū)為空時(shí),繼續(xù)使用不會(huì)造成死鎖。Param-〉i_width和Param-〉i_height是設(shè)置編碼圖像的寬度和高度。Param-〉i_bframe設(shè)置流參數(shù)等。
x264_picture_alloc(pPicIn,X264_CSP_I420,Param-〉i_ width,Param-〉i_heigh)被用來分配編碼所需的內(nèi)存空間。
Handle = x264_encoder_open(Param)是打開編碼器句柄,通過X264_encoder_parameters得到設(shè)置給X264的參數(shù),通過X264_encoder_reconfig更新X264的參數(shù)。
read_frame_y4mpPicIn,(hnd_t*)y4m_hnd,i)是讀取一幀數(shù)據(jù),并將其存入內(nèi)存中。
x264_encoder_encode(Handle,&pNals,&iNal,pPicIn ,pPicOut)是用來獲取一幀數(shù)據(jù)進(jìn)行H.264編碼。
2.2 流媒體模塊
該模塊對(duì)數(shù)據(jù)進(jìn)行RTP封包實(shí)現(xiàn)實(shí)時(shí)流媒體傳輸?shù)娇蛻舳耸种械腁ndroid平臺(tái)設(shè)備[6]。軟件程序通過調(diào)用socket套接字的listen()方法等待客戶端Android平臺(tái)設(shè)備的連接,其間客戶端請(qǐng)求獲取PC的IP地址與端口號(hào)。成功接收到客戶端連接請(qǐng)求后,通過IP地址與端口號(hào)進(jìn)行連接,連接成功之后程序提取M-JPEG格式下RTP封包中的單一JPEG幀,計(jì)算單一JPEG幀的長(zhǎng)度,并保存在Length中。之后對(duì)單一JPEG幀的長(zhǎng)度進(jìn)行判斷,如果長(zhǎng)度小于RTP包長(zhǎng),則進(jìn)行單一JPEG幀的RTP封包;如果長(zhǎng)度大于RTP包長(zhǎng),則進(jìn)行JPEG幀的分片模式RTP封包。完成JPEG視頻幀的RTP封包之后,程序?qū)Ψ庋b好的RTP數(shù)據(jù)包進(jìn)行連續(xù)的UDP協(xié)議形式的網(wǎng)絡(luò)發(fā)送,直到所有數(shù)據(jù)發(fā)送完成。
圖4 客戶端軟件架構(gòu)
3.1 視頻解碼模塊
對(duì)于Android移動(dòng)終端的解碼,無論是通過硬件方式還是軟件方式,都很少有支持實(shí)時(shí)H.264格式視頻的解碼器[8]。因此為了完成系統(tǒng)的解碼工作,首先需要在移動(dòng)終端移植一個(gè)FFmpeg解碼庫(kù),然后再利用JNI (Java Native Interface)調(diào)用解碼動(dòng)態(tài)庫(kù)庫(kù)對(duì)視頻數(shù)據(jù)進(jìn)行解碼處理。目前,開源的H.264標(biāo)準(zhǔn)解碼庫(kù)主要有:JM decoder、T264 decoder、X264 decoder、FFmpeg libavcodec、Intel IPP simple player。其中FFmpeg庫(kù)的解碼速度最快,且兼容性和實(shí)時(shí)性也較好,因此本系統(tǒng)選擇移植FFmpeg庫(kù)作為客戶端解碼器。FFmpeg支持MPEG、FLV等40多種編碼以及AVI、MPEG等90多種解碼。移動(dòng)終端的硬件資源有限,而且客戶端視頻解碼也只需要H.264格式基礎(chǔ)檔次的解碼庫(kù),因此本文從FFmpeg解碼庫(kù)中精簡(jiǎn)出H.264解碼部進(jìn)行編譯,然后將解碼庫(kù)移植到客戶端,如圖5。
圖5 解碼庫(kù)移植流程
3.2 播放實(shí)現(xiàn)
本系統(tǒng)的視頻播放采用RGB565格式,但解碼后的數(shù)據(jù)為YUV格式,所以在播放前需要進(jìn)行YUV格式到RGB格式的轉(zhuǎn)換,轉(zhuǎn)換后的圖像數(shù)據(jù)存入播放緩沖區(qū)中。然后通過設(shè)置定時(shí)器(Time類)的方式,使播放線程以固定的頻率從播放緩沖區(qū)中取出圖像,并利用on Draw()方法將圖像上屏顯示。最后調(diào)用canvas.draw Bitmap()函數(shù),自動(dòng)完成屏幕的刷新。
本系統(tǒng)在實(shí)際應(yīng)用中使用??低暪尽⒋笕A公司的球形攝像機(jī),客戶端采用三部Android 智能手機(jī)。
(1)用戶登錄
客戶端的功能測(cè)試首先測(cè)試用戶登錄功能,輸入正確的服務(wù)器的IP地址、用戶名和密碼之后點(diǎn)擊登錄按鈕,移動(dòng)設(shè)備則向服務(wù)器發(fā)出登錄請(qǐng)求的相關(guān)信息,若用戶認(rèn)證通過,則登錄成功。當(dāng)輸入的用戶名不存在或密碼錯(cuò)誤時(shí),用戶認(rèn)證不能通過。登陸成功后,如圖6。
圖6 用戶登錄界面
(2)監(jiān)控畫面
選擇攝像機(jī)后進(jìn)入監(jiān)控畫面,如圖7。屏幕中部為監(jiān)控畫面,畫面兩邊顯示一些實(shí)時(shí)的視頻參數(shù)以及播放控制按鍵。
圖7 監(jiān)控畫面
圖8 云臺(tái)控制
(3)云臺(tái)控制
點(diǎn)擊屏幕右上方的菜單,進(jìn)行云臺(tái)控制測(cè)試。監(jiān)控畫面下方設(shè)置了8個(gè)云臺(tái)控制按鈕,用于實(shí)現(xiàn)移動(dòng)終端的遠(yuǎn)程云臺(tái)控制功能,測(cè)試過程中按住按鈕,攝像頭則會(huì)做出相應(yīng)移動(dòng),松開按鈕則停止移動(dòng),如圖8。
隨著智能城市、智能家居等應(yīng)用的推廣,人們對(duì)于視頻監(jiān)控的關(guān)注和要求越來越高,目前廣泛使用的二、三代監(jiān)控系統(tǒng)在布線成本和靈活性方面的不足已經(jīng)體現(xiàn)了出來,因此移動(dòng)視頻監(jiān)控系統(tǒng)具有很好的發(fā)展條件和市場(chǎng)價(jià)值。本文研究了遠(yuǎn)程視頻監(jiān)控系統(tǒng)的視頻信號(hào)采集、視頻壓縮、與視頻數(shù)據(jù)的無線網(wǎng)絡(luò)傳輸,并對(duì)視頻數(shù)據(jù)在Android平臺(tái)的解析與播放做了深入研究。由于系統(tǒng)涉及的技術(shù)眾多,加上水平和時(shí)間限制,因此,在功能拓展、性能優(yōu)化、視頻編解碼上還有待改進(jìn),以提高系統(tǒng)的實(shí)用性和整體性能。
1李向軍,張小菲,王書陣.一種基于Android平臺(tái)的移動(dòng)終端多媒體播放器的擴(kuò)展設(shè)計(jì)[J].微電子學(xué)與計(jì)算機(jī),2014,31(2):118-121
2胡顧飛,湯文兵,朱成亮.基于Android平臺(tái)的紋理映射分析與實(shí)現(xiàn)[J].中國(guó)新技術(shù)新產(chǎn)品,2011,(12):33
3梁篤國(guó),張艷霞,曹寧,等.網(wǎng)絡(luò)視頻監(jiān)控技術(shù)與智能應(yīng)用[M].北京:人民郵電出版社,2013
4楊建全,梁華,王成友.視頻監(jiān)控技術(shù)的發(fā)展與現(xiàn)狀[J].現(xiàn)代電子技術(shù).2006,29(21):84-88,91
5張賀.基于Android平臺(tái)的智能視頻監(jiān)控系統(tǒng)設(shè)計(jì)[D].成都:成都理工大學(xué),2015
6魏崇毓,張菲菲.基于Android平臺(tái)的視頻監(jiān)控系統(tǒng)設(shè)計(jì)[J].計(jì)算機(jī)工程,2012,(14):214-216
7裘英,王庫(kù).基于 RTP 協(xié)議的網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng)的實(shí)現(xiàn)[J].微計(jì)算機(jī)應(yīng)用,2006,(4):436-439
8龔虹瑞.基于Android的移動(dòng)視頻監(jiān)控[D].成都:西華大學(xué),2015
10.3969/j.issn.1006-6403.2016.07.002
2016-07-12)