田 甜, 林筑英
(北京工業(yè)大學 北京 100124)
視頻監(jiān)控系統(tǒng)是指利用視頻相關技術對某些特定區(qū)域或場景進行拍攝,并且實時顯示、記錄保存現(xiàn)場圖像的電子網(wǎng)絡系統(tǒng)[1]。 它是一個集計算機多媒體處理、通信網(wǎng)絡傳輸、信號編解碼技術為一體的系統(tǒng)。
在傳統(tǒng)有線網(wǎng)絡監(jiān)控系統(tǒng)中,視頻前端的采集設備嚴格依賴網(wǎng)絡布線,部署不靈活,系統(tǒng)整體成本高。 隨著3G/4G 網(wǎng)絡的快速普及以及迅猛發(fā)展, 通過3G/4G 網(wǎng)絡接入Internet的視頻監(jiān)控系統(tǒng)得以快速發(fā)展。 現(xiàn)有的視頻監(jiān)控系統(tǒng)主要有兩種方式。 在執(zhí)法部門使用的視頻監(jiān)控系統(tǒng)中,系統(tǒng)的采集前端使用具有DSP 處理模塊和高效3G 傳輸芯片, 且為固定的,這種系統(tǒng)的成本較高,安裝部署不方便。 另外,一些視頻監(jiān)控系統(tǒng)將移動終端作為監(jiān)控端而非視頻采集端,通過無線網(wǎng)絡實現(xiàn)隨時隨地查看監(jiān)控。 這種方式依然需要固定的視頻采集端,部署不夠靈活。而以通過3G/4G 網(wǎng)絡接入Internet 的移動設備作為視頻監(jiān)控終端的移動視頻監(jiān)控系統(tǒng)憑借其部署靈活、使用方便、成本較低的特點,成為監(jiān)控系統(tǒng)發(fā)展的趨勢。
與此同時, 隨著硬件、 軟件技術的迅速發(fā)展, 安裝了Android 系統(tǒng)的智能手機應用的越來越廣泛。 智能手機往往具有較高的CPU 主頻,較大的內存資源,較強的多媒體處理能力以及穩(wěn)定的無線通信模塊。 同時,Android 系統(tǒng)的開源特征也使得程序人員開發(fā)自己的移動視頻監(jiān)控系統(tǒng)成為了可能。 所以,將智能手機與視頻監(jiān)控結合,具有較大的實用價值及商用市場前景。
在移動監(jiān)控系統(tǒng)中,智能手機監(jiān)控視頻采集端將壓縮后的視頻數(shù)據(jù)通過TCP 或專屬協(xié)議傳輸至服務器端,系統(tǒng)授權的用戶可以通過各種終端平臺接入系統(tǒng),對特定監(jiān)控前端進行查看,實現(xiàn)指揮調度、管理存儲等功能。 這就要求服務器端具有存儲大量數(shù)據(jù)的能力。 然而,視頻資源往往會占據(jù)較大的存儲空間,采用單臺服務器存儲所有的視頻監(jiān)控數(shù)據(jù)顯然是不可能的。 因此,本研究采用云存儲的方式存儲所有的視頻監(jiān)控數(shù)據(jù)。
現(xiàn)有的商業(yè)化的云存儲解決方案有很多, 比如Google Cloud, Microsoft Azure, Amazon Web Services, 阿里云, 百度云。 但是, 由于大部分視頻監(jiān)控數(shù)據(jù)具有較強的私密性,因此,將視頻監(jiān)控資源上傳到商業(yè)化的云存儲平臺顯然是不合理的。 所以,借助于開源的OwnCloud 平臺,本研究開發(fā)了自己的云存儲平臺。
由于音視頻數(shù)據(jù)量較大,因此,音視頻傳輸過程中往往會消耗大量的流量。 根據(jù)調研發(fā)現(xiàn),大部分智能手機用戶都定制了價格不一、流量大小不等的流量包。 一些智能手機用戶,由于當月瀏覽視頻、下載數(shù)據(jù)較多,造成用戶的流量不夠用。而另一些用戶則可能出現(xiàn)流量過剩的情況。因此,本研究在系統(tǒng)中增加了流量共享功能,在智能手機用戶的3G/4G 流量不足的情況下,可以共享其他手機用戶的流量。
移動視頻監(jiān)控系統(tǒng)的研究已更加廣泛。 文獻[2]概述了遠程無線實時監(jiān)控系統(tǒng)的多種設計。 關于采集端的選擇,一些研究采用了開源的操作系統(tǒng),并選擇嵌入式終端[3]。 但是這種方式花費較高,且對硬件處理能力的要求較高。 另外一些文獻采用智能手機作為采集端[4],并利用了DirectShow 框架。 在無線傳輸方式上, 一些研究采用了非2G/3G/4G 的方式。 例如,文獻[5]中駣用的是WiMax 方式,該研究采用了先進的無線傳輸技術,但由于WiMax 使用范圍的局限性,該系統(tǒng)的應用范圍較小。 一些研究還選用HTTP 作為監(jiān)控視頻的傳輸方式[6],但瀏覽器簡單的功能制約了視頻監(jiān)控系統(tǒng)的功能復雜化。
本研究設計了一種基于云存儲的Android 手機視頻監(jiān)控和流量共享系統(tǒng),系統(tǒng)結構圖如圖1 所示。 整個系統(tǒng)包括智能手機視頻采集與流量共享客戶端、視頻轉發(fā)服務器、云存儲服務器、 監(jiān)控調度客戶端和流量共享服務器等5 個部分。智能手機視頻采集與流量共享客戶端將采集到的監(jiān)控視頻數(shù)據(jù)發(fā)送給視頻轉發(fā)服務器,同時將流量使用情況發(fā)送給流量共享服務器。 流量共享服務器負責處理手機客戶端的流量分享/索取請求。 視頻轉發(fā)服務器接受到視頻數(shù)據(jù)之后,轉發(fā)給云存儲服務器,使得視頻監(jiān)控數(shù)據(jù)在云存儲服務器上永久保存下來。 監(jiān)控調度端既可以查看實時的監(jiān)控視頻,也可以查看歷史的監(jiān)控視頻。 當監(jiān)控調度客戶端查看實時監(jiān)控視頻時,它向視頻轉發(fā)服務器發(fā)送請求。 視頻轉發(fā)服務器收到該請求后, 會將實時的視頻監(jiān)控數(shù)據(jù)轉發(fā)給監(jiān)控調度客戶端。當監(jiān)控調度客戶端查看歷史監(jiān)控視頻時,它向云存儲服務器發(fā)送請求,云存儲服務器會將相應的歷史監(jiān)控視頻數(shù)據(jù)發(fā)送給監(jiān)控調度客戶端。
圖1 系統(tǒng)總體結構圖Fig. 1 The architecture of the system
智能手機視頻采集與流量共享客戶端通過調用Android系統(tǒng)的接口,實現(xiàn)手機攝像頭視頻數(shù)據(jù)及手機MIC 音頻數(shù)據(jù)的采集,并對采集的數(shù)據(jù)進行H.264 編碼,之后通過RTP 協(xié)議完成數(shù)據(jù)包的傳輸。
在本研究的具體設計及實現(xiàn)中,智能手機視頻采集與流量共享客戶端是利用 android.hardware.Camera.Preview Callback 類中的onPreviewFrame 方法采集手機攝像頭的視頻數(shù)據(jù)以及MIC 的音頻數(shù)據(jù),利用setPreviewCallback 方法在手機上顯示攝像頭采集到的視頻數(shù)據(jù)。 采集到音視頻數(shù)據(jù)之后, 該客戶端使用streamIt 方法, 采用多線程的方式, 通過socket 將音視頻數(shù)據(jù)每隔一段時間發(fā)送給視頻轉發(fā)服務器。
音視頻傳輸過程中會消耗大量的流量,因此,本研究在系統(tǒng)中增加了流量共享模塊,手機客戶端與流量共享服務器端交流,在流量不足時索取流量,在流量過剩時分享流量。 在手機客戶端增加了打開WiFi 并連接功能、建立WiFi 熱點功能、與流量共享服務器端交互的功能。 本模塊包括認證部分、流量分享部分以及流量索取部分。
主流程如下:
圖2 流量分享及索取流程Fig. 2 The procedures of traffic share and traffic requirement
由于任何一臺連接Internet 的主機、 服務器或筆記本電腦都可以作為流量共享服務器,因此流量共享服務器端的IP地址和端口號并不是固定的。 所以,手機客戶端在登錄之前,需要首先輸入流量共享服務器端的IP 地址和端口號。
連接流量共享服務器成功后, 將用戶輸入的用戶名、密碼和位置信息發(fā)送給流量共享服務器端。 流量共享服務器收到用戶名之后,首先判斷該用戶名是否存在。 如果用戶名不存在,則返回給手機客戶端相關信息,手機客戶端提示用戶需要先注冊再登錄。 然后,流量共享服務器再對比數(shù)據(jù)庫中存儲的用戶名對應的密碼與手機客戶端發(fā)送的密碼是否一致。 如果不一致,則返回給手機客戶端相關信息,手機客戶端提醒用戶密碼不正確。 否則,按照用戶的選擇,跳轉到分享流量界面或索取流量界面。
2.2.1 分享流量部分設計
分享流量界面主要通過反射調用機制來設置Wifi 熱點。該界面首先檢查Wifi 是否打開。 如果Wifi 已經(jīng)打開, 則將Wifi 關閉,否則無法使用反射調用機制建立Wifi 熱點。 然后調用Android 中的wifiManager 類中的setWifiApEnabled 方法建立Wifi 熱點。
主要功能和流程如下:
1)輸入SSID 和密碼。 創(chuàng)建Wifi 熱點時,需要設置該Wifi熱點的SSID 和密碼,當別人連接該SSID 時,需要輸入密碼才可以連接。
2)根據(jù)用戶輸入的SSID 名稱和密碼創(chuàng)建熱點,并將SSID和密碼發(fā)送給流量共享服務器端。
3)當用戶想了解連接該SSID 的客戶的信息時,該模塊可以顯示連接該SSID 所有客戶的相關信息, 如客戶的IP 地址、MAC 地址等信息。
4)當用戶想關閉該SSID 時,該模塊可以將之前建立的Wifi 熱點關閉。
2.2.2 索取流量部分設計
索取流量部分主要功能和流程如下:
1)判斷是否打開Wifi。 如果沒有打開,則首先打開Wifi。掃描手機客戶端附近的熱點,獲取附近Wifi 熱點SSID 的列表。
2) 從流量共享服務器端獲取與該手機客戶端處于同一位置且在系統(tǒng)中共享的Wifi 熱點的SSID 和密碼, 并將其與附近Wifi 熱點SSID 列表中的Wifi 熱點的SSID 進行對比。如果附近Wifi 熱點SSID 列表中存在與流量共享服務器返回的Wifi 熱點SSID 相同的Wifi 熱點SSID, 則根據(jù)流量共享服務器提供的Wifi 熱點的密碼連接該Wifi 熱點。 如果連接不成功, 則采用同樣的方法連接流量共享服務器提供的下一個Wifi 熱點,直至連接成功。
3)如果在流量共享服務器返回的所有Wifi 熱點中,沒有任何一個Wifi 熱點可以連接成功,則提示用戶手機客戶端附近的所有Wifi 熱點名稱,讓用戶自行判斷是否連接其中之一的Wifi 熱點。
流量共享服務器端負責處理手機客戶端的流量分享/索取請求。
流量共享服務器的主要功能和流程如下:
1)確定端口號之后,啟動監(jiān)聽Socket。 具體的,使用Java的ServerSocket 建立Socket,并開啟監(jiān)聽進程。
2)監(jiān)聽Socket 啟動成功之后,連接本地的MySQL 數(shù)據(jù)庫。 具體的,使用Java 中的DriverManager 類的getConnection方法,與本地的MySQL 類建立連接。
3)當需要顯示數(shù)據(jù)庫中所有用戶的數(shù)據(jù)時,服務器端連接MySQL 數(shù)據(jù)庫, 返回所有用戶的信息, 并將該信息通過JFrame 框架顯示出來。
4)當需要重置數(shù)據(jù)庫中所有用戶的數(shù)據(jù)時,服務器端連接MySQL 數(shù)據(jù)庫,并更新所有用戶的信息,使其恢復到初始狀態(tài)。
視頻轉發(fā)服務器端采用多線程機制,并利用socket 機制接受多個手機客戶端發(fā)送的音視頻數(shù)據(jù),將數(shù)據(jù)轉發(fā)給監(jiān)控調度客戶端和云存儲服務器端。 另外,視頻轉發(fā)服務器端搭建了MySQL 數(shù)據(jù)庫, 負責管理使用智能手機視頻采集與流量共享客戶端的用戶, 云存儲服務器中的監(jiān)控音視頻資源,以及使用監(jiān)控調度客戶端用戶。
視頻轉發(fā)服務器為本系統(tǒng)的中心,分為管理模塊和消息處理模塊,其流程圖如圖3 所示。
圖3 視頻轉發(fā)服務器功能流程Fig. 3 The function of the video transfer server
云存儲服務器由單個的PC 機組成PC 機群對外提供海量視頻存儲的功能。 本研究根據(jù)云存儲的性能要求, 采用ownCloud 開源軟件搭建云存儲服務器子節(jié)點,再利用視頻轉發(fā)服務器統(tǒng)一管理各個子節(jié)點,形成云存儲系統(tǒng)。
ownCloud 是一個自由且開源的個人云存儲解決方案,包括兩個部分:服務器和客戶端。 ownCloud 在客戶端可通過網(wǎng)頁界面,或者安裝專用的客戶端軟件以及掛載為一個外置的磁盤驅動器的形式來使用。 這3 種方式都支持相當多平臺,Windows、Linux、iOS、Android 皆有。
本研究按照ownCloud 的要求, 首先在云存儲服務器(Linux 系統(tǒng))端搭建html 環(huán)境,Apache 環(huán)境,MySQL 環(huán)境等,然后配置與ownCloud 與MySQL 數(shù)據(jù)庫,ownCloud 能夠使用MySQL 管理其數(shù)據(jù)。
ownCloud 服務器子節(jié)點環(huán)境搭建后, 視頻轉發(fā)服務器(Windows 7 系統(tǒng)) 把ownCloud 所占用的云存儲服務器的磁盤空間掛載為一個外置的磁盤驅動器。 視頻轉發(fā)服務器的管理模塊負責將單一的云存儲服務器子節(jié)點組合成一個系統(tǒng),對外提供云存儲服務。
得 益 于 ownCloud 在 Android,Linux,MAC OS,iOS,Windows 7/8/8.1 的客戶端, 選用ownCloud 搭建云存儲服務器使得本研究所獲得的視頻監(jiān)控數(shù)據(jù)在任何平臺上都可以訪問。 另外,使用ownCloud 建立自己的私有云存儲,而非使用Google Cloud, Microsoft Azure, Amazon Web Services, 阿里云,百度云等第三方云存儲平臺,可以更好地保證監(jiān)控數(shù)據(jù)的安全性。
監(jiān)控調度客戶端使用Java 多媒體框架(JMF),并利用CS架構實現(xiàn)監(jiān)控數(shù)據(jù)的播放。監(jiān)控調度端通過TCP 協(xié)議與視頻轉發(fā)服務器建立連接,再通過RTP 協(xié)議接收視頻轉發(fā)服務器發(fā)送過來的音視頻數(shù)據(jù)。 監(jiān)控調度客戶端使用Java 中的decodeYUV420SP 方法對視頻轉發(fā)服務器發(fā)送的音視頻數(shù)據(jù)解碼,即播放音視頻。
打開監(jiān)控調度客戶端,登陸后,可以同時播放四路視頻,在左側的用戶列表欄選擇想要查看的實時視頻或者歷史視頻,右側的播放窗口就會出現(xiàn)相應的視頻數(shù)據(jù)。 實驗演示如圖4 所示。
圖4 監(jiān)控調度端監(jiān)控畫面Fig. 4 A snapshot of the monitor client
本研究設計了一種基于云存儲的Android 手機視頻監(jiān)控和流量共享系統(tǒng)。 該系統(tǒng)主要包括5 個部分:智能手機視頻采集與流量共享客戶端、視頻轉發(fā)服務器、云存儲服務器、監(jiān)控調度客戶端和流量共享服務器。 真實環(huán)境中的部署論證了該系統(tǒng)的可行性,對移動視頻監(jiān)控系統(tǒng)的發(fā)展具有重要意義。
[1] 陳瑾, 葉樺.基于Hi3512的3G視頻監(jiān)控終端的設計與實現(xiàn)[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] 魏武,陳宗郁. 嵌入式遠程視頻監(jiān)控系統(tǒng)的設計與實現(xiàn)[J].電子設計工程,2010,18(3):62-64.
[4] 趙華軍,方鈺. 無線移動視頻監(jiān)控原型研究[J]. 計算機工程,2011,37(6):266-271.
[5] 苑春苗,金志剛,楊淸永. 基于WiMAX的移動視頻監(jiān)控系統(tǒng)[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.