田 甜, 林筑英
(北京工業大學 北京 100124)
視頻監控系統是指利用視頻相關技術對某些特定區域或場景進行拍攝,并且實時顯示、記錄保存現場圖像的電子網絡系統[1]。 它是一個集計算機多媒體處理、通信網絡傳輸、信號編解碼技術為一體的系統。
在傳統有線網絡監控系統中,視頻前端的采集設備嚴格依賴網絡布線,部署不靈活,系統整體成本高。 隨著3G/4G 網絡的快速普及以及迅猛發展, 通過3G/4G 網絡接入Internet的視頻監控系統得以快速發展。 現有的視頻監控系統主要有兩種方式。 在執法部門使用的視頻監控系統中,系統的采集前端使用具有DSP 處理模塊和高效3G 傳輸芯片, 且為固定的,這種系統的成本較高,安裝部署不方便。 另外,一些視頻監控系統將移動終端作為監控端而非視頻采集端,通過無線網絡實現隨時隨地查看監控。 這種方式依然需要固定的視頻采集端,部署不夠靈活。而以通過3G/4G 網絡接入Internet 的移動設備作為視頻監控終端的移動視頻監控系統憑借其部署靈活、使用方便、成本較低的特點,成為監控系統發展的趨勢。
與此同時, 隨著硬件、 軟件技術的迅速發展, 安裝了Android 系統的智能手機應用的越來越廣泛。 智能手機往往具有較高的CPU 主頻,較大的內存資源,較強的多媒體處理能力以及穩定的無線通信模塊。 同時,Android 系統的開源特征也使得程序人員開發自己的移動視頻監控系統成為了可能。 所以,將智能手機與視頻監控結合,具有較大的實用價值及商用市場前景。
在移動監控系統中,智能手機監控視頻采集端將壓縮后的視頻數據通過TCP 或專屬協議傳輸至服務器端,系統授權的用戶可以通過各種終端平臺接入系統,對特定監控前端進行查看,實現指揮調度、管理存儲等功能。 這就要求服務器端具有存儲大量數據的能力。 然而,視頻資源往往會占據較大的存儲空間,采用單臺服務器存儲所有的視頻監控數據顯然是不可能的。 因此,本研究采用云存儲的方式存儲所有的視頻監控數據。
現有的商業化的云存儲解決方案有很多, 比如Google Cloud, Microsoft Azure, Amazon Web Services, 阿里云, 百度云。 但是, 由于大部分視頻監控數據具有較強的私密性,因此,將視頻監控資源上傳到商業化的云存儲平臺顯然是不合理的。 所以,借助于開源的OwnCloud 平臺,本研究開發了自己的云存儲平臺。
由于音視頻數據量較大,因此,音視頻傳輸過程中往往會消耗大量的流量。 根據調研發現,大部分智能手機用戶都定制了價格不一、流量大小不等的流量包。 一些智能手機用戶,由于當月瀏覽視頻、下載數據較多,造成用戶的流量不夠用。而另一些用戶則可能出現流量過剩的情況。因此,本研究在系統中增加了流量共享功能,在智能手機用戶的3G/4G 流量不足的情況下,可以共享其他手機用戶的流量。
移動視頻監控系統的研究已更加廣泛。 文獻[2]概述了遠程無線實時監控系統的多種設計。 關于采集端的選擇,一些研究采用了開源的操作系統,并選擇嵌入式終端[3]。 但是這種方式花費較高,且對硬件處理能力的要求較高。 另外一些文獻采用智能手機作為采集端[4],并利用了DirectShow 框架。 在無線傳輸方式上, 一些研究采用了非2G/3G/4G 的方式。 例如,文獻[5]中駣用的是WiMax 方式,該研究采用了先進的無線傳輸技術,但由于WiMax 使用范圍的局限性,該系統的應用范圍較小。 一些研究還選用HTTP 作為監控視頻的傳輸方式[6],但瀏覽器簡單的功能制約了視頻監控系統的功能復雜化。
本研究設計了一種基于云存儲的Android 手機視頻監控和流量共享系統,系統結構圖如圖1 所示。 整個系統包括智能手機視頻采集與流量共享客戶端、視頻轉發服務器、云存儲服務器、 監控調度客戶端和流量共享服務器等5 個部分。智能手機視頻采集與流量共享客戶端將采集到的監控視頻數據發送給視頻轉發服務器,同時將流量使用情況發送給流量共享服務器。 流量共享服務器負責處理手機客戶端的流量分享/索取請求。 視頻轉發服務器接受到視頻數據之后,轉發給云存儲服務器,使得視頻監控數據在云存儲服務器上永久保存下來。 監控調度端既可以查看實時的監控視頻,也可以查看歷史的監控視頻。 當監控調度客戶端查看實時監控視頻時,它向視頻轉發服務器發送請求。 視頻轉發服務器收到該請求后, 會將實時的視頻監控數據轉發給監控調度客戶端。當監控調度客戶端查看歷史監控視頻時,它向云存儲服務器發送請求,云存儲服務器會將相應的歷史監控視頻數據發送給監控調度客戶端。

