摘 要: 為了使視頻監(jiān)控更加靈活方便,能夠隨時(shí)隨地地采集視頻,,采用3G手機(jī)作為視頻客戶端和采集端,,通過RTP協(xié)議在3G網(wǎng)絡(luò)下實(shí)時(shí)傳輸視頻流,采用先進(jìn)的H.264壓縮算法對(duì)采集視頻進(jìn)行壓縮以節(jié)省網(wǎng)絡(luò)流量,,加快傳輸速度,,在手機(jī)客戶端可以清楚地觀看視頻。
關(guān)鍵詞: 3G手機(jī),;視頻監(jiān)控,;H.264;Android
視頻監(jiān)控的廣泛應(yīng)用,,以及人們對(duì)移動(dòng)視頻監(jiān)控需求的增加,,促使了3G手機(jī)移動(dòng)視頻監(jiān)控系統(tǒng)的出現(xiàn)。用3G手機(jī)作為視頻采集端擴(kuò)大了視頻采集的范圍,,使監(jiān)控場(chǎng)地不再局限于一個(gè)固定的地方,,從而使客戶端可觀察的范圍大大增加,真正達(dá)到一機(jī)在手處處監(jiān)控的效果,給人們社區(qū)生活和工作帶來極大的方便,。例如老人不方便外出,,當(dāng)兒女在外旅游時(shí),可以把旅游時(shí)的歡樂情景實(shí)時(shí)發(fā)送給老人和他們共享此時(shí)的歡樂,。此外,,3G手機(jī)移動(dòng)視頻監(jiān)控還可以在遠(yuǎn)程救助、遠(yuǎn)程支援,、遠(yuǎn)程技術(shù)支持以及遠(yuǎn)程醫(yī)療幫助等方面獲得廣泛應(yīng)用,。
3G技術(shù)的快速發(fā)展使得3G網(wǎng)絡(luò)速度越來越快,從而在3G網(wǎng)絡(luò)下傳輸視頻成為可能,。為了節(jié)省網(wǎng)絡(luò)帶寬,、加快視頻傳輸速度,該系統(tǒng)采用H.264壓縮算法對(duì)采集的視頻進(jìn)行壓縮編碼,,網(wǎng)絡(luò)傳輸采用支持流媒體傳輸?shù)腞TP/RTCP協(xié)議以保證視頻流高效,、穩(wěn)定地實(shí)時(shí)傳輸。
1 系統(tǒng)的硬件組成及開發(fā)環(huán)境
該系統(tǒng)分為視頻采集端,、視頻服務(wù)器和視頻接收端3部分,。該系統(tǒng)的硬件結(jié)構(gòu)如圖1所示。
采集端采用HTC的G13手機(jī),,主屏分辨率為480×320像素,,3G網(wǎng)絡(luò)頻率為WCDMA 850 MHz/2 100 MHz,操作系統(tǒng)為Android 2.3,,CPU頻率為600 MHz,,RAM容量為512 MB,ROM容量為512 MB,,攝像頭像素為500萬像素,,自動(dòng)對(duì)焦且支持觸控對(duì)焦,圖像尺寸最大支持2 592×1 944像素照片拍攝,。視頻轉(zhuǎn)發(fā)服務(wù)器采用普通的PC即可,。視頻接收端采用三星的GT-S5670手機(jī),3G網(wǎng)絡(luò)頻率為WCDMA 900 MHz/2 100 MHz,,操作系統(tǒng)為Android 2.2,,內(nèi)存容量為160 MB,分辨率為320×240,,26萬色彩,,視頻播放格式為MPEG4/H.263/H.264。
為使用C/C++編寫的H.264編解碼函數(shù),,需要搭建Android的C/C++開發(fā)環(huán)境,。搭建Android C/C++開發(fā)環(huán)境所需要用到的軟件為JDK+Eclipse+AndroidSDK+ADT+NDK,編譯Android的C/C++程序需要一個(gè)交叉編譯環(huán)境,本文選擇的是Cygwin,。
2 視頻采集端設(shè)計(jì)
視頻采集端顧名思義主要完成對(duì)監(jiān)控現(xiàn)場(chǎng)的視頻采集工作,,此外為了減輕視頻服務(wù)器的壓力,在視頻采集端將采集的視頻進(jìn)行壓縮編碼,,然后再通過網(wǎng)絡(luò)傳輸給視頻服務(wù)器,,由視頻服務(wù)器將視頻轉(zhuǎn)發(fā)給視頻客戶端。視頻采集端軟件結(jié)構(gòu)如圖2所示,。
?。?)采集模塊。此模塊為視頻采集端的核心模塊,,視頻采集端通過此模塊對(duì)監(jiān)控現(xiàn)場(chǎng)進(jìn)行視頻采集工作,。該模塊包括視頻采集和視頻預(yù)覽兩部分。攝像頭應(yīng)首先對(duì)監(jiān)控現(xiàn)場(chǎng)進(jìn)行視頻預(yù)覽,,然后采集一幀圖像,,每采集一幀圖像,都要先進(jìn)行視頻預(yù)覽工作,。因此,,在程序中應(yīng)首先進(jìn)行視頻預(yù)覽工作,然后再采集視頻,。在程序中實(shí)現(xiàn)對(duì)攝像頭的操作應(yīng)該首先在AndroidManifest.xml中添加獲取操作攝像頭的語句。在主程序中對(duì)攝像頭進(jìn)行初始化,,配置攝像頭各種參數(shù),,如視頻圖像的高度、寬度,、自動(dòng)對(duì)焦等,。基于Android的3G手機(jī)攝像頭采集的視頻圖像默認(rèn)格式為YUV420sp,,采集模塊采集完視頻后交給編碼模塊處理,。
(2)編碼模塊,。此模塊的目的是在有限的網(wǎng)絡(luò)資源中傳輸更多的視頻流,,同時(shí)減少視頻服務(wù)器的工作量。編碼模塊的主要工作就是把采集模塊采集的視頻進(jìn)行壓縮編碼,,該系統(tǒng)采用最新最先進(jìn)的H.264壓縮方式對(duì)視頻流進(jìn)行壓縮編碼,,然后將壓縮好的視頻流交由網(wǎng)絡(luò)模塊進(jìn)行網(wǎng)絡(luò)傳輸。在程序中通過調(diào)用C/C++的H.264編碼函數(shù)對(duì)采集的視頻進(jìn)行編碼即可,,這里的H.264編碼函數(shù)要使用JNI的函數(shù)命名格式,,函數(shù)里的數(shù)據(jù)類型也要相應(yīng)轉(zhuǎn)為JNI規(guī)定的格式,這樣在Java中才能被識(shí)別,編譯鏈接才能通過,。
由于網(wǎng)絡(luò)傳輸帶寬有限,,同時(shí)為了節(jié)省上網(wǎng)流量,加快視頻傳輸速度,,本文采用壓縮效率比較高的H.264視頻壓縮算法,。H.264采用分層設(shè)計(jì),在概念上分為視頻編碼層和網(wǎng)絡(luò)提取層兩層,。其精度高,,支持多模式運(yùn)動(dòng)估計(jì),支持1/4或1/8像素精度的運(yùn)動(dòng)矢量,;支持整數(shù)變換,,在編碼器和解碼器中允許精度相同變換和反變換,便于使用簡(jiǎn)單的定點(diǎn)運(yùn)算方式,。同時(shí),,H.264還采用統(tǒng)一的VLC和幀內(nèi)預(yù)測(cè)技術(shù),使視頻壓縮效率大大提高,。在中國聯(lián)通3G HSDPA網(wǎng)絡(luò)覆蓋區(qū)域內(nèi),,實(shí)際最高上網(wǎng)下載速率為5 Mb/s(620 kb/s),上行為2.8 Mb/s(350 kb/s),,通常下載為450 kb/s,,上傳280 kb/s,如果不采用壓縮算法,,在450 kb/s的網(wǎng)速下傳輸實(shí)時(shí)視頻流是不可能的,,視頻尺寸為480×320,視頻碼率為512 kb/s,,采用H.264壓縮算法,,一般壓縮比可以達(dá)到25:1,這樣就可以保證視頻流的實(shí)時(shí)傳輸了,。
?。?)網(wǎng)絡(luò)傳輸模塊。此模塊完成視頻流的傳輸功能,,將經(jīng)過壓縮模塊編碼后的視頻流傳輸給視頻服務(wù)器,。為保證實(shí)時(shí)傳輸,該系統(tǒng)采用RTP實(shí)時(shí)傳輸協(xié)議,,由于RTP協(xié)議只保證視頻流的實(shí)時(shí)性,,對(duì)傳送的視頻數(shù)據(jù)不提供可靠的傳送機(jī)制,因此,,使用RTCP傳輸控制協(xié)議配合RTP協(xié)議一同使用,,以保證視頻傳輸?shù)馁|(zhì)量,。RTP下層使用UDP協(xié)議,真正意義上將視頻流傳輸給網(wǎng)絡(luò)層,,通過網(wǎng)絡(luò)層將視頻流通過網(wǎng)絡(luò)傳輸給視頻服務(wù)器,。在程序中同樣要在AndroidManifest.xml文件中添加獲取網(wǎng)絡(luò)權(quán)限的語句,否則,,視頻流是無法通過網(wǎng)絡(luò)傳輸出去的,。
實(shí)時(shí)傳輸協(xié)議RTP(Real-Time Transport Protocol)是針對(duì)Internet上多媒體數(shù)據(jù)流的一個(gè)傳輸協(xié)議,由Internet工程任務(wù)組(IETF)作為RFC1889發(fā)布,。RTP被定義為在一對(duì)一或一對(duì)多的傳輸情況下工作,,其目的是提供時(shí)間信息和實(shí)現(xiàn)流同步。RTP的典型應(yīng)用建立在UDP上,,但也可以在TCP或ATM等其他協(xié)議之上工作,。RTP本身只保證實(shí)時(shí)數(shù)據(jù)的傳輸,并不能為按順序傳送數(shù)據(jù)包提供可靠的傳送機(jī)制,,也不提供流量控制或擁塞控制,,它依靠RTCP提供這些服務(wù)。實(shí)時(shí)傳輸控制協(xié)議RTCP(Real-Time Transport Control Protocol)負(fù)責(zé)管理傳輸質(zhì)量在當(dāng)前應(yīng)用進(jìn)程之間交換控制信息,。在RTP會(huì)話期間,,各參與者周期性地傳送RTCP包,包中含有已發(fā)送的數(shù)據(jù)包的數(shù)量以及丟失的數(shù)據(jù)包的數(shù)量等統(tǒng)計(jì)資料,。因此,,服務(wù)器可以利用這些信息動(dòng)態(tài)地改變傳輸速率,甚至改變有效載荷類型,。RTP和RTCP配合使用,,能以有效的反饋和最小的開銷使傳輸效率最佳化,因此特別適合傳送網(wǎng)上的實(shí)時(shí)數(shù)據(jù),。
3 視頻服務(wù)端設(shè)計(jì)
視頻服務(wù)器在該系統(tǒng)中起著橋梁的作用,承上啟下,,將視頻采集端和視頻客戶端連接起來,,只有通過視頻服務(wù)端,視頻采集端和視頻客戶端才能相互通信,,整個(gè)系統(tǒng)才能正常運(yùn)轉(zhuǎn),。每個(gè)視頻采集端和視頻客戶端通信都要通過視頻服務(wù)器,所以視頻服務(wù)器在該系統(tǒng)中承擔(dān)的工作量最大,,任務(wù)最重,,因此服務(wù)端的設(shè)計(jì)很重要。一個(gè)好的視頻服務(wù)端設(shè)計(jì)可以使視頻服務(wù)器高效穩(wěn)定地運(yùn)行,,從而提高整個(gè)系統(tǒng)的工作效率,。該系統(tǒng)服務(wù)端分為視頻接收模塊和視頻管理模塊兩大部分,。其中,視頻管理模塊又分為網(wǎng)絡(luò)傳輸模塊,、視頻存儲(chǔ)模塊,、視頻解碼模塊和視頻播放模塊。服務(wù)端軟件結(jié)構(gòu)如圖3所示,。
?。?)接收模塊。該模塊主要完成視頻流的接收工作,,相對(duì)管理模塊比較簡(jiǎn)單,,在程序中利用線程將視頻采集端傳來的視頻流進(jìn)行接收即可。
管理模塊將接收的視頻流根據(jù)去向進(jìn)行一一處理,,保證在視頻服務(wù)端可以觀看視頻監(jiān)控情況,,將視頻流存儲(chǔ)備份,方便以后查看以及監(jiān)聽視頻客戶端請(qǐng)求,,并將視頻流轉(zhuǎn)發(fā)給視頻客戶端,。
(2)網(wǎng)絡(luò)傳輸模塊,。該模塊負(fù)責(zé)監(jiān)聽視頻客戶端的連接請(qǐng)求并將視頻采集端傳來的視頻流轉(zhuǎn)發(fā)給視頻客戶端,。該模塊承載著整個(gè)系統(tǒng)的重心,是視頻采集端和視頻客戶端的連接紐帶,,因此該模塊高效穩(wěn)定地工作才能使整個(gè)系統(tǒng)高效穩(wěn)定地運(yùn)轉(zhuǎn),。接收模塊接收的視頻流是經(jīng)過H.264壓縮算法壓縮過的,在此模塊直接轉(zhuǎn)發(fā)即可,。在程序中對(duì)每個(gè)發(fā)送連接請(qǐng)求的視頻客戶端創(chuàng)建一個(gè)新的線程,,用來專門為該視頻客戶端傳輸視頻流,各個(gè)線程之間互不影響,。
?。?)視頻存儲(chǔ)模塊。該模塊主要完成將接收模塊接收的視頻流存儲(chǔ)在本地硬盤的工作,,從而使得以后可以查詢歷史監(jiān)控記錄,。
(4)視頻解碼模塊,。該模塊主要完成對(duì)接收的視頻流進(jìn)行解碼工作,。因?yàn)橐曨l服務(wù)器接收到的視頻流是通過H.264壓縮算法壓縮過的,在視頻服務(wù)器上不能直接播放,,所以在播放前首先需要對(duì)視頻流進(jìn)行解碼,,在程序中調(diào)用H.264解碼程序進(jìn)行解碼即可。
?。?)視頻播放模塊,。該模塊主要完成在視頻服務(wù)端將視頻播放顯示的功能,,同時(shí)提供對(duì)播放視頻進(jìn)行拍照功能,方便在觀察視頻監(jiān)控情況時(shí),,如感覺某些畫面比較重要可以進(jìn)行拍照保存,。
4 視頻客戶端設(shè)計(jì)
視頻客戶端負(fù)責(zé)將視頻服務(wù)器轉(zhuǎn)發(fā)來的視頻流在客戶手機(jī)上進(jìn)行播放顯示,傳統(tǒng)的觀看監(jiān)控方式必須坐在顯示器旁邊,,大大限制了客戶的活動(dòng)范圍,,通過手機(jī)來觀看視頻監(jiān)控可以不受地域的限制,使客戶觀看視頻監(jiān)控更加靈活方便,。該系統(tǒng)客戶端包括視頻接收模塊,、視頻解碼模塊和視頻播放模塊。
?。?)接收模塊,。該模塊和視頻服務(wù)端相似,主要完成視頻流的接收工作,,在程序中創(chuàng)建一個(gè)線程接收視頻服務(wù)端傳來的視頻流并保存在一個(gè)數(shù)組中即可,。
(2)視頻解碼模塊,。該模塊主要完成對(duì)視頻服務(wù)傳來的視頻流進(jìn)行解碼的工作,。因?yàn)榻邮盏降囊曨l流是通過H.264壓縮算法進(jìn)行壓縮過的,在視頻客戶端不能直接播放,,所以在播放前首先需要對(duì)視頻流進(jìn)行解碼,。在程序中調(diào)用H.264解碼程序進(jìn)行解碼即可。
?。?)視頻播放模塊,。該模塊主要完成將視頻流在手機(jī)客戶端進(jìn)行播放顯示的功能,同時(shí)提供對(duì)播放視頻進(jìn)行拍照功能,,方便在觀察視頻監(jiān)控時(shí)可以對(duì)播放視頻進(jìn)行拍照保存,。
通過對(duì)該系統(tǒng)編碼測(cè)試,手機(jī)視頻采集端可以把監(jiān)控視頻傳輸?shù)揭曨l服務(wù)器,,同時(shí),,視頻服務(wù)器也可以將視頻轉(zhuǎn)發(fā)到手機(jī)視頻客戶端,在視頻服務(wù)端和手機(jī)視頻客戶端都可以觀看到清晰的監(jiān)控圖像,。通過實(shí)驗(yàn)證明,該3G手機(jī)移動(dòng)視頻監(jiān)控系統(tǒng)可以很好地運(yùn)行,。
本文提出了一套通過3G手機(jī)隨時(shí)隨地進(jìn)行遠(yuǎn)程視頻監(jiān)控的設(shè)計(jì)方案,,基于Android操作系統(tǒng)的3G手機(jī)都可以使用該系統(tǒng),普通的智能手機(jī)在Wi-Fi或WLAN下也可以使用該系統(tǒng)進(jìn)行監(jiān)控或接收視頻數(shù)據(jù),。在網(wǎng)絡(luò)傳輸中采用H.264壓縮編碼提高了傳輸效率,。該系統(tǒng)采用3G手機(jī)作為視頻監(jiān)控和接收端,,從而使觀看監(jiān)控更加靈活、方便,,真正達(dá)到隨時(shí)隨地監(jiān)控的效果,。隨著遠(yuǎn)程視頻監(jiān)控應(yīng)用越來越廣泛,該3G手機(jī)移動(dòng)視頻監(jiān)控系統(tǒng)將給人們的生活和工作帶來巨大的方便,。
參考文獻(xiàn)
[1] 付少華,,付紅橋,王政.基于3G網(wǎng)絡(luò)的手機(jī)移動(dòng)視頻監(jiān)控系統(tǒng)的設(shè)計(jì)[J].計(jì)算機(jī)應(yīng)用技術(shù),,2011,,31(A01):70-72.
[2] 孫松原,吳建國.基于RTP和Android的視頻傳輸?shù)难芯繉?shí)現(xiàn)方法[J].電腦知識(shí)與技術(shù),,2012(2):903-905.
[3] 謝紅華,,陸以勤,呂錦.基于3G無線網(wǎng)絡(luò)的高質(zhì)量實(shí)時(shí)視頻監(jiān)視系統(tǒng)的設(shè)計(jì)[J].計(jì)算機(jī)應(yīng)用研究,,2007(10):313-314.
[4] 余兆明,,查日勇,黃磊,,等.圖像編碼標(biāo)準(zhǔn)H.264技術(shù)[M].北京:人民郵電出版社,,2006.