蔣達央
(常州信息職業技術學院信息中心 江蘇常州 213164)
?
基于Android平臺的高清監控視頻系統的優化設計
蔣達央
(常州信息職業技術學院信息中心 江蘇常州 213164)
基于Android平臺的視頻監控客戶端作為視頻監控系統的后端應用,依托無線網絡與監控系統存儲和服務器通信,實時接收無線視頻數據包并播放視頻。由于無線視頻監控系統是一個大數據量的傳輸系統,易受無線網絡帶寬和穩定性因素影響。為提高高清監控視頻在移動客戶端的播放效果,本研究分析了高清視頻播放的特性,對視頻的信號傳輸、編解碼和數據驗證方面,采用了基于Android平臺的優化設計方案,為用戶隨時隨地監看高清監控視頻提供了一個較好的技術解決方案。
視頻監控; Android; H.264
隨著信息技術的快速發展,智慧校園建設成為教育行業新一輪信息化建設目標。傳統視頻監控管理手段已無法滿足現代化校園管理的需求。在智慧校園的背景下,大量高清網絡數字視頻監控攝像機被安裝在校園的各個角落。隨著無線通信技術和多媒體技術的發展,進一步推動了傳統視頻監控管理手段從有線邁向了無線領域。
無線網絡視頻監控系統主要由四個部分組成,分別是攝像機、有線或無線網絡、視頻服務器和移動應用客戶端。這是結合音視頻處理、網絡通信、數據存儲等多種信息技術的綜合體。基于Android平臺的移動視頻監控系統相比PC機桌面式終端的監控系統,極大地擴展了監控應用的靈活性與范圍,并且充分調用各個模塊的硬件性能優勢,進而在降低系統通信開銷的同時提高了應用的拓展性。
無線視頻播放是移動高清視頻監控系統的主要功能,它是基于Android平臺移動監控終端的核心技術。目前在視頻監控領域主要采用VLC等開源技術,實現視頻封裝、編解碼和播放等功能,VLC中包含live555和ffmpeg兩個重要的類庫。其中,Live555主要使用RTSP協議來支持各種編碼格式的音視頻數據,進行流化、接收和處理等[1]。而ffmpeg擁有音頻/視頻編解碼庫libavcodec,它為流化的音視頻數據提供轉換和編解碼等的完整解決方案。經過ffmpeg解碼完成之后,使用VLC在移動客戶端視頻監控系統程序界面上進行視頻播放。
當live555將接收到的視頻數據包選擇網絡用戶數據報協議(UDP)作為視頻流的傳輸協議時,因UDP協議是基于非連接的、只負責發送不負責檢查發送結果的不可靠協議,這種不可靠性使得live555數據包進行視頻傳輸時產生數據幀丟失現象[2]。而當live555使用TCP協議實施數據傳輸時,由于TCP協議是基于連接的、按順序接收的可靠協議,這種可靠協議若遇到過大的網絡數據流量,很容易發生節點路由設備因數據堵塞而出現緩沖區溢出現象,從而會使視頻數據包發生丟失現象。以上兩種傳輸模式都會造成視頻播放出現馬賽克、花屏等影響播放效果的現象。
2.1 視頻編譯環境優化設置
本優化設計主要基于Libvlcjni.so庫進行設計。在Android視頻播放應用程序開發中,libVLC給Android應用程序的接口庫提供了一個功能強大的Libvlcjni.so庫。在多個網絡協議支持層面,libvlcjni.so開發庫支持RTP、HTTP、RTSP等多種網絡應用協議,是一個成熟穩定的開源播放器開發庫。
客戶端視頻播放器通過libVLC提供的libvlcjni.so中的JNI接口函數來實現高清監控視頻控制和播放。在實際研究測試中,由于VLC項目對LINUX平臺的支持最好,因此首先需要依托LINUX平臺來編譯VLC,并從中下載獲取libvlcjni.so庫。
在編譯之前,首先需要搭建針對Android平臺的軟件編譯環境,包括:AndroidSDK、NDK、JDK等一些列開發配置工具。經過測試,發現在LINUX操作系統下的Ubuntu15.10環境中交叉編譯VLC for Android獲取libvlcjni.so庫效率較高,具體設計如下:
編譯宿主主機系統:Ubuntu 16.04 LTS;
Android原生開發包NDK版本:android-ndk-r10;
Android軟件開發包SDK版本:android-sdk-22;
Java開發包JDK版本:jdk-1.8.0_65;
VLC for Android的編譯環境搭建完成后,進入根目錄,使用shell腳本“./compile.sh”開始編譯實施[3]。在項目環境的編譯過程中,shell腳本文件會自動從網絡下載基于的源代碼。VLC作為具備多種格式音視頻解碼器的多媒體播放器,能作為基于unicast或 multicast設計的流媒體服務器在IPv4或 IPv6的高速有線無線網絡環境下使用。系統編譯完成后會在主文件夾下的libs文件夾中生成重要的libvlcjni.so庫和其他相關的接口類庫,此時可將整個libs文件夾拷貝到Android客戶端項目文件中,那么在后期的項目程序開發過程中便可調用libvlcjni.so庫,實現移動視頻播放功能的開發。
2.2 優化視頻播放器的設計
libVLC作為VLC for Android提供給用戶二次開發所封裝的接口庫[4]。它封裝了復雜的VLC架構,在開發過程中,只需要將這些類和接口函數包含到工程項目中,就可直接調用預置的、封裝好的類和函數。具體過程如下:
第一步:聲明對象。首先聲明一個IVideoPlayer對象m_videoPlayer,它代表視頻播放器對象。接著聲明一個libVLC對象m_libVLC,視頻播放、暫停等操作都由它來承擔。
IVideoplayer m_videoplayer;
LibVLC m_LibVLC;
第二步:創建LibVLC視頻播放器實例。首先利用已聲明的m_libVLC對象調用其中的getinstance()函數獲取到一個實例。然后利用m_libVLC調用attachSurface()函數來綁定播放器m_IVideoPlayer和視頻播放窗口視圖s_View。
m_libVLC=LibVLC. getinstance();
m_libVLC. attachSurface(s_ View, m_VideoPlayer);
第三步:創建視頻播放表。首先利用MediaList創建一個列表實例m_List,然后將網絡視頻地址添加到m_List實例中,該地址連接著視頻服務器的視頻源,等待用戶點擊鏈接地址的訪問。
MediaList m_List=m_LibVLC.getmediaList();
m_List.add(new media(m_Libvlc,libVLC.PathToURl(Url),false);
第四步:實現視頻播放功能。利用m_libvlc對象通過調用playIndex()函數來解析播放列表中的視頻鏈接地址。
m_libVLC.playIndex(0);
第五步:實現視頻播放器停止播放功能。實現這個功能的同時要完成三項任務。首先需要通過m_libvlc對象調用Stop()函數實現視頻播放的停止,然后利用m_libvlc對象的detachSurface()函數來解除s_View和m_LibVLC兩者之間的鏈接綁定,最后使用destroy()函數來釋放對象占用的資源,并銷毀m_libVLC對象。
m_libVLC.stop();
m_libVLC.detachSurface();
m_libVLC.destroy();
2.3 獲取H.264視頻數據設計
在高清視頻監控領域目前主要使用H.264這種視頻編碼標準。基于H.264的視頻流幀結構序列由I、B、P三部分組成。在視頻數據中,視頻都是由若干個順序圖像組成。在H.264序列圖像里的第一個圖像都由I幀圖像組成,也被稱為IDR圖像[5]。I幀圖像是圖像解碼的核心句法元素,I幀可直接解碼,一旦發生錯誤或丟失,該視頻序列的后續圖像信息幾乎不可能再被正確解碼出來。而P幀數據的解碼則需要在I幀的基礎上。當用戶觀看視頻時,通過移動終端點擊URL地址,VLC調用live555模塊展開H.264視頻流數據的獲取。H.264視頻數據獲取過程主要分為三個層次,RTP層、NAL層、VCL層。見圖1。

圖1 H.264視頻數據獲取層次
RTP視頻數據獲取層是基礎層。在這一層系統將通過RTP協議來傳輸H.264視頻,它對從H.264視頻中獲得的數據信息中剝離出每個網絡適配層單元,然后在每個單元前添加相應的起始碼:0x000001,用來指示一個 NALU的起始和終止位置。最后將包含RTP協議的起始碼和網絡適配單元數據包發送出去。
NAL視頻數據抽取層是中間層。在這一層基礎層傳輸來的數據包解析為NAL頭、RBSP原始字節序列負荷兩部分,對NAL數據包頭實施解析判斷,并做出兩種處理方式。第一判斷是否有特殊字符標記,若有錯誤則對數據包進行拋棄處理,若正確則將NAL數據包送到VCL視頻編碼層。在做完這個判斷后,系統自動釋放數據鏈表所占用的內存資源,并對下一個RTP數據包的起始編碼更新,以實現前后數據的連接。
VCL視頻數據編碼層處于最頂層,主要采用運動補償預測,變換編碼和熵編碼等一系列手段對數據重新編碼、壓縮、封裝,使視頻內容得以更高效地傳輸、播放,以確保送到客戶端解碼器端的網絡適配單元符合標準的順序。
2.4 建立緩沖驗證機制
視頻幀數據緩沖驗證機制工作建立主要是為了消除網絡狀況不佳或其他原因而引起的RTP數據包被動丟失和因延時時間過長而引起的數據主動丟棄所帶來的H.264視頻解碼錯誤。H.264視頻幀緩沖驗證機制運行處于RTP層與NAL層工作時序之間,基本設計思想如下:首先在數據獲取層和數據解析層之間建立一個H.264視頻幀數據緩沖驗證機制層。然后從RTP數據層中獲取一個完整視頻幀所有信息的RTP數據包,并把RTP數據包指針存儲在緩沖層的一個隊列中。接著利用NAL包頭中的結束標志位來定位一個視頻幀結束位置。最后對緩沖層中視頻幀數據進行前后序列號驗證,如果前后幀序列號連續且完整,則說明RTP數據正確,如果序列號有錯誤或不連續,則說明這一視頻幀信息不完整或有錯誤在其中。為了避免錯誤數據被VLC送到ffmpeg進行視頻解碼,該驗證機制有效防止了解碼錯誤的擴散,對在下一個I幀到來之前的視頻幀采用丟棄策略。
對于以上的優化設計策略的合理性和實際使用效果,實驗采用了模擬網絡丟包測試,即在視頻數據每隔500個數據包傳輸完成后,人工丟棄一個數據包的策略。在實驗過程中采用對比法利用同一視頻在“未經修改的VLC播放器”和“優化后的VLC播放器”中進行播放效果測試,測試視頻數據分為兩種,第一種為碼率上限1 024 Kbit/s,分辨率為720 P,測試結果如圖2所示;第二種為碼率上限2 048 Kbit/s,分辨率為1 080 P,測試結果如圖3所示。

b) 未經優化的視頻播放