圖1 系統總體結構圖Fig. 1 The architecture of the system
智能手機視頻采集與流量共享客戶端通過調用Android系統的接口,實現手機攝像頭視頻數據及手機MIC 音頻數據的采集,并對采集的數據進行H.264 編碼,之后通過RTP 協議完成數據包的傳輸。
在本研究的具體設計及實現中,智能手機視頻采集與流量共享客戶端是利用 android.hardware.Camera.Preview Callback 類中的onPreviewFrame 方法采集手機攝像頭的視頻數據以及MIC 的音頻數據,利用setPreviewCallback 方法在手機上顯示攝像頭采集到的視頻數據。 采集到音視頻數據之后, 該客戶端使用streamIt 方法, 采用多線程的方式, 通過socket 將音視頻數據每隔一段時間發送給視頻轉發服務器。
音視頻傳輸過程中會消耗大量的流量,因此,本研究在系統中增加了流量共享模塊,手機客戶端與流量共享服務器端交流,在流量不足時索取流量,在流量過剩時分享流量。 在手機客戶端增加了打開WiFi 并連接功能、建立WiFi 熱點功能、與流量共享服務器端交互的功能。 本模塊包括認證部分、流量分享部分以及流量索取部分。
主流程如下:

圖2 流量分享及索取流程Fig. 2 The procedures of traffic share and traffic requirement
由于任何一臺連接Internet 的主機、 服務器或筆記本電腦都可以作為流量共享服務器,因此流量共享服務器端的IP地址和端口號并不是固定的。 所以,手機客戶端在登錄之前,需要首先輸入流量共享服務器端的IP 地址和端口號。
連接流量共享服務器成功后, 將用戶輸入的用戶名、密碼和位置信息發送給流量共享服務器端。 流量共享服務器收到用戶名之后,首先判斷該用戶名是否存在。 如果用戶名不存在,則返回給手機客戶端相關信息,手機客戶端提示用戶需要先注冊再登錄。 然后,流量共享服務器再對比數據庫中存儲的用戶名對應的密碼與手機客戶端發送的密碼是否一致。 如果不一致,則返回給手機客戶端相關信息,手機客戶端提醒用戶密碼不正確。 否則,按照用戶的選擇,跳轉到分享流量界面或索取流量界面。
2.2.1 分享流量部分設計
分享流量界面主要通過反射調用機制來設置Wifi 熱點。該界面首先檢查Wifi 是否打開。 如果Wifi 已經打開, 則將Wifi 關閉,否則無法使用反射調用機制建立Wifi 熱點。 然后調用Android 中的wifiManager 類中的setWifiApEnabled 方法建立Wifi 熱點。
主要功能和流程如下:
1)輸入SSID 和密碼。 創建Wifi 熱點時,需要設置該Wifi熱點的SSID 和密碼,當別人連接該SSID 時,需要輸入密碼才可以連接。
2)根據用戶輸入的SSID 名稱和密碼創建熱點,并將SSID和密碼發送給流量共享服務器端。
3)當用戶想了解連接該SSID 的客戶的信息時,該模塊可以顯示連接該SSID 所有客戶的相關信息, 如客戶的IP 地址、MAC 地址等信息。
4)當用戶想關閉該SSID 時,該模塊可以將之前建立的Wifi 熱點關閉。
2.2.2 索取流量部分設計
索取流量部分主要功能和流程如下:
1)判斷是否打開Wifi。 如果沒有打開,則首先打開Wifi。掃描手機客戶端附近的熱點,獲取附近Wifi 熱點SSID 的列表。
2) 從流量共享服務器端獲取與該手機客戶端處于同一位置且在系統中共享的Wifi 熱點的SSID 和密碼, 并將其與附近Wifi 熱點SSID 列表中的Wifi 熱點的SSID 進行對比。如果附近Wifi 熱點SSID 列表中存在與流量共享服務器返回的Wifi 熱點SSID 相同的Wifi 熱點SSID, 則根據流量共享服務器提供的Wifi 熱點的密碼連接該Wifi 熱點。 如果連接不成功, 則采用同樣的方法連接流量共享服務器提供的下一個Wifi 熱點,直至連接成功。
3)如果在流量共享服務器返回的所有Wifi 熱點中,沒有任何一個Wifi 熱點可以連接成功,則提示用戶手機客戶端附近的所有Wifi 熱點名稱,讓用戶自行判斷是否連接其中之一的Wifi 熱點。
流量共享服務器端負責處理手機客戶端的流量分享/索取請求。
流量共享服務器的主要功能和流程如下:
1)確定端口號之后,啟動監聽Socket。 具體的,使用Java的ServerSocket 建立Socket,并開啟監聽進程。
2)監聽Socket 啟動成功之后,連接本地的MySQL 數據庫。 具體的,使用Java 中的DriverManager 類的getConnection方法,與本地的MySQL 類建立連接。
3)當需要顯示數據庫中所有用戶的數據時,服務器端連接MySQL 數據庫, 返回所有用戶的信息, 并將該信息通過JFrame 框架顯示出來。
4)當需要重置數據庫中所有用戶的數據時,服務器端連接MySQL 數據庫,并更新所有用戶的信息,使其恢復到初始狀態。
視頻轉發服務器端采用多線程機制,并利用socket 機制接受多個手機客戶端發送的音視頻數據,將數據轉發給監控調度客戶端和云存儲服務器端。 另外,視頻轉發服務器端搭建了MySQL 數據庫, 負責管理使用智能手機視頻采集與流量共享客戶端的用戶, 云存儲服務器中的監控音視頻資源,以及使用監控調度客戶端用戶。
視頻轉發服務器為本系統的中心,分為管理模塊和消息處理模塊,其流程圖如圖3 所示。

