《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 設(shè)計(jì)應(yīng)用 > 基于Android平臺的車載視頻智能監(jiān)控系統(tǒng)的研究
基于Android平臺的車載視頻智能監(jiān)控系統(tǒng)的研究
2016年電子技術(shù)應(yīng)用第6期
王 浩1,韓 敏1,董 杰2
1.大連理工大學(xué) 電子信息與電氣工程學(xué)部,遼寧 大連116024;2.大連工業(yè)大學(xué) 信息科學(xué)與工程學(xué)院,遼寧 大連116034
摘要: 針對傳統(tǒng)車載視頻監(jiān)控系統(tǒng)網(wǎng)絡(luò)資源利用率低、高清實(shí)時(shí)性能較差的問題,提出了一種基于Android平臺的車載視頻監(jiān)控解決方案,對系統(tǒng)中關(guān)鍵模塊作了重點(diǎn)研究。系統(tǒng)實(shí)現(xiàn)了P2P和C/S混合網(wǎng)絡(luò)架構(gòu)、多線程機(jī)制、丟包和包亂序處理,從而提高了實(shí)時(shí)監(jiān)控性能。經(jīng)實(shí)驗(yàn)證明,該系統(tǒng)實(shí)現(xiàn)了針對車輛的實(shí)時(shí)高效的監(jiān)控,利于向智能交通領(lǐng)域中推廣。
關(guān)鍵詞: P2P 心跳機(jī)制 NAT ffmpeg 多線程
中圖分類號: TP277
文獻(xiàn)標(biāo)識碼: A
DOI:10.16157/j.issn.0258-7998.2016.06.033
中文引用格式: 王浩,韓敏,董杰. 基于Android平臺的車載視頻智能監(jiān)控系統(tǒng)的研究[J].電子技術(shù)應(yīng)用,2016,42(6):121-123,127.
英文引用格式: Wang Hao,Han Min,Dong Jie. Research of vehicle intelligent video surveillance system based on Android platform[J].Application of Electronic Technique,2016,42(6):121-123,127.
Research of vehicle intelligent video surveillance system based on Android platform
Wang Hao1,Han Min1,Dong Jie2
1.Faculty of Electronic Information and Electrical Engineering,Dalian University of Technology,Dalian 116024,China; 2.School of Information Science and Engineering,Dalian Polytechnic University,Dalian 116034,China
Abstract: For solving the problems of low network utilization and poor realtime performance in traditional vehicle video surveillance, this paper proposes the solution of vehicle video surveillance based on Android platform, key modules of this system are researched in detail. P2P and C/S mixed architecture, multi-thread mechanism, processing of package loss and reordering are used to improve the real-time monitoring performance.The experimental results show the system can real-time and efficiently monitor the vehicles ,which conducive to expand to the intelligent transportation.
Key words : P2P;heartbeat mechanism;NAT;FFmpeg;multithread

0 引言

    車載視頻智能監(jiān)控是智能交通領(lǐng)域的一個(gè)重要研究課題,它能方便用戶實(shí)時(shí)、直觀地監(jiān)控車輛安全情況。傳統(tǒng)的車載視頻監(jiān)控系統(tǒng)一般采用固定的PC監(jiān)控方式,因而需要在指定的地點(diǎn),并且在有專用網(wǎng)絡(luò)設(shè)備支持的情況下才能對目標(biāo)現(xiàn)場進(jìn)行監(jiān)控,這大大限制了監(jiān)控系統(tǒng)的應(yīng)用范圍和靈活性[1]。近些年隨著移動(dòng)互聯(lián)網(wǎng)的普及,市面上也出現(xiàn)了移動(dòng)車載視頻監(jiān)控的解決方案,但是又存在視頻畫質(zhì)不理想、整體用戶體驗(yàn)較差的問題,同時(shí)車輛的移動(dòng)性也對網(wǎng)絡(luò)資源利用率提出了更高的要求。

    本文在Android平臺下提出了車載視頻智能監(jiān)控的解決方案。利用該方案,通過實(shí)現(xiàn)NAT穿透和P2P、C/S混合網(wǎng)絡(luò)架構(gòu),提高了網(wǎng)絡(luò)健壯性和資源利用率;通過設(shè)置緩沖區(qū)和調(diào)用FFmpeg多媒體解碼框架,提高了高清實(shí)時(shí)監(jiān)控性能。實(shí)踐表明該方案能適應(yīng)不同網(wǎng)絡(luò)條件,滿足了實(shí)際項(xiàng)目播放需求,具有良好的用戶體驗(yàn)。

