趙國開,馬洪兵,陳從華
(1.清華大學(xué) 電子工程系,北京 100084;2.廈門雅迅網(wǎng)絡(luò)股份有限公司 福建 廈門 361008)
一種無線車載視頻監(jiān)控專用文件系統(tǒng)的設(shè)計(jì)
趙國開1,2,馬洪兵1,陳從華2
(1.清華大學(xué) 電子工程系,北京 100084;2.廈門雅迅網(wǎng)絡(luò)股份有限公司 福建 廈門 361008)
本文針對(duì)現(xiàn)有無線車載視頻監(jiān)控設(shè)備上在用的文件系統(tǒng)的不足之處,提出了一種滿足無線車載視頻監(jiān)控應(yīng)用的流式文件系統(tǒng)。本文從文件系統(tǒng)結(jié)構(gòu),存儲(chǔ),讀取,檢索等各方面闡述了設(shè)計(jì)方案。流式文件系統(tǒng)已經(jīng)在一些實(shí)際項(xiàng)目上批量投產(chǎn)使用,能很好的解決現(xiàn)有文件系統(tǒng)中的一些不足,滿足了高效,可靠,穩(wěn)定的實(shí)際訴求。
流式文件系統(tǒng);主索引塊;av存儲(chǔ)塊;數(shù)據(jù)節(jié);時(shí)間片
隨著傳輸速率越來越快的3G和4G業(yè)務(wù)在國內(nèi)的逐漸推廣,助推了無線車載視頻監(jiān)控行業(yè)的快速發(fā)展。無線車載視頻監(jiān)控系統(tǒng)采用3G/4G通信傳輸技術(shù)并輔以成熟的gps技術(shù)可對(duì)各種車輛進(jìn)行實(shí)時(shí)音視頻監(jiān)控、實(shí)時(shí)錄像存儲(chǔ)、歷史錄像回傳,車輛行駛軌跡跟蹤等功能,實(shí)現(xiàn)對(duì)車輛的運(yùn)行情況的全方位跟蹤。因此越來越受用戶青睞,在各行各業(yè)的運(yùn)營(yíng)車輛上的使用也越來越普及,無論是在公交車,出租車,長(zhǎng)途客運(yùn)車,還是物流配送車,銀行運(yùn)鈔車,110警車等等都能看到無線車載視頻監(jiān)控設(shè)備的身影。而伴隨著交通部即將推出的車載視頻技術(shù)標(biāo)準(zhǔn),原來2G業(yè)務(wù)下車載gps設(shè)備將會(huì)往3G/4G車載gps視頻設(shè)備升級(jí),在市場(chǎng)需求和國家政策的推動(dòng)下未來車載無線視頻將在運(yùn)營(yíng)車輛上得到越來越廣泛的使用[1-2]。
對(duì)車載視頻監(jiān)控系統(tǒng)來說,音視頻存儲(chǔ)技術(shù)是關(guān)鍵的技術(shù),而現(xiàn)在一些主流文件系統(tǒng)并不適合這種場(chǎng)合的數(shù)據(jù)存儲(chǔ)或者說或多或少存在一些不足,首先就存儲(chǔ)效率來說,現(xiàn)有的主流文件系統(tǒng)一般都需要對(duì)音視頻數(shù)據(jù)按時(shí)間間隔進(jìn)行分包存儲(chǔ)(例如30分鐘存儲(chǔ)一個(gè)文件),因?yàn)榇鎯?chǔ)介質(zhì)滿了之后需要檢索一些舊文件進(jìn)行刪除,保證新錄下來的音視頻數(shù)據(jù)能夠存儲(chǔ)下來,這樣連續(xù)的存儲(chǔ)、刪除帶來的不僅帶來磁盤碎片,而且磨損平衡算法做的不好導(dǎo)致存儲(chǔ)介質(zhì)壽命不高[3]。其次一般主流的文件系統(tǒng)都需要掛載后才能使用,特別是日志型文件系統(tǒng)掛載時(shí)需要進(jìn)行合法性、完整性檢驗(yàn),掛載比較費(fèi)時(shí),如果文件系統(tǒng)一些數(shù)據(jù)遭破壞,這個(gè)時(shí)間會(huì)更長(zhǎng),甚至掛載不上,無法使用[4]。再次車輛環(huán)境不可避免的出現(xiàn)異常斷電的情況,導(dǎo)致音視頻數(shù)據(jù)嚴(yán)重丟失,甚至文件系統(tǒng)損壞無法使用的情況,常常在出現(xiàn)意外情況客戶要調(diào)取相應(yīng)時(shí)段的音視頻數(shù)據(jù)時(shí),卻無法調(diào)取這給客戶非常不好的體驗(yàn),導(dǎo)致客戶投訴激增。因此一個(gè)高效,穩(wěn)定,可靠的文件系統(tǒng)對(duì)車載視頻監(jiān)控系統(tǒng)而言至關(guān)重要。本文就針對(duì)音視頻存儲(chǔ)的特點(diǎn)和現(xiàn)實(shí)訴求設(shè)計(jì)了一個(gè)針對(duì)這種場(chǎng)合應(yīng)用的文件系統(tǒng)。
本文設(shè)計(jì)的文件系統(tǒng)取名流式文件系統(tǒng),因?yàn)榇蟛糠智闆r下數(shù)據(jù)能按照字符流的方式被有序訪問。流式文件系統(tǒng)適用于的存儲(chǔ)介質(zhì)有SD卡,固態(tài)硬盤和機(jī)械硬盤等(現(xiàn)在車載視頻設(shè)備用來存儲(chǔ)音視頻數(shù)據(jù)的主要三種存儲(chǔ)介質(zhì))?,F(xiàn)在車載視頻監(jiān)控設(shè)備大多采用Linux操作系統(tǒng),因此流式文件系統(tǒng)主要在Linux操作系統(tǒng)進(jìn)行設(shè)計(jì),驗(yàn)證和測(cè)試,當(dāng)然也可以移植到其他操作系統(tǒng)上。
流式文件系統(tǒng)不對(duì)接虛擬文件系統(tǒng),因此應(yīng)用程序可以直接調(diào)用流式文件系統(tǒng)的相關(guān)接口進(jìn)行操作如圖1所示,這樣不僅提高了效率,而且無需對(duì)文件系統(tǒng)進(jìn)行掛載而避免了因掛載而出現(xiàn)的問題[5]。
圖1 流式文件系統(tǒng)在Linux系統(tǒng)中的框架圖Fig.1 Streaming file system in Linux system framework
下文拿硬盤作為存儲(chǔ)介質(zhì)來介紹設(shè)計(jì)思路,SD卡也類似。流式文件系統(tǒng)把硬盤設(shè)計(jì)為兩個(gè)分區(qū):擴(kuò)展分區(qū)和音視頻數(shù)據(jù)分區(qū)。其中從0扇區(qū)開始到2 G字節(jié)處,作為擴(kuò)展分區(qū),以便用來作為被擴(kuò)展的用途進(jìn)行功能擴(kuò)充,音視頻數(shù)據(jù)存儲(chǔ)從線性地址為2 G字節(jié)的開始處直至剩余空間 (如圖2所示)。
下面來具體說明下硬盤的數(shù)據(jù)分布,從2 G字節(jié)開始處,將硬盤劃分成以4M字節(jié)為單元的很多的塊,我們稱之為av存儲(chǔ)塊(即音視頻存儲(chǔ)塊),編號(hào)從0開始,直至所有剩余空間。以一個(gè)2048 G的硬盤為例子,如果以4 M為單元?jiǎng)澐謮K,總共有524288個(gè)av存儲(chǔ)塊,如果為每一個(gè)av存儲(chǔ)塊建立一個(gè)4字節(jié)的索引,則需要2 M字節(jié)。這樣索引塊非常大,因?yàn)樗饕龎K非常重要,盡可能不要出錯(cuò),因此索引塊盡可能小,索引我們?cè)O(shè)計(jì)將每16個(gè)av存儲(chǔ)塊對(duì)應(yīng)一個(gè)4字節(jié)的索引,這樣,一個(gè)2048 G的硬盤只需要200 k的索引。同時(shí)我們將硬盤從0扇區(qū)開始處的連續(xù)2個(gè)4M字節(jié)的塊作為av存儲(chǔ)塊的索引塊,一個(gè)作為av主索引塊,一個(gè)作為av主索引塊的備份塊。av索引塊被分成很多4字節(jié)的單元,第0個(gè)4字節(jié)存儲(chǔ)第0個(gè)av存儲(chǔ)塊的錄制時(shí)間,第1個(gè)4字節(jié)存儲(chǔ)第16個(gè)av存儲(chǔ)塊的錄制時(shí)間,第2個(gè)4字節(jié)存儲(chǔ)第32個(gè)av存儲(chǔ)塊的錄制時(shí)間,依次類推。根據(jù)這樣的映射關(guān)系,從av索引塊上的獲得時(shí)間后,可以直接定位到該時(shí)間對(duì)應(yīng)的av存儲(chǔ)塊的位置。整個(gè)硬盤的音/視頻數(shù)據(jù)和對(duì)應(yīng)的索引的映射如圖3所示[6-7]。
圖2 硬盤分區(qū)結(jié)構(gòu)圖Fig.2 Hard disk partition structure diagram
圖3 音/視頻數(shù)據(jù)和對(duì)應(yīng)的索引的映射圖Fig.3 Audio/video data and corresponding index map
從av索引塊獲得時(shí)間,進(jìn)而定位到該時(shí)間對(duì)應(yīng)的av塊的位置有一個(gè)不足之處,就是每16個(gè)av存儲(chǔ)塊才記錄了一個(gè)索引,因此時(shí)間粒度比較粗糙,如果想進(jìn)一步獲得更細(xì)的時(shí)間粒度,可以讀取av存儲(chǔ)塊本身的內(nèi)容。為了鑒別正在使用的硬盤是否為我們用來存儲(chǔ)av存儲(chǔ)塊數(shù)據(jù)的硬盤,在av主索引塊4 M字節(jié)的最后16個(gè)字節(jié)全部填寫為0x55。在av索引塊中,使用連續(xù)4個(gè)字節(jié)的0xaa來表達(dá)最近記錄的錄像時(shí)間就是0xaaaaaaaa的上一個(gè)索引,如果硬盤初始化應(yīng)該根據(jù)av塊的個(gè)數(shù)將對(duì)應(yīng)的索引全部記錄為0xaa表明當(dāng)前沒有記錄任何數(shù)據(jù)。
av存儲(chǔ)塊的數(shù)據(jù)分布說明:每一個(gè)av存儲(chǔ)塊共4 M字節(jié),這4 M字節(jié)共分為1024個(gè)數(shù)據(jù)節(jié),每個(gè)數(shù)據(jù)節(jié)為4096 (4 k)個(gè)字節(jié)(這里規(guī)定為4 k字節(jié)主要是為了方便硬盤的尋址,因?yàn)楝F(xiàn)在市面上很多硬盤的物理扇區(qū)為4k字節(jié),這樣,將section大小定義為4 k,當(dāng)我們尋址出錯(cuò)的時(shí)候,很容易尋址到下一個(gè)節(jié))。每個(gè)av存儲(chǔ)塊的第0個(gè)數(shù)據(jù)節(jié)我們稱之為av頭節(jié),他的內(nèi)容分布:標(biāo)志+錄制時(shí)間+數(shù)據(jù)連續(xù)標(biāo)志(和上一av存儲(chǔ)塊的數(shù)據(jù)是否連續(xù))+每個(gè)通道是否有音視頻數(shù)據(jù)+gps信息+觸發(fā)事件+保留區(qū)。av頭節(jié)結(jié)構(gòu)如圖4所示。
圖4 av存儲(chǔ)塊結(jié)構(gòu)分布圖Fig.4 av block structure
每個(gè)av存儲(chǔ)塊第1至第1023個(gè)數(shù)據(jù)節(jié)我們稱之為av數(shù)據(jù)節(jié),他的內(nèi)容分布:標(biāo)志+錄制時(shí)間+音頻或視頻輸入通道號(hào)+編碼參數(shù)+有效數(shù)據(jù)長(zhǎng)度+保留+音視頻數(shù)據(jù)。av數(shù)據(jù)節(jié)結(jié)構(gòu)如圖4所示。
我們?yōu)橐宦窋z像頭分配兩個(gè)環(huán)形緩存區(qū),一個(gè)音頻環(huán)形緩存區(qū)、一個(gè)視頻環(huán)形緩存區(qū),這樣可以實(shí)現(xiàn)預(yù)錄的功能,也就是說在事件觸發(fā)之前放入到緩沖區(qū)的數(shù)據(jù),在事件觸發(fā)后可以寫入到硬盤。為了方便隨后向硬盤的av存儲(chǔ)塊寫入數(shù)據(jù),我們將一個(gè)環(huán)形緩存區(qū)的長(zhǎng)度設(shè)為一個(gè)av數(shù)據(jù)節(jié)的整數(shù)倍,并規(guī)定每次向環(huán)形緩存區(qū)寫入一個(gè)av數(shù)據(jù)節(jié)數(shù)據(jù)。
每一個(gè)環(huán)形緩存區(qū)每次只能寫入1路音頻或者視頻數(shù)據(jù)。如果有多個(gè)線程在接收多個(gè)攝像頭的編碼數(shù)據(jù),則可以在每一個(gè)線程中都調(diào)用2個(gè)環(huán)形緩存區(qū)分別寫入音頻和視頻數(shù)據(jù)。寫入環(huán)形緩沖區(qū)的音視頻數(shù)據(jù),并沒有馬上寫入到硬盤,直到收到寫入硬盤請(qǐng)求消息,才會(huì)寫入硬盤。
如果收到寫入硬盤的請(qǐng)求,則創(chuàng)建一個(gè)工作線程,將先前寫入到環(huán)形緩沖區(qū)的數(shù)據(jù)寫入到硬盤,并且將接下來寫入到環(huán)形緩沖區(qū)的數(shù)據(jù)也寫入到硬盤。整個(gè)寫入過程見圖5,寫入步驟如下:
1)輪詢所有用到的環(huán)形緩存區(qū)第一個(gè)未讀的av數(shù)據(jù)節(jié),并獲取相應(yīng)的錄制時(shí)間。
2)對(duì)比這些av數(shù)據(jù)節(jié)的錄制時(shí)間,并找到錄制時(shí)間最早的那一個(gè)av數(shù)據(jù)節(jié)。
3)讀取最早的那一個(gè)av數(shù)據(jù)節(jié)數(shù)據(jù),并寫入硬盤的av存儲(chǔ)塊中。
①如果向其寫入的av數(shù)據(jù)節(jié),剛好是av存儲(chǔ)塊的第1 個(gè)av數(shù)據(jù)節(jié)則同時(shí)更新這個(gè)av存儲(chǔ)塊的av頭節(jié)。
②如果向其寫入的av數(shù)據(jù)節(jié),剛好是av存儲(chǔ)塊的第1023個(gè)av數(shù)據(jù)節(jié)并且這個(gè)av存儲(chǔ)塊剛好是大數(shù)據(jù)塊的第15個(gè)av存儲(chǔ)塊,則更新主索引塊和備份索引。
圖5 音視頻數(shù)據(jù)寫入硬盤示意圖Fig.5 Audio and video data is written to disk schematic
③如果大數(shù)據(jù)塊n(即硬盤的最后一個(gè)大數(shù)據(jù)塊)已經(jīng)寫滿,下一次從大數(shù)據(jù)塊0開始覆蓋循環(huán)寫。
4)跳到步驟1)直到所有用到的環(huán)形緩存區(qū)數(shù)據(jù)都讀完。
因?yàn)橐粢曨l數(shù)據(jù)存儲(chǔ)的時(shí)候是嚴(yán)格按時(shí)間順序進(jìn)行存儲(chǔ)的,所以當(dāng)需要從硬盤中讀取某路音頻或者視頻的數(shù)據(jù)的時(shí)候,只需輸入查詢的起始時(shí)間和查詢的結(jié)束時(shí)間就可以準(zhǔn)確定位到需要讀取音/視頻數(shù)據(jù)的起始地址和結(jié)束地址,繼而利用起始地址開和結(jié)束地址輕松的去讀取需要的數(shù)據(jù)。如圖6所示,具體分為3個(gè)步驟實(shí)現(xiàn):
1)創(chuàng)建一個(gè)流,需要指定查詢的通道號(hào)(也可以是所有通道),查詢的起始時(shí)間,查詢的結(jié)束時(shí)間,創(chuàng)建成功會(huì)返回了該流的句柄stream_handle;
2)利用上一步驟創(chuàng)建的流句柄,從流中不斷循環(huán)讀取數(shù)據(jù);
3)不在需要讀取數(shù)據(jù)后,關(guān)閉流。
注意以上3個(gè)步驟必須配套實(shí)現(xiàn),缺一不可。如圖6所示,如果剛好讀到av存儲(chǔ)塊4 M的頭,則讀取av頭節(jié)+av數(shù)據(jù)節(jié)否則只讀取av數(shù)據(jù)節(jié)。另外,如果多個(gè)線程需要讀取多個(gè)通道的數(shù)據(jù),則每讀取一個(gè)通道或者每讀取同一個(gè)通道的不同的時(shí)間段,都需要重新創(chuàng)建一個(gè)流來進(jìn)行讀取。同一個(gè)流的句柄不能在多個(gè)線程中同時(shí)使用,否則會(huì)出現(xiàn)數(shù)據(jù)分流或其他意想不到的情況。
圖6 從硬盤讀取音/視頻數(shù)據(jù)示意圖Fig.6 Audio/video data read from the hard disk
類似讀取數(shù)據(jù),當(dāng)需要從硬盤中搜索某路音頻或者視頻的數(shù)據(jù)的時(shí)候,只需輸入搜索的起始時(shí)間和搜索的結(jié)束時(shí)間就可以從硬盤中讀取出滿足通道號(hào)和時(shí)間段要求的時(shí)間片。搜索并不讀取數(shù)據(jù)本身,只是讀取時(shí)間片信息。在指定的時(shí)間段之內(nèi)如果音視頻數(shù)據(jù)不是連續(xù)存儲(chǔ)的(可能設(shè)備復(fù)位等造成的存儲(chǔ)中間斷開),則會(huì)還回多個(gè)時(shí)間片,最多可以還回256個(gè)時(shí)間片,每個(gè)時(shí)間片包含起始時(shí)間,結(jié)束時(shí)間,是否有音視頻數(shù)據(jù),音視頻數(shù)據(jù)的編碼參數(shù)等。一般應(yīng)用程序可以通過搜索指定的時(shí)間段來查詢硬盤中是否含有該時(shí)間段的音視頻數(shù)據(jù),如圖7所示。
圖7 搜索滿足要求的時(shí)間片F(xiàn)ig.7 Search meet the requirements of time slice
至此流式文件系統(tǒng)主要結(jié)構(gòu)已經(jīng)基本介紹完畢。流式文件系統(tǒng)根據(jù)無線車載視頻監(jiān)控的特點(diǎn),把持續(xù)獲取的音視頻數(shù)據(jù)流嚴(yán)格按音視頻錄制的時(shí)間順序進(jìn)行循環(huán)存儲(chǔ),這樣既保證了存儲(chǔ)效率,又防止磁盤碎片的產(chǎn)生,也保證了存儲(chǔ)介質(zhì)磨損的均衡。讀取時(shí)可按指定的時(shí)間段來進(jìn)行高效的讀取,且可同時(shí)創(chuàng)建多個(gè)讀取流進(jìn)行讀取而互不影響。同樣檢索可按時(shí)間段進(jìn)行檢索,如果時(shí)間段內(nèi)有數(shù)據(jù)則還回檢索到的時(shí)間片。流式文件系統(tǒng)已經(jīng)在實(shí)際的無線車載視頻監(jiān)控設(shè)備上進(jìn)行過很好的驗(yàn)證測(cè)試,并在一些項(xiàng)目上進(jìn)行批量投產(chǎn)使用,很好的解決了之前引言介紹里面提出的一些問題,滿足了高效,可靠,穩(wěn)定的實(shí)際訴求。
[1]孟軍.車載數(shù)據(jù)記錄器中Nand Flash文件系統(tǒng)的研究[D].北京:北京交通大學(xué),2008.
[2]西剎子.安防天下:智能網(wǎng)絡(luò)視頻監(jiān)控技術(shù)詳解與實(shí)踐[M].北京:清華大學(xué)出版社,2010.
[3]邱毅凌.嵌入式系統(tǒng)開發(fā)之道:菜鳥成長(zhǎng)日志與項(xiàng)目經(jīng)理的私房菜[M].北京:人民郵電出版社,2011.
[4]Robert Love.Linux內(nèi)核設(shè)計(jì)與實(shí)現(xiàn) (原書第三版)[M].陳莉君,康華,譯.上海:機(jī)械工業(yè)出版社,2011.
[5]李宗海.基于 910GML平臺(tái)的嵌入式 Linux文件系統(tǒng)的研究與改進(jìn)[D].重慶:重慶大學(xué),2010.
[6]馮敏.基于 linux加密文件系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].濟(jì)南:山東大學(xué),2008.
[7]高永占.基于 SD卡的嵌入式文件系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].北京:北京交通大學(xué),2010.
Design of a wireless in-car video surveillance dedicated file system
ZHAO Guo-kai1,2,MA Hong-bing1,CHEN Cong-hua2
(1.Electronic Engineering,Tsinghua University,Beijing 100084,China;2.Xiamen Yaxon Network Co.,Ltd.Xiamen 361008,China)
Aiming at the shortcomings of the existing wireless car video surveillance equipment in the use of the file system,we propose a streaming file system to meet the wireless car video surveillance applications.In this paper,introduced the design from the aspects of the file system structure,storage,read and search.Streaming file system has been put into use in some practical projects,can solve some of the existing file system inadequate to meet the efficient,reliable and stable real aspirations.
streaming file system;main index blocks;av storage blocks;data section;time slice
TN919.8
A
1674-6236(2016)04-0010-04
2015-04-09 稿件編號(hào):201504081
趙國開(1983—),男,福建廈門人,中級(jí)工程師。研究方向:linux內(nèi)核,計(jì)算機(jī)測(cè)控。