圖3 視頻轉發服務器功能流程Fig. 3 The function of the video transfer server
云存儲服務器由單個的PC 機組成PC 機群對外提供海量視頻存儲的功能。 本研究根據云存儲的性能要求, 采用ownCloud 開源軟件搭建云存儲服務器子節點,再利用視頻轉發服務器統一管理各個子節點,形成云存儲系統。
ownCloud 是一個自由且開源的個人云存儲解決方案,包括兩個部分:服務器和客戶端。 ownCloud 在客戶端可通過網頁界面,或者安裝專用的客戶端軟件以及掛載為一個外置的磁盤驅動器的形式來使用。 這3 種方式都支持相當多平臺,Windows、Linux、iOS、Android 皆有。
本研究按照ownCloud 的要求, 首先在云存儲服務器(Linux 系統)端搭建html 環境,Apache 環境,MySQL 環境等,然后配置與ownCloud 與MySQL 數據庫,ownCloud 能夠使用MySQL 管理其數據。
ownCloud 服務器子節點環境搭建后, 視頻轉發服務器(Windows 7 系統) 把ownCloud 所占用的云存儲服務器的磁盤空間掛載為一個外置的磁盤驅動器。 視頻轉發服務器的管理模塊負責將單一的云存儲服務器子節點組合成一個系統,對外提供云存儲服務。
得 益 于 ownCloud 在 Android,Linux,MAC OS,iOS,Windows 7/8/8.1 的客戶端, 選用ownCloud 搭建云存儲服務器使得本研究所獲得的視頻監控數據在任何平臺上都可以訪問。 另外,使用ownCloud 建立自己的私有云存儲,而非使用Google Cloud, Microsoft Azure, Amazon Web Services, 阿里云,百度云等第三方云存儲平臺,可以更好地保證監控數據的安全性。
監控調度客戶端使用Java 多媒體框架(JMF),并利用CS架構實現監控數據的播放。監控調度端通過TCP 協議與視頻轉發服務器建立連接,再通過RTP 協議接收視頻轉發服務器發送過來的音視頻數據。 監控調度客戶端使用Java 中的decodeYUV420SP 方法對視頻轉發服務器發送的音視頻數據解碼,即播放音視頻。
打開監控調度客戶端,登陸后,可以同時播放四路視頻,在左側的用戶列表欄選擇想要查看的實時視頻或者歷史視頻,右側的播放窗口就會出現相應的視頻數據。 實驗演示如圖4 所示。

圖4 監控調度端監控畫面Fig. 4 A snapshot of the monitor client
本研究設計了一種基于云存儲的Android 手機視頻監控和流量共享系統。 該系統主要包括5 個部分:智能手機視頻采集與流量共享客戶端、視頻轉發服務器、云存儲服務器、監控調度客戶端和流量共享服務器。 真實環境中的部署論證了該系統的可行性,對移動視頻監控系統的發展具有重要意義。
[1] 陳瑾, 葉樺.基于Hi3512的3G視頻監控終端的設計與實現[J].東南大學學報,2011(41):117-119.
[2] Chen W,Shih C C,Hwang L J.The development and applications of the remote real-time video surveillance system[J].Tamkang Journal of Science and Engineering,2010,13(2):215-225.
[3] 魏武,陳宗郁. 嵌入式遠程視頻監控系統的設計與實現[J].電子設計工程,2010,18(3):62-64.
[4] 趙華軍,方鈺. 無線移動視頻監控原型研究[J]. 計算機工程,2011,37(6):266-271.
[5] 苑春苗,金志剛,楊淸永. 基于WiMAX的移動視頻監控系統[J]. 計算機工程,2010,36(6):221-223.
[6] Won-ho Chung. A smart phone watch for mobile surveillance service[J]. Personal & Ubiquitous Computing,2012,16(6):687.