1 系統(tǒng)整體結(jié)構(gòu)

    本系統(tǒng)是基于Android平臺開發(fā)的車載視頻監(jiān)控系統(tǒng)。該系統(tǒng)主要由三部分組成,即車載端、視頻傳輸網(wǎng)絡(luò)和監(jiān)控端。系統(tǒng)整體框架如圖1所示。

jsj2-t1.gif

    車載端基于Android平臺開發(fā),首先車載端會采集視頻數(shù)據(jù),然后對采集的數(shù)據(jù)進(jìn)行H.264編碼和實(shí)時(shí)傳輸協(xié)議(Real-time Transport Protocol,RTP)封包處理,最后將處理后的視頻數(shù)據(jù)通過網(wǎng)絡(luò)傳輸?shù)奖O(jiān)控端;視頻傳輸網(wǎng)絡(luò)基于點(diǎn)對點(diǎn)網(wǎng)絡(luò)(peer-to-peer,P2P)和客戶機(jī)、服務(wù)器結(jié)構(gòu)(Client/Server,C/S)的混合網(wǎng)絡(luò)架構(gòu),其傳輸方式會優(yōu)先選擇P2P連接,當(dāng)P2P連接無法對網(wǎng)絡(luò)地址轉(zhuǎn)換(Network Address Translation,NAT)成功穿透而連接失敗后,再通過中轉(zhuǎn)服務(wù)器進(jìn)行數(shù)據(jù)中轉(zhuǎn),有效節(jié)省網(wǎng)絡(luò)帶寬,提高網(wǎng)絡(luò)資源利用率;監(jiān)控端基于Android平臺開發(fā),首先監(jiān)控端在異步線程接收到網(wǎng)絡(luò)傳來的包數(shù)據(jù),并對這些數(shù)據(jù)進(jìn)行RTP解包和FFmpeg解碼,最后將解碼后得到的圖像通過ImageView實(shí)時(shí)更新顯示給監(jiān)控者。

2 系統(tǒng)實(shí)現(xiàn)原理

2.1 視頻車載端

2.1.1 視頻采集和編碼

    視頻采集過程中,預(yù)覽圖像會占用大量內(nèi)存,內(nèi)存占用過大會導(dǎo)致內(nèi)存溢出,嚴(yán)重時(shí)會造成程序崩潰,本系統(tǒng)通過Camera.PreviewCallback的onPreviewFrame回調(diào)函數(shù),實(shí)時(shí)截取每幀視頻流數(shù)據(jù),并以setPreviewCallbackWithBuffer(Camera.PreviewCallback)的方式使用上述回調(diào),提供一個(gè)字節(jié)數(shù)組作為緩沖區(qū),用于保存預(yù)覽圖像數(shù)據(jù),以有效管理預(yù)覽圖像時(shí)內(nèi)存的分配和銷毀。

    移動(dòng)網(wǎng)絡(luò)的帶寬有限,為了呈現(xiàn)高質(zhì)量的監(jiān)控畫面,需要實(shí)現(xiàn)高編碼壓縮比。H.264充分地利用了各種冗余來達(dá)到高效的數(shù)據(jù)壓縮比率,同時(shí)還具備高質(zhì)量流通的圖形,采用高度負(fù)責(zé)的算法,使其成為當(dāng)前在低碼率下壓縮比率最高的視頻編碼標(biāo)準(zhǔn)[2]。所以本系統(tǒng)通過H.264技術(shù)來進(jìn)行數(shù)據(jù)編碼。

2.1.2 視頻封包

    數(shù)據(jù)包到達(dá)時(shí)間隨機(jī)性是視頻數(shù)據(jù)傳輸中很關(guān)鍵的問題,本系統(tǒng)采用RTP[3]協(xié)議來負(fù)責(zé)視頻數(shù)據(jù)封包,利用數(shù)據(jù)包的時(shí)間戳、發(fā)送序號等字段來控制數(shù)據(jù)流的傳輸。

    但如果RTP包大于最大傳輸單元(Maximum Transmission Unit,MTU),會導(dǎo)致底層協(xié)議任意拆包,這會使RTP包被分割后丟失的可能性增大,以致影響接收端數(shù)據(jù)的恢復(fù),因而一般采用對網(wǎng)絡(luò)抽象層(Network Abstract Layer,NAL)單元進(jìn)行分類處理,共有單一NAL單元模式、組合封包模式和分片封包模式3種封包策略。

    本系統(tǒng)因不存在音頻數(shù)據(jù),而H.264 NAL單元都含有較大數(shù)據(jù)量,故沒必要采用組合封包模式。本系統(tǒng)將RTP包長設(shè)定為1 024 B,將超過1 024 B的NAL單元采用分片封包模式,不超過的采用單一NAL單元模式。