a) 經過優化后的視頻播放

b) 未經優化的視頻播放
從上面兩組實驗測試效果圖可以看出,未經優化的視頻播放器在播放視頻時由于原始視頻數據在傳輸時發生了丟包錯誤,最終出現了因視頻幀數據信息不完整而無法正確解碼所產生的馬賽克、亮斑、雜色等影響觀看效果圖像,這一現象尤其是在暗部區域和邊緣區域表現更為明顯。而優化后的視頻播放器由于系統采取了一系列合理的優化處理方法,使得視頻播放器不會接收錯誤數據包并實施解碼,因而播放出來的視頻就沒有出現花屏和馬賽克等現象。因此,從本實驗數據可以得出:基于Android平臺的高清監控視頻系統的優化設計對于因數據傳輸丟包、編解碼誤差、網絡延時時間過長等引起的錯誤視頻數據能夠有效處理,保證了播放內容的清晰度。
在Android平臺上觀看高清監控視頻,由于受4G移動無線網絡帶寬和網絡穩定性方面的限制,要在有限的網絡條件下提升視頻的可視效果,則必須采用一定的視頻優化播放技術。本次研究從基礎環境配置到數據解碼重組策略均實現了一定的優化設計,在一定程度上解決了網絡視頻因丟包和延時帶來的視頻播放不清晰的問題,為基于Android平臺的移動客戶端在高清視頻監控應用領域提供了一種解決方法。
[1] 李宗辰,朱秀昌.基于VLC的Android多路視頻監控系統[J].現代電子技術,2013(24):63-66.
[2] 李校林,劉海波,張杰,等.RTP/RTCP,RTSP在無線視頻監控系統的設計與實現[J].電視技術,2011(19):89-92.
[3] 李校林,劉利權,張杰.基于RTP的H.264視頻流實時打包傳輸的研究[J].計算機工程與科學,2012(5):168-171.
[4] 陳建明.Android平臺的VLC播放器實現機制研究[J].單片機與嵌入式系統應用,2015(5):32-34.
[5] 陳鋒鋒.基于RTSP的流煤體傳輸系統的應用開發[D].南京:南京郵電大學,2013:23-35.
[責任編輯:李娟]
The Optimal Design of HD Video System Based on Android Platform
JIANG Dayang
(Information Center, Changzhou College of Information Technology, Changzhou 213164, China)
The video monitoring system based on Android platform acts as a back-end application for video surveillance systems. It relies on the wireless network and the monitoring system storage to communicate with the server, and receives wireless video packets in real time and plays video. Since the wireless video surveillance system is a large amount of data transmission system, it is vulnerable to wireless network bandwidth and stability factors. In order to improve the HD monitor video in the mobile client playback effect, this paper analyzes the characteristics of video playback, adopts the optimal design based on the Android platform in aspects of video signal transmission, codec and data validation. This provides a better technical solution for users to monitor HD video surveillance anytime and anywhere.Key words:video monitoring; Android; H.264
2017-04-07
2016年江蘇省教育廳定向研究課題
蔣達央(1978-),男,工程師,碩士,主要研究方向:計算機科學技術、現代教育技術
TN 948.6
A
1672-2434(2017)03-0016-04