摘要:隨著計(jì)算機(jī)技術(shù)的快速發(fā)展,基于模式識(shí)別、人工智能的視頻監(jiān)控系統(tǒng)也被研究者經(jīng)行了廣泛的研究。而視頻數(shù)據(jù)的存儲(chǔ)、檢索、單幀的提取等是這些研究的基礎(chǔ)。本文章是筆者運(yùn)用實(shí)際項(xiàng)目實(shí)踐,對(duì)H.264視頻數(shù)據(jù)的傳輸、存儲(chǔ)、檢索以及其單幀提取進(jìn)行了研究和探討。
關(guān)鍵詞:視頻監(jiān)控 H.264;視頻流存儲(chǔ);視頻流檢索;單幀提取 MySql
中圖分類號(hào):TP311.13 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1007-9599 (2012) 23-0000-02
1 網(wǎng)絡(luò)攝像頭原理簡介
網(wǎng)絡(luò)攝像頭是一項(xiàng)傳統(tǒng)數(shù)碼攝像技術(shù)與網(wǎng)絡(luò)技術(shù)相結(jié)合的產(chǎn)物。外部景像通過光學(xué)傳感器收集整理后,利用網(wǎng)絡(luò)技術(shù)傳輸?shù)礁鞣N終端,在其上進(jìn)行顯示、分析、存儲(chǔ)等操作。由于視頻數(shù)據(jù)量一般是很大的,故在傳輸前,視頻數(shù)據(jù)一般需要經(jīng)過壓縮處理。在壓縮處理時(shí),常見的壓縮格式為H.264格式。
2 網(wǎng)絡(luò)攝像頭的數(shù)據(jù)傳輸及實(shí)時(shí)視頻控制的相關(guān)協(xié)議
2.1 網(wǎng)絡(luò)攝像頭的數(shù)據(jù)傳輸
網(wǎng)絡(luò)攝像頭的用途多種多樣,這就決定了數(shù)據(jù)傳輸?shù)亩鄻有?。由于視頻數(shù)據(jù)的特殊性,對(duì)視頻數(shù)據(jù)的傳輸有一些特殊的要求,概括起來包括:
視頻數(shù)據(jù)傳輸需要一定的實(shí)時(shí)性;視頻數(shù)據(jù)傳輸在較低的帶寬下也必須可以進(jìn)行;可以存在一定的誤碼率;可以存在一定的丟包率。
為了滿足視頻傳輸?shù)倪@些要求,一些國際上的標(biāo)準(zhǔn)制定機(jī)構(gòu)經(jīng)過研究,制定了一系列相關(guān)的協(xié)議,例如RTSP、RTP、RTCP、H.264等。
2.2 實(shí)時(shí)視頻控制的相關(guān)協(xié)議
2.2.1 RTSP(實(shí)時(shí)流傳輸協(xié)議)與 HTTP(超文本傳送協(xié)議)
RTSP(Real Time Streaming Protocol),中文譯為“實(shí)時(shí)流傳輸協(xié)議”,是TCP/IP協(xié)議體系中的一個(gè)應(yīng)用層協(xié)議。主要用來控制聲音或影像的多媒體串流,并允許同時(shí)多個(gè)串流需求控制,服務(wù)器端可以自行選擇使用TCP或UDP來傳送串流內(nèi)容,其解析跟HTTP 1.1類似,部分功能也可以由HTTP協(xié)議代替。RCSP并不特別強(qiáng)調(diào)時(shí)間同步,所以比較能容忍網(wǎng)絡(luò)延遲。
由于筆者的當(dāng)前項(xiàng)目使用HTTP的功能部分替代了RTSP的功能,故不對(duì)RTSP經(jīng)行詳細(xì)分析,而是對(duì)HTTP做簡要說明。
HTTP工作在TCP/IP協(xié)議體系中的TCP協(xié)議上。現(xiàn)在WWW中使用的是HTTP/1.1,由于支持客戶/服務(wù)器模式、有長連接屬性,故其上可以承載各種數(shù)據(jù),例如最常用的HTML語言的網(wǎng)頁數(shù)據(jù)、圖片數(shù)據(jù)等。
2.2.2 RTP(實(shí)時(shí)傳送協(xié)議) 與 RTCP(RTP 控制協(xié)議)
RTP協(xié)議原理相對(duì)比較簡單,其功能負(fù)責(zé)對(duì)流媒體數(shù)據(jù)進(jìn)行封包并實(shí)現(xiàn)媒體流的實(shí)時(shí)傳輸,它按照RPT數(shù)據(jù)包格式來封裝流媒體數(shù)據(jù),并利用與它綁定的協(xié)議進(jìn)行數(shù)據(jù)包的傳輸;RTP本身只保證實(shí)時(shí)數(shù)據(jù)的傳輸,并不能為按順序傳送數(shù)據(jù)包提供可靠的傳送機(jī)制,也不提供流量控制或擁塞控制,它依靠RTCP或者底層的TCP來提供這些服務(wù)。
理解RTP的荷載格式,是解析提取視頻數(shù)據(jù)的必要條件。參考RFC 3550 [4]中的相關(guān)內(nèi)容,對(duì)RTP頭進(jìn)行分析。在使用H.264進(jìn)行視頻傳輸?shù)臅r(shí)候,每個(gè)RTP包中封裝的即是NAL單元。
在筆者的項(xiàng)目中采取的方法是,直接判斷RTP的數(shù)據(jù)類型,分離出音頻、視頻等數(shù)據(jù),然后分別存儲(chǔ)。
3 H.264格式及FFMPEG開源項(xiàng)目
3.1 H.264格式
H.264格式是實(shí)時(shí)視頻流中的常用格式,H.264是ITU-T以H.26x系列為名稱命名的視頻編解碼技術(shù)標(biāo)準(zhǔn)之一,但是由于H.264解碼的復(fù)雜性,短時(shí)間內(nèi)研究透其解碼,并進(jìn)行代碼實(shí)現(xiàn)幾乎是不可能的。綜合各方面的考慮,在查找了大量資料后,筆者發(fā)現(xiàn)開源項(xiàng)目FFMPEG可以對(duì)H.264經(jīng)行編解碼,于是在項(xiàng)目中,我選擇了使用FFMPEG經(jīng)行解碼,并輸出BMP圖像,以方便后期的模式識(shí)別。
3.2 FFMPEG開源項(xiàng)目
FFmpeg比較適合在Linux平臺(tái)下開發(fā),但它同樣也可以在其它操作系統(tǒng)環(huán)境中編譯運(yùn)行,包括Windows、Mac OS X等。在實(shí)驗(yàn)階段,筆者就選擇了再windows平臺(tái)下進(jìn)行運(yùn)行。FFmpeg是一個(gè)開源免費(fèi)跨平臺(tái)的視頻和音頻流方案,屬于自由軟件,采用LGPL或GPL許可證(依據(jù)你選擇的組件)。
FFmpeg是一套可以用來記錄、轉(zhuǎn)換數(shù)字音頻、視頻,并能將其轉(zhuǎn)化為流的開源計(jì)算機(jī)程序。它包括了目前領(lǐng)先的音/視頻編碼庫libavcodec等。
4 視頻數(shù)據(jù)流的存儲(chǔ)
視頻的存儲(chǔ)是視頻監(jiān)控中是否重要的一環(huán),有了數(shù)據(jù)存儲(chǔ),后期的數(shù)據(jù)回放、檢索才有基礎(chǔ)。為了更好的說明問題,下面以視頻存儲(chǔ)的存儲(chǔ)的需求分析、視頻存儲(chǔ)的概要設(shè)計(jì)、視頻存儲(chǔ)的設(shè)計(jì)實(shí)現(xiàn)三個(gè)方面進(jìn)行說明。
4.1 視頻存儲(chǔ)的存儲(chǔ)的需求分析
從視頻監(jiān)控系統(tǒng)需要實(shí)現(xiàn)的基本功能出發(fā),可以分析出視頻存儲(chǔ)系統(tǒng)的一些需求。首先,視頻監(jiān)控系統(tǒng)需要對(duì)監(jiān)控下來的視頻經(jīng)行回放,由此得出視頻存儲(chǔ)系統(tǒng)的基本功能就是存儲(chǔ)需求。其次,對(duì)視頻的回放需要能在給定的時(shí)間播放給定攝像頭的視頻錄像,這就涉及到視頻數(shù)據(jù)的按需(主要是按時(shí)間)檢索。然后,在一些情況下,視頻回放可能在遠(yuǎn)程終端上進(jìn)行,這就要求數(shù)據(jù)存儲(chǔ)系統(tǒng)要具備網(wǎng)絡(luò)訪問功能。最后,在后期對(duì)系統(tǒng)進(jìn)行升級(jí)等操作時(shí),可能需要對(duì)數(shù)據(jù)經(jīng)行遷移操作,這就要求數(shù)據(jù)存儲(chǔ)系統(tǒng)要有數(shù)據(jù)復(fù)制遷移功能。另外,對(duì)系統(tǒng)的穩(wěn)定性、視頻數(shù)據(jù)的保密性、存儲(chǔ)檢索的吞吐性能、后期升級(jí)的兼容性等等也有一定要求。
簡言之,視頻存儲(chǔ)系統(tǒng)有如下需求:
存儲(chǔ)需求;按需(主要是按時(shí)間)檢索需求;網(wǎng)絡(luò)訪問需求;數(shù)據(jù)復(fù)制遷移需求;系統(tǒng)的穩(wěn)定性需求;視頻數(shù)據(jù)的保密性需求;存儲(chǔ)檢索的吞吐性能需求;后期升級(jí)的兼容性需求
4.2 視頻存儲(chǔ)的概要設(shè)計(jì)
1)操作系統(tǒng)的選擇。根據(jù)視頻存儲(chǔ)的需求分析,操作系統(tǒng)選擇能夠滿足性能需求的系統(tǒng)即可。在當(dāng)前實(shí)驗(yàn)階段,由于Windows平臺(tái)下IDE非常強(qiáng)大、使用相對(duì)較為方便,暫時(shí)選擇在Windows平臺(tái)上經(jīng)行相應(yīng)的實(shí)驗(yàn)。又由于Linux操作系統(tǒng)的卓越性能,以及免費(fèi)的特性,項(xiàng)目商業(yè)化之后,Linux是比較好的選擇。故當(dāng)前雖然是在Windows上實(shí)驗(yàn),但是在代碼的編寫、其他系統(tǒng)組件的選擇時(shí),盡量使用可以跨平臺(tái)或方便移植的代碼、組件。
2)數(shù)據(jù)庫的選擇。數(shù)據(jù)存儲(chǔ)在直接使用文件系統(tǒng)和使用其他成熟的數(shù)據(jù)庫兩種方案上進(jìn)過了比較。由于直接使用文件系統(tǒng)不滿足需求分析中的網(wǎng)絡(luò)訪問需求、數(shù)據(jù)復(fù)制遷移需求等,最后選擇了使用相對(duì)較成熟的數(shù)據(jù)庫。結(jié)合操作系統(tǒng)的選擇以及跨平臺(tái)特性的要求,數(shù)據(jù)庫選擇開源的MYSQL數(shù)據(jù)庫。針對(duì)需求分析中的各種需求,MYSQL都提供了比較好的解決方案,滿足設(shè)計(jì)要求。
3)數(shù)據(jù)庫訪問技術(shù)的選擇。數(shù)據(jù)訪問技術(shù)的選擇上,在框架上兼容了各種方式的數(shù)據(jù)存儲(chǔ),現(xiàn)階段的實(shí)現(xiàn)了直接使用MySql C API的方式經(jīng)行數(shù)據(jù)存儲(chǔ)、訪問。
6 總結(jié)
本文章是智能監(jiān)控研究項(xiàng)目實(shí)現(xiàn)的基礎(chǔ)內(nèi)容,整個(gè)項(xiàng)目順利完成,必須做好這部分研究。研究的過程中,也遇到了不少問題。不知道如何請(qǐng)求到視頻數(shù)據(jù)、請(qǐng)求到數(shù)據(jù)后又不知道數(shù)據(jù)格式而無法解析。最后通過抓包工具抓取攝像頭自帶的程序的請(qǐng)求和接受數(shù)據(jù),再對(duì)這些數(shù)據(jù)經(jīng)行猜測、分析、實(shí)驗(yàn),最后還是順利的到達(dá)了想要的結(jié)果。
參考文獻(xiàn):
[1]通用視聽業(yè)務(wù)的先進(jìn)視頻編碼.ITU-T H.264建議書
[2]RFC3550中文版.實(shí)時(shí)應(yīng)用程序傳輸協(xié)議
[3]RFC2616_中文文檔.超文本傳輸協(xié)議-HTTP/1.1
[4]MSDN-vs2008.Microsoft.
計(jì)算機(jī)光盤軟件與應(yīng)用2012年23期