2.2 視頻傳輸網(wǎng)絡(luò)

    視頻傳輸網(wǎng)絡(luò)在監(jiān)控系統(tǒng)中占有至關(guān)重要的地位,視頻數(shù)據(jù)傳輸質(zhì)量的好壞直接影響了監(jiān)控系統(tǒng)的使用效果。本系統(tǒng)采用面向無連接的用戶數(shù)據(jù)報(bào)協(xié)議(User Datagram Protocol,UDP)來負(fù)責(zé)視頻傳輸工作,并在傳統(tǒng)C/S模式的基礎(chǔ)上混合P2P傳輸技術(shù),減少網(wǎng)絡(luò)帶寬的消耗,提高網(wǎng)絡(luò)資源利用率。網(wǎng)絡(luò)傳輸?shù)暮喴ぷ髁鞒倘鐖D2所示。

jsj2-t2.gif

2.2.1 心跳機(jī)制

    系統(tǒng)網(wǎng)絡(luò)傳輸?shù)臄?shù)據(jù)發(fā)送和接收都是通過SOCKET來進(jìn)行,但倘若此SOCKET是斷開狀態(tài),則在發(fā)送和接收數(shù)據(jù)時(shí)就不能保證數(shù)據(jù)能有效到達(dá),所以本系統(tǒng)通過搭建狀態(tài)服務(wù)器來管理各車載端和監(jiān)控端的在線狀態(tài)(即SOCKET連接狀態(tài))。狀態(tài)服務(wù)器會進(jìn)行如下操作:

    (1)啟動(dòng)新線程A1,監(jiān)聽端口4112,接收車載端每隔30 s發(fā)來的心跳包,處理心跳包中的JSON數(shù)據(jù)并更新內(nèi)存N2中車載端的狀態(tài)。

    (2)啟動(dòng)新線程A2,監(jiān)聽端口4113,接收監(jiān)控端每隔30 s發(fā)來的心跳包,處理心跳包中的JSON數(shù)據(jù)并更新內(nèi)存N1中監(jiān)控端的狀態(tài)。同步返回監(jiān)控端對應(yīng)的車載端的JSON格式的數(shù)據(jù)集合,以便監(jiān)控端在界面上更新車載端的狀態(tài)顯示。

    (3)啟動(dòng)新線程A3,每隔60 s執(zhí)行一次,循環(huán)N1中的監(jiān)控端和N2中的車載端,根據(jù)時(shí)間戳判斷監(jiān)控端或車載端是否已掉線,如掉線則更新對應(yīng)的內(nèi)存中的狀態(tài)。

2.2.2 NAT穿透

    在實(shí)際網(wǎng)絡(luò)環(huán)境下由于IPv4地址短缺,使得許多客戶機(jī)都是通過NAT技術(shù)來共用一個(gè)公網(wǎng)IP地址[4]。NAT隱藏了參與構(gòu)建P2P網(wǎng)絡(luò)的大量用戶節(jié)點(diǎn),使得NAT穿透往往是制約P2P成功連接的關(guān)鍵。

    NAT[5]可分成圓錐型NAT和對稱型NAT兩種類型。對于圓錐型NAT,本系統(tǒng)采用UDP對NAT的簡單穿越(simple traversal of UDP through NAT,STUN)方式能很好地解決UDP穿透問題,但因STUN方式對于對稱型 NAT不能提供有效的外部IP地址和端口號,所以無法成功穿透。

    針對無法穿透對稱型NAT的缺陷,本系統(tǒng)采用基于端口預(yù)測的方法來解決,能夠在較多的場合盡可能地建立P2P連接。本系統(tǒng)對項(xiàng)目中存在的對稱型 NAT網(wǎng)絡(luò)環(huán)境進(jìn)行分析發(fā)現(xiàn),對稱型 NAT對于從內(nèi)部網(wǎng)絡(luò)依次接收到的新連接,分配的輸出端口大致有兩種情況:

  依照空閑端口按序連續(xù)分配的情況。因?yàn)樵诖┩高^程中,車載端兩次數(shù)據(jù)的發(fā)送間隔不會很長,NAT為其分配的新輸出端口號相對于其原端口號的偏移量是一個(gè)較小范圍內(nèi)的正數(shù),因此系統(tǒng)可以在監(jiān)控端執(zhí)行端口探測,當(dāng)收到車載端對該UDP報(bào)文的回復(fù)就意味著穿透成功。

    在一定端口范圍內(nèi)隨機(jī)分配的情況。雖然車載端NAT兩次輸出端口號間的偏移量具有隨機(jī)性,并且不同的設(shè)備和網(wǎng)絡(luò)環(huán)境也會產(chǎn)生較大的區(qū)別,但實(shí)際上每次分配的端口號之間都會具有一定的函數(shù)關(guān)系或統(tǒng)計(jì)上的關(guān)聯(lián)性。因此,可以通過研究其分布特性來預(yù)測,實(shí)施試探性穿透。

