楊 軍
(西北政法大學,陜西西安,710122)
基于Android平臺的遠程視頻監控系統研究
楊 軍
(西北政法大學,陜西西安,710122)
隨著中國移動互聯網的快速發展,基于移動平臺的視頻監控憑借其獨特的優越性開始進入人們的視野。智能手機終端的普及為移動視頻監控提供了承載終端,3G通信網絡的發展為移動視頻監控數據的傳輸提供了保證,它們都為實現移動視頻監控提供了有利條件。本課題是橫向課題“大連****信號發射機遠程控制系統”中的遠程視頻監控子系統的重要組成部分,提出了一種基于Android移動設備的遠程監控系統解決方案。
Android平臺;RTP/RTCP;H.264;FFmpeg;視頻監控
視頻監控具有準確、直觀、及時和信息豐富等突出優點,已經被廣泛應用到各種場合。視頻監控系統主要負責將監控點實時采集的視頻流實時地傳輸給視頻監控中心,以便于視頻監控中心進行遠程視頻監控,對突發事件進行及時指揮處理。本課題是橫向課題“大連****信號發射機遠程控制系統”中的遠程視頻監控子系統的重要組成部分,提出了一種基于Android移動設備的遠程監控系統解決方案。系統分為三個子系統:Android移動設備端子系統,服務器端子系統和監控客戶端子系統。移動設備端進行視頻及地理信息采集,通過流媒體協議將經過編碼的H.264實時視頻數據發送到服務器端,服務器端進行存儲及解碼,監控客戶端完成視頻播放、視頻管理及輔助控制。
Android操作系統架構由高到低共分為4層,其分別是應用層、應用框架層、系統運行庫層及Linux內核層。在Android操作系統開始時已經集成了部分核心應用程序,如撥號應用,地圖應用,網絡瀏覽器應用等;應用框架層為Android應用提供API框架支持。應用程序的開發需要依賴系統的API框架,API使的程序開發架構設計得以簡化,提高了開發效率;應用程序框架層使用組件是系統運行庫提供組的,該層包含多個核心庫;Linux內核是硬件和軟件之間的抽象層,Linux內核為Android提供核心服務,包括網絡協議棧,進程管理,內存管理,驅動等。
視頻監控系統需要傳輸大量的實時視頻數據,由于網絡結構復雜、帶寬有限等硬件條件限制,監控系統必須綜合應用流媒體技術和視頻編解碼技術,才能滿足在復雜條件下實時監控等功能要求。本系統將采用壓縮率較高的H.264技術對視頻數據進行編碼,然后封裝到RTP / RTCP數據包中,利用UDP協議進行傳輸。
RTP/ RTCP是AVT工作組于1996年在RFC1889文檔中的第一次提出的。 2003年后,在修改的基礎上,提出的RFC3550。RTP主要是為端到端的實時流媒體數據流提供傳輸功能,它也支持多播和單播。但是,RTP協議本身只負責實時的數據傳輸功能,并不能提供任何的傳輸質量保證,也不具有擁塞控制功能。RTCP協議用于監控數據流的傳輸質量,為RTP數據提供控制功能,以及為系統提供擁塞控制。
如果一個應用程序啟動一次RTP會話,一般會同時占用兩個端口,一個端口提供給RTP協議,一個端口提供給RTCP協議。RTP協議自己不提供可靠的傳送機制即不能按順序傳送數據包,同時也不提供擁塞控制和流量控制,這些服務它必須依靠RTCP提供。
在RTP通信期間,各個參與者周期性的傳送RTCP包。RTCP包中通常包含己發送數據包的數量,己接收的數據包的數量等統計信息。因此,服務器端可以利用這些數據包中的信息進行動態地修改傳輸速率,甚至修改有效載荷類型。比如采用H.264壓縮標準進行實時視頻通信時,當接收端實時數據處理能力不夠或者接收端出現數據擁塞時,發送端就可以根據RTCP包中的統計信息進行判斷,適當調整量化步長并修改碼率,從而改善通信質量。RTP和RTCP配合使用,它們能以最小的開銷和最有效的反饋使傳輸效率最佳化,因而特別適合在Internet上傳送音視頻實時數據。
本系統軟件采用基于組件的設計思想。服務器端的監聽組件(監聽線程)時刻在監聽Android移動設備發來的連接請求,請求中包含移動設備的基本信息,比如:手機的IEMS、移動運營商名字、攝像頭是否支持調焦等信息。當監聽組件接收到一個網絡請求后,對請求信息進行預處理,同時啟動視頻數據通信組件。通信組件負責接收Android移動設備發來的所有數據,比如:視頻數據、GPS數據等信息,接收到數據后對數據進行處理,并將相關數據保存到數據庫中,同時通信組件支持向視頻監控客戶端提供實時視頻數據及視頻相關數據(GPS信息、協助控制信息)。視頻監控客戶端通過播放組件查看實時視頻,并通過控制組件進行協助控制,控制指令通過服務器間接傳輸到Android移動設備,Android移動設備響應后給出控制結果。具體的控制指令包含:攝像頭的焦距控制、視頻采集說明信息等提示命令。
系統共分為三個子系統:Android移動設備端子系統、服務器端子系統、監控客戶端子系統。Android移動設備端子系統包含數據采集模塊,控制模塊,通信模塊;服務器端子系統包含監聽模塊,通信模塊,存儲模塊。監控客戶端子系統包含視頻管理,視頻播放及遠程控制模塊。本系統的軟件系統結構如圖1所示。

