智能手機(jī)視頻監(jiān)控系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
引 言
隨著互聯(lián)網(wǎng)技術(shù)的迅速發(fā)展,傳統(tǒng)的監(jiān)控系統(tǒng)已無法滿足人們對(duì)準(zhǔn)確性、適用性和方便性的要求。同時(shí),智能手機(jī)更新?lián)Q代,處理能力日益變強(qiáng),成為了人們?nèi)粘I钪胁豢苫蛉钡囊徊糠?。為滿足人們對(duì)監(jiān)控區(qū)域進(jìn)行隨時(shí)隨地實(shí)時(shí)監(jiān)控的需要,本文研究設(shè)計(jì)了一種智能手機(jī)視頻監(jiān)控系統(tǒng),將手機(jī)端作為視頻監(jiān)控客戶端,結(jié)合混合編碼技術(shù),實(shí)現(xiàn)了對(duì)監(jiān)控區(qū)域的實(shí)時(shí)監(jiān)控與監(jiān)控視頻的存儲(chǔ)。
1 移動(dòng)視頻監(jiān)控系統(tǒng)的設(shè)計(jì)
本文設(shè)計(jì)的視頻監(jiān)控系統(tǒng)、移動(dòng)視頻客戶端均基于Android 系統(tǒng),有效結(jié)合了混合編碼技術(shù)與云存儲(chǔ)技術(shù)[1],可在客戶端隨時(shí)隨地觀看鎖定的攝像視頻,若視頻圖像發(fā)生異常,能在第一時(shí)間報(bào)告給鎖定的主人,主人可通過App 遠(yuǎn)程控制攝像頭。
2 移動(dòng)視頻系統(tǒng)的關(guān)鍵技術(shù)
2.1 混合編碼技術(shù)
為了使高質(zhì)量通信成為可能,并盡可能減少數(shù)據(jù)損失,故使用主流的視頻編解碼標(biāo)準(zhǔn)H.264。視頻編碼的目的在于減少表示數(shù)據(jù)的比特。由于視頻圖像數(shù)據(jù)的相關(guān)性強(qiáng),在幀內(nèi)以及幀間具有大量空域和時(shí)域冗余信息,因此可以通過去除這些冗余信息來實(shí)現(xiàn)對(duì)視頻數(shù)據(jù)的壓縮[2]。其中,在數(shù)據(jù)壓縮方面最受歡迎的是基于統(tǒng)計(jì)特性的運(yùn)動(dòng)補(bǔ)償+ 變換編碼的混合編碼框架。國內(nèi)外通用的視頻壓縮標(biāo)準(zhǔn)均基于此框架,如廣泛使用的MPEG 系列及H.26X 系列標(biāo)準(zhǔn)。
MPEG-4 不僅針對(duì)在一定比特率下的視頻編碼,更注重多媒體系統(tǒng)的交互性和靈活性。主要應(yīng)用于視頻電話、視像電子郵件等,其傳輸速度要求較低,為 4 800 ~6 400 bit/s,分辨率為176 144。利用較窄的寬帶,通過幀重建技術(shù)壓縮和傳輸數(shù)據(jù),力求以最少的數(shù)據(jù)獲得最佳的圖像質(zhì)量[3]。
H.264 技術(shù)具有比 MPEG-4 更為高效的編碼效率,比后者節(jié)約 50% 的碼率。可提供連續(xù)且流暢的高質(zhì)量圖像,并且在較低碼率的情況下依舊能提供較高質(zhì)量的視頻圖像[4]。
就單張圖像來說,MPEG-4 對(duì)視頻數(shù)據(jù)的處理更優(yōu)秀; 而就整體視頻傳輸來說,H.264 更勝一籌。
預(yù)測編碼:建立一個(gè)模型,通過數(shù)據(jù)的相關(guān)性,利用之前的樣本對(duì)下一個(gè)新樣本值進(jìn)行預(yù)測,并將預(yù)測值和實(shí)際值的殘差值編碼傳輸?shù)浇邮斩?,同時(shí)在接收端建立一個(gè)相同的模型,按此模型進(jìn)行解碼操作。
運(yùn)動(dòng)估計(jì):從當(dāng)前幀中提取視頻序列的運(yùn)動(dòng)趨勢和走向過程。
一個(gè)完整的編碼過程基本可以概括為視頻源通過濾波器得到波形圖,量化得到初始的完整碼流,通過幀間、幀內(nèi)編碼和熵編碼技術(shù)得到最終壓縮后的碼流。
視頻編解碼部分采用JM 編解碼器。在實(shí)驗(yàn)中,視頻源將收集到的視頻數(shù)據(jù)改變格式后輸入到JM 編碼器的工作目錄中,在 Visual Studio 2013 平臺(tái)上運(yùn)行。通過編碼器采樣獲取預(yù)測數(shù)據(jù),并與實(shí)際值相減得到殘差,使用幀內(nèi)、幀間技術(shù)對(duì)殘差進(jìn)行量化操作 / 變換,對(duì)編碼語法元素進(jìn)行熵編碼,然后在編碼器的工作目錄下得到壓縮后的碼流。
當(dāng)碼流傳輸?shù)浇邮斩撕?,同樣?huì)被輸入到解碼器的工作目錄中,通過一系列相反的操作后得到壓縮前的視頻數(shù)據(jù)。
2.2 客戶端實(shí)現(xiàn)
2.2.1 平臺(tái)選擇和開發(fā)語言
服務(wù)器端采用Windows 操作系統(tǒng)與Java 語言;客戶端包括Android 操作系統(tǒng),Java 語言,Android 編程。
Java 是一門面向?qū)ο缶幊痰恼Z言,較好地實(shí)現(xiàn)了面向?qū)ο缶幊汤碚?,同時(shí)也是一種不受限于特定平臺(tái)的語言,具有可移植性[5]。此外,Java 還具有穩(wěn)健、安全、高性能等特征, 是一種功能豐富的開發(fā)語言。
2.2.2 客戶端 UI設(shè)計(jì)
用戶界面(UI)是系統(tǒng)和用戶之間進(jìn)行交互與信息交換的重要媒介,使得用戶能夠方便、有效地操作硬件以達(dá)成雙向交互,完成工作。
本文 采用 Android Studio 進(jìn)行 Android 編 程。Android Studio 具有非常豐富的可視化編程功能,可以在編程的同時(shí)看 到其被應(yīng)用在不同尺寸屏幕中的情況。Android 操作系統(tǒng)的用 戶界面都以 View 與 ViewGroup 為基礎(chǔ)。View 是用戶界面的 基本組成單元,ViewGroup 是其子類,ViewGroup 的子類稱為 “Layout(布局)”。View 與 ViewGroup 在布局中的層次結(jié)構(gòu)如 圖 1 所示。
Android 編程中有多種 布局方 式, 分別為線 性布局(LinerLayout), 相 對(duì) 布 局(RelativeLayout), 幀 布 局(FrameLayout), 絕對(duì)布局(AbsoluteLayout) 等。本文編程主要用到線性布局(LinearLayout), 該布局有 horizontal 和 vertical 兩個(gè)方向。Android Studio 在創(chuàng)建布局方式上分為兩種: 其一,在XML 配置文件中聲明布局方式;其二,在應(yīng)用程序中直接通過代碼實(shí)例化布局及其組件。
2.3 視頻的播放顯示
對(duì)于獲取的視頻文件首先要經(jīng)過解碼, 之后再通過Android客戶端播放。Android操作系統(tǒng)提供的VideoView和MediaPlayer可播放視頻[6]。
MediaPlayer 在播放視頻時(shí)需要自己準(zhǔn)備顯示視頻的組件、播放時(shí)的控制按鈕等。首先創(chuàng)建一個(gè) MediaPlayer 對(duì)象,再通過setDataSource()設(shè)置數(shù)據(jù)源,可以是文件、文件 路 徑 或 URL。 調(diào) 用 MediaPlayer.setDisplay(holder) 設(shè)置 SurfaceHolder,surfaceHolder 可 以 通 過 surfaceview 的getHolder()獲得,調(diào)用 MediaPlayer.prepare()準(zhǔn)備、調(diào)用MediaPlayer.start()播放視頻。
VideoView是Android提供的較為好用的播放視頻組件, 不僅內(nèi)建了顯示視頻的功能,還可以直接加入 MediaController 對(duì)象作為播放控制接口。VideoView提供的 setVideoURI() 可以設(shè)置視頻的 URI,start() 可以開始播放視頻,pause()可以暫停播放視頻,stopPlayback()可以停止播放視頻。
VideoView 視頻播放框架如圖 2 所示。
從圖 2 可以看出,VideoView 組件進(jìn)行視頻播放的過程可以分為三步:
(1) JavaFramework層。應(yīng)用程序進(jìn)入VideoView, 再經(jīng)過Surface;
(2) NativeFramework層。先到SurfaceFlinger,然后借助PVPlayer到OverlayHal;
(3) Driver層。利用Mainframebuffer和VideoPlane進(jìn)行播放。
2.3 視頻數(shù)據(jù)的存儲(chǔ)
在視頻監(jiān)控系統(tǒng)中,對(duì)已經(jīng)采集的視頻數(shù)據(jù)進(jìn)行妥善存儲(chǔ),便于之后回調(diào)查看。目前可行的存儲(chǔ)方式有SD 卡存儲(chǔ)與云存儲(chǔ)。云存儲(chǔ)是一個(gè)以數(shù)據(jù)和管理為核心的云計(jì)算系統(tǒng) [2]。相對(duì)于傳統(tǒng)的SD 卡存儲(chǔ),云存儲(chǔ)的優(yōu)勢較為明顯,隨著系統(tǒng)數(shù)據(jù)量的增加,沒有性能上的瓶頸。使用ownCloud 可以在私有服務(wù)器上搭建私有云存儲(chǔ)服務(wù)器節(jié)點(diǎn),由中心管理服務(wù)器信息管理模塊統(tǒng)一管理[7],以優(yōu)化整個(gè)服務(wù)器系統(tǒng)的運(yùn)作。
使用ownCloud 時(shí),需在云存儲(chǔ)服務(wù)器節(jié)點(diǎn)上創(chuàng)建并配置Apache 環(huán)境、PHP 環(huán)境、MySQL 環(huán)境等。由于 ownCloud 通過抽象層訪問數(shù)據(jù)庫,因此支持 Oracle、MySQL、SQLite 等數(shù)據(jù)庫。服務(wù)子節(jié)點(diǎn)環(huán)境搭建完成后,可以選擇連接到本地存儲(chǔ)作為存儲(chǔ)服務(wù)器提供點(diǎn),在修改了ownCloud 的存儲(chǔ)路徑配置后,ownCloud 的存儲(chǔ)文件動(dòng)作就會(huì)立刻發(fā)生在該存儲(chǔ)器上。使用ownCloud 建立私有服務(wù)器可以更好地保證數(shù)據(jù)的安全性。
2.4 軟硬件連接
客戶端分為安卓端和iOS 端,根據(jù)對(duì)場景的認(rèn)知,對(duì)安卓 App 客戶端進(jìn)行了深層次的研究。安卓系統(tǒng)采用軟件棧形式管理系統(tǒng)的功能層次結(jié)構(gòu),主要分為 5 層,由高到低分別是應(yīng)用程序?qū)印?yīng)用程序架構(gòu)層、C++/C 本地庫、Android 運(yùn)行時(shí)庫、Linux 內(nèi)核驅(qū)動(dòng)層。
安卓客戶端開發(fā)四大組件的運(yùn)用貫穿整個(gè)應(yīng)用軟件的開發(fā)過程,其以組件的形式封裝各抽象功能模塊,使得應(yīng)用與系統(tǒng)中其余軟件的書庫交互變得更為敏捷。
基于海思 Hi3518E 能夠?qū)崿F(xiàn)多種碼流和多選分辨率及JPEG 圖片抓拍,支持圖像 3D 去噪、圖像增強(qiáng)、邊緣增強(qiáng)等預(yù)處理功能,利于監(jiān)控系統(tǒng)的運(yùn)行。
本文針對(duì)Windows 系統(tǒng)進(jìn)行開發(fā),依賴于其兩大功能: 一是完成與硬件的交互;二是為在微處理器上運(yùn)行的應(yīng)用程序提供可執(zhí)行的環(huán)境。著重進(jìn)行設(shè)備驅(qū)動(dòng)程序的封裝對(duì)攝像頭端硬件資源的訪問。針對(duì)客戶端軟件進(jìn)行的需求分析,大致有以下三個(gè)步驟:
(1) 網(wǎng)絡(luò)攝像頭要有一個(gè)設(shè)備的入網(wǎng)操作,并且該操作簡單易行,穩(wěn)定可靠。
(2) 連接設(shè)備后,需要獲取音頻、視頻數(shù)據(jù)。此步驟是對(duì)圖像、網(wǎng)絡(luò)傳輸、顯示等技術(shù)提出的一項(xiàng)挑戰(zhàn)。
(3) 將移動(dòng)智能手機(jī)作為移動(dòng)客戶端軟件的載體。
使用由含有多幀環(huán)形緩存結(jié)構(gòu)、DMA 控制器、異步FIFO 及從控制接口的軟硬件接口來連接軟件App 和硬件攝像頭,實(shí)現(xiàn)了從原始同步視頻信號(hào)輸入緩存到內(nèi)存中再由VGA 接口顯示的預(yù)覽鏈路,完成了視頻壓縮鏈路,實(shí)現(xiàn)了從原始同步視頻轉(zhuǎn)換成YUV 三通道分量[2]。
3 結(jié) 語
本系統(tǒng)使用攝像頭作為移動(dòng)視頻采集端,采用混合編碼技術(shù),并以智能手機(jī)作為移動(dòng)視頻客戶端進(jìn)行遠(yuǎn)程視頻實(shí)時(shí)監(jiān)控。在 4G/5G 時(shí)代以及智能手機(jī)不斷更新?lián)Q代的情況下, 本監(jiān)控系統(tǒng)將會(huì)擁有廣闊的應(yīng)用前景[8]。