2.3 視頻監(jiān)控端

2.3.1 視頻解包

    由于網(wǎng)絡(luò)傳輸時(shí)受到MTU的限制,因此視頻數(shù)據(jù)在發(fā)送時(shí)被分割成一個(gè)個(gè)獨(dú)立的數(shù)據(jù)包進(jìn)行傳輸。監(jiān)控端收到這些數(shù)據(jù)包后,必須按一定規(guī)則將這些包重新組合還原,然后才能進(jìn)行解碼播放。但當(dāng)網(wǎng)絡(luò)傳輸不穩(wěn)定時(shí),系統(tǒng)易出現(xiàn)包亂序和丟包現(xiàn)象。

    對于包亂序處理,當(dāng)監(jiān)控端收到的RTP數(shù)據(jù)包沒有正確排序時(shí),本系統(tǒng)就需要按照包序列號進(jìn)行重排。本系統(tǒng)在內(nèi)存中建立雙向鏈表來充當(dāng)緩沖區(qū),當(dāng)接收到數(shù)據(jù)包后就按包頭的序列號插入至對應(yīng)位置。比如,接收到一個(gè)序列號SN=3的RTP包,就從鏈表尾開始搜索并插入到2、4節(jié)點(diǎn)中間。本系統(tǒng)緩沖區(qū)的最大長度設(shè)置為30時(shí),能起到較好的緩沖效果,同時(shí)也能避免對設(shè)備內(nèi)存造成較大負(fù)擔(dān)。

    對于丟包處理,在H.264編碼標(biāo)準(zhǔn)中,共定義了I幀、P幀、B幀3種幀。I幀為關(guān)鍵幀,存放完整的數(shù)據(jù);而P、B幀是輔助幀,存放運(yùn)動(dòng)矢量或邊緣信息,需要對關(guān)鍵幀進(jìn)行參考。所以,本系統(tǒng)在數(shù)據(jù)傳輸過程中,如關(guān)鍵幀數(shù)據(jù)丟失,對其他的P幀和B幀數(shù)據(jù)都會造成影響,因此必須將關(guān)鍵幀連同其他相關(guān)幀全部舍棄。如果輔助幀數(shù)據(jù)丟失,只會對當(dāng)前幀數(shù)據(jù)產(chǎn)生影響,則只需將當(dāng)前幀直接舍棄。

2.3.2 視頻解碼和播放

    Android自帶的Media Player支持的媒體格式僅局限于OpenCore中所支持的媒體格式。FFmpeg是一種包含音視頻錄制、轉(zhuǎn)換以及編解碼等功能的開源解決方案,其支持包括H.264在內(nèi)的多種編碼格式的編解碼,具有較高的執(zhí)行效率。

    系統(tǒng)采用交叉編譯的方式將FFmpeg引入到Android中來實(shí)現(xiàn)H.264解碼,F(xiàn)Fmpeg編譯模塊編譯生成libffmpeg.so文件之后,供Android系統(tǒng)的Java本地接口(Java Native Interface,JNI)層調(diào)用。

    libffmpeg.so文件的調(diào)用較為復(fù)雜,本系統(tǒng)采用重新編譯生成一個(gè)so文件進(jìn)行調(diào)用。這個(gè)so文件包含的是jni方法,這些方法能通過Java層進(jìn)行調(diào)用,而方法中用到的函數(shù)則來自于libffmpeg.so文件。

    首先需要編輯android.mk文件,文件具體內(nèi)容如下:

    LOCAL_PATH:=$(call my-dir)

    include $(CLEAR_VARS)

    LOCAL_LDLIBS := -lffmpeg-llog

    LOCAL_MODULE := ffmpegutilDecode

    #LOCAL_SHARED_LIBRARIES := ffmpeg

    LOCAL_SRC_FILES := com_act1_H264.c

    LOCAL_C_INCLUDES:=/cygdrive/d/android/android-ndk-r8b/ffmpeg/jni/include $(BUILD_SHARED_LIBRARY)

    成功編譯android.mk文件后需編輯com_act1_H264.c文件,此文件包含本地定義的方法,這些方法調(diào)用ffmpeg解碼庫函數(shù),可解碼H.264格式的視頻數(shù)據(jù)。

  com_act1_H264.c文件編輯成功后,就可執(zhí)行ndk-build語句進(jìn)行編譯,編譯完將生成libffmpegutilDecode.so庫文件。

    在項(xiàng)目中通過如下語句加載libffmpegutilDecode.so庫文件。

    static{

        System.loadLibrary("ffmpegutilDecode");

    }

    libffmpegutilDecode.so庫文件載入完畢后,就能通過調(diào)用本地定義的方法解碼視頻數(shù)據(jù)。本地定義解碼函數(shù)如下所示:

    public native boolean InitCodec(Surface surface);

    public native byte[] FFInputFrame(byte[] data,int len);

    public native void DeleteCodec();

    public native void SetBitmap(Bitmap bitmap,byte[]data,int len);jsj2-t3.gif

    在解碼成功后生成的Bitmap需要實(shí)時(shí)顯示,所以ImageView作為圖像容器類必須進(jìn)行實(shí)時(shí)更新。如果實(shí)時(shí)更新UI界面的大量工作放在主線程進(jìn)行,可能會造成線程阻塞、視頻卡頓等問題。因此本系統(tǒng)另啟子線程來完成數(shù)據(jù)的接收和解碼等耗時(shí)操作。視頻解碼播放流程如圖3所示。

    目前,上海某公司已采用此系統(tǒng)進(jìn)行試用,監(jiān)控端顯示界面如圖4所示。