圖1 軟件體系結構示意圖
Android移動設備端子系統主要包含視頻采集模塊,GPS信息采集模塊,數據傳輸模塊,遠程控制模塊等,模塊結構示意圖如圖2所示。

圖2 Android移動設備端模塊示意圖
Android 多媒體框架的核心是Open Core,它也被稱為PV(Packet Video)。他實現Android平臺的所有音視頻采集、播放的功能。在實際開發中我們并不會過多的研究Open Core的實現,Android提供了上層的Media API給開發人員使用,MediaPlayer和MediaRecorder。本系統將采用MediaRecorder進行視頻采集。
Android系統提供了android.telephony.TelephonyManager類,方便應用程序開發者獲取手機的基信息。TelephonyManager類包含了很多用于獲取與手機通訊狀態相關信息的get方法。其中包括手機用戶的信息、手機SIM的狀態信息、通信網絡的狀態信息等。程序中可以使用向對應get方法獲取這些數據。系統提供了如下方法獲取TelephonyManager類的對象:
Context.getSystemService(Context.TELEPHONY_SERVICE)
系統的通信組件是采用多線程技術,它獨立于視頻采集組件,即數據采集是一個線程,通信是一個線程。通過系統的總體結構設計可以看出,系統通信一共分了三個部分,分別是:視頻數據傳輸前的基本參數通信、視頻數據通信、視頻采集完成后輔助數據通信。第一部分和第三部分通信是基于TCP協議的通信,信息載體為XML,服務器端負責建立連接的是監聽主線程;視頻數據通信是基于UDP協議的,采用RTP進行封裝,通過RTCP進行傳輸控制,通信目標是服務器端為該客戶啟動的新的監聽進程。
服務器端子系統主要包含通信模塊、監聽模塊、數據解碼、數據存儲等模塊,如圖3所示。

圖3 服務器端模塊示意圖
當服務器端程序啟動后,同時啟動主監聽進程,從前面介紹的Android移動設備端與服務器端的網絡通信過程可以看出,每次視頻錄制上傳前后客戶端將與服務器端的主監聽進程進行兩次通信,分別完成不同的功能。數據傳輸組件主要完成接收移動設備端發來的視頻數據,對數據包進行解析,向上層提供每一幀的視頻數據。
系統的界面顯示和視頻播放部分是由JAVA實現的,但是為了滿足系統在解碼速度上的要求,系統在實現視頻解碼模塊移植時,采用的是JNI框架進行開發,解碼部分的底層代碼使用C語言開發。
①C語言實現關鍵函數
通過javah命令生成系統需要的.H文件,然后用C語言實現如下三個方法:
//初始化H.264解碼器
initDecoder(int t_width.int t_height)
unInitDecoder(int t_width.int t_height)
//對緩存區數據進行解碼
decoderNal(byte[] in,int in_size,byte[] out_data)
②生成dll文件,并在程序中調用
使用MingW工具的gcc命令編譯第二步中實現的方法,在JAVA類通過如下代碼調用C語言實現的函數:
static{System.loadLibrary("myH264.dll");}
③系統調用解碼程序。
監控客戶端系統主要包含視頻查詢、視頻播放、遠程控制三項主要功能,該系統采用JAVA語言,MVC架構,利用反射機制等技術實現。核心配置文件及JAVA類如下:
①config.xml:主要配置用戶界面將要使用的JFrame,JMenuBar,JMenu,JMenuItem,JButton,JPanel,JLabel,JTextField等控件的結構關系,用于在系統啟動時構造系統顯示界面。
②ButtonAction.java:該類中存在系統將要調用的各種業務方法,例如上面提到的showPrintWindow方法,唯一要求是所有方法是無參數方法。在這些方法里完成要實現的業務。
③SwingViewBase.java:該類中包含生成各種顯示組件的方法,如“public static void initJLabel(String name,String text)”、“public static void initJButton(String name,String text,String onclickFunc)”等工具方法。
④SwingView.java:該類主要定義了系統中用到的顯示控件的引用。
本課題提出了一種基于Android平臺遠程視頻監控系統設計方案。分析H.264視頻編碼標準和對FFmpeg項目中主要的結構體、函數、調用接口、特別是解碼程序進行了研究,以開源的FFmpeg提供的H.264解碼器為原型,并對FFmpeg解碼器進行裁剪優化,從中提取H.264解碼的核心部分,成功移植到JAVA平臺。
[1] 陳彩蓮.基于Android移動平臺的智能視頻監控系統設計[D].天津大學碩士學位論文,2011.
[2] Thomas Wiegand,Overview of the H.264/AVC Video Coding Standard[J].IEEE Transactions on Circuits and System for Video Technology.2003,13(7):560-576.
[3] Reto Meier.Professional Android 2 Application Development, 2010.
[4] Peter Jay Salzman.The Linux Kernel Module Programming Guide Version 1.1, 2001.
[5] 張璇.基于智能手機的流媒體播放及編解碼研究[D].南京郵電大學碩士學位論文,2011.
Research on remote video monitoring system based on Android
Yang Jun
(Northwest University of Politics and Law,Xi'an Shaanxi,710122)
With the rapid development of China Mobile Internet,video surveillance based on mobile platform has entered people's perspective with its unique advantages..The popularity of smart mobile terminals for mobile video monitoring provides bearing a terminal,the development of 3G mobile communication network for mobile video monitoring data transmission to provide a guarantee,they both realize mobile video monitoring provides favorable conditions.The topic is the horizontal subject "Dalian * * * * signal transmitter remote control system of remote video surveillance system an important component of the proposed a solution of remote monitoring system based on the Android mobile devices.
Android platform;RTP/RTCP;H.264;FFmpeg;video monitoring