3 系統(tǒng)性能測試

    本系統(tǒng)針對100M帶寬WiFi、4G、3G這3種不同網(wǎng)絡(luò)條件進(jìn)行了系統(tǒng)性能的綜合測試,監(jiān)控端視頻圖像分辨率為640×480,每種網(wǎng)絡(luò)條件分別測試20次,計(jì)算平均值。以Android監(jiān)控端統(tǒng)計(jì)的網(wǎng)絡(luò)時(shí)延、抖動(dòng)、丟包率和整體P2P連通率作為系統(tǒng)性能的考量依據(jù)。WiFi、4G、3G下系統(tǒng)測試結(jié)果如表1所示。

jsj2-t4.gif

jsj2-b1.gif

    從表1可以看出,該系統(tǒng)在3種網(wǎng)絡(luò)條件下都能實(shí)現(xiàn)較低的時(shí)延、抖動(dòng)、丟包率和較高P2P連通率,能滿足監(jiān)控的高清實(shí)時(shí)性能需求。

4 結(jié)論

    移動(dòng)互聯(lián)網(wǎng)時(shí)代的到來為車載視頻智能監(jiān)控系統(tǒng)在智能交通領(lǐng)域的發(fā)展升級帶來了新的機(jī)遇。針對傳統(tǒng)車載監(jiān)控系統(tǒng)存在的高清實(shí)時(shí)性能較差、網(wǎng)絡(luò)資源利用率低的問題,本文提出一種基于Android平臺的車載視頻智能監(jiān)控解決方案,采用P2P和C/S混合網(wǎng)絡(luò)架構(gòu),并利用多線程分別解決視頻的接收、解碼,通過緩沖機(jī)制解決視頻卡頓問題。經(jīng)過實(shí)驗(yàn)測試驗(yàn)證,本系統(tǒng)能適應(yīng)不同網(wǎng)絡(luò)條件,能實(shí)現(xiàn)以較滿意的網(wǎng)絡(luò)資源利用率和視頻監(jiān)控質(zhì)量對車輛進(jìn)行實(shí)時(shí)監(jiān)控。

參考文獻(xiàn)

[1] 李佳毅,徐曉輝,蘇彥莽,等.基于Android平臺的智能溫室視頻無線監(jiān)控系統(tǒng)[J].農(nóng)機(jī)化研究,2013,35(8):188-191.

[2] 羅歡,謝云,李丕杉.基于Android智能電視的視頻監(jiān)控的設(shè)計(jì)[J].電視技術(shù),2013(22):85-87.

[3] PERKINS C.Rtp:Audio and video for the internet[M].Addison-Wesley Professional,2003.

[4] SRISURENSH P,NETWORKS J,EGEVANG K.Traditional IP network address translator(traditional NAT),RFC 3022[Z].IETF,2001.

[5] EGEVANG K,F(xiàn)RANCIS P.The IP network address translator(NAT),RFC1631[Z].IETF,1996.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。