摘要:針對網(wǎng)絡(luò)攝像機(jī)掉電易造成文件系統(tǒng)損壞的情況,提出了一種基于原始文件系統(tǒng)RawFS的網(wǎng)絡(luò)攝像機(jī)SD卡存儲算法。該算法通過直接針對SD卡操作有效地解決了文件系統(tǒng)掉電損壞問題,并減少SD卡的磨損程度,延長SD卡的使用壽命。
關(guān)鍵詞:網(wǎng)絡(luò)攝像機(jī);RawFS;SD卡錄像;算法
0 引言
隨著科技的發(fā)展、計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)與通信技術(shù)的成熟以及互聯(lián)網(wǎng)的普及,新一代的監(jiān)控產(chǎn)品——網(wǎng)絡(luò)攝像機(jī)應(yīng)運(yùn)而生。前端一體化、視頻數(shù)字化、監(jiān)控網(wǎng)絡(luò)化、系統(tǒng)集成化是視頻監(jiān)控系統(tǒng)公認(rèn)的發(fā)展方向,而數(shù)字化是網(wǎng)絡(luò)化的前提,網(wǎng)絡(luò)化又是系統(tǒng)集成化的基礎(chǔ),所以,視頻監(jiān)控發(fā)展的最大兩個特點(diǎn)就是數(shù)字化和網(wǎng)絡(luò)化。基于網(wǎng)絡(luò)化和數(shù)字化發(fā)展的網(wǎng)絡(luò)攝像機(jī),集鏡頭、圖像傳感器、A/D轉(zhuǎn)換器、DSP芯片、ROM、RAM、嵌入式操作系于一身能夠完成接收圖像信號、模擬信號轉(zhuǎn)換成數(shù)字信號、圖像的壓縮與編碼、圖像的傳輸?shù)纫幌盗械倪^程。其特有的32位的精簡指令系統(tǒng)(RISC)的信號處理器(DsP)芯片以及穩(wěn)定的嵌入式操作系統(tǒng),使其具有每秒鐘25幀的流暢瀏覽效果。只要使用一根網(wǎng)線、—個電源就能連接到遍布全球的互聯(lián)網(wǎng)絡(luò)。
SD卡錄像作為網(wǎng)絡(luò)攝像機(jī)的一種本地保存手段可以有效地解決網(wǎng)絡(luò)攝像機(jī)因?yàn)榫W(wǎng)絡(luò)問題造成遠(yuǎn)程錄像質(zhì)量下降的問題。SD卡在網(wǎng)絡(luò)帶寬比較窄的環(huán)境,可以在SD卡保存高清晰度的圖像;使用SD卡錄像不會因?yàn)榫W(wǎng)絡(luò)的斷開而造成數(shù)據(jù)丟失。所以SD卡錄像對網(wǎng)絡(luò)攝像機(jī)有非常重要的現(xiàn)實(shí)意義。
本文提出一種在嵌入式Linux平臺下,基于原始文件系統(tǒng)RawFS的網(wǎng)絡(luò)攝像機(jī)SD卡錄像算法,有效解決了使用FAT32,EXT3等文件系統(tǒng)存在的問題。用該方法可以避免異常斷電對文件系統(tǒng)的損害,同時可以有效適應(yīng)SD卡讀寫次數(shù)受限的特性,延長了SD卡的使用壽命。
1 網(wǎng)絡(luò)攝像機(jī)SD卡存儲需求
在設(shè)計(jì)存儲策略時,應(yīng)注意以下幾個方面:磁盤讀寫的高效性、視頻數(shù)據(jù)的連續(xù)性、檢索的快速精確性、數(shù)據(jù)一致性及可靠性、文件體系可拆卸性。作為計(jì)算機(jī)上常用的FAT32,EXT3等文件系統(tǒng),使用網(wǎng)絡(luò)攝像機(jī)SD卡錄像存在以下問題:
首先,網(wǎng)絡(luò)攝像機(jī)經(jīng)常會由于各種原因掉電,導(dǎo)致文件損壞,錄像數(shù)據(jù)丟失。如果不及時檢測損壞的文件而繼續(xù)使用,會導(dǎo)致文件系統(tǒng)的不穩(wěn)定,嚴(yán)重時甚至?xí)绊懛謪^(qū)表和根目錄區(qū)造成文件系統(tǒng)崩潰。
其次,這些文件體系會產(chǎn)生磁盤碎片,在視頻監(jiān)控系統(tǒng)中由于24小時不間斷地寫入,磁盤碎片的現(xiàn)象非常明顯,這必然會影響磁盤IO的速度。
第三,SD卡的每一個扇區(qū)都有寫入次數(shù)的限制,文件系統(tǒng)在每建立一個文件時都需要修改文件分配表,相應(yīng)區(qū)域的寫入次數(shù)大大增加,從而導(dǎo)致這些區(qū)域損壞。
2 存儲結(jié)構(gòu)
本算法讓原始文件系統(tǒng)Raw FS直接訪問SD卡,將SD卡作為一個線性存儲空間。這個空間的頭部信息中包含整個SD卡的信息,包括SD卡是否已經(jīng)使用本算法錄像過,是否已經(jīng)寫滿循環(huán),沒有寫滿時最后一分鐘錄像的存儲位置,寫滿時最后一分鐘錄像的存儲位置等信息。
錄像以分鐘為單位依次保存在這個線性存儲空間中,每一分鐘錄像信息頭部都包含一個特殊碼,表示這一分鐘錄像是有效的,同時包含上一天最后一分鐘錄像的起始位置,上一小時最后一分鐘錄像的起始位置,上一分鐘起始位置信息,以及所有這一分鐘中I幀所在的位置信息。
錄像存儲開始時第一分鐘從位置SP開始寫,然后第二分鐘接著第一分鐘后的512個扇區(qū)(256KB)整數(shù)倍的位置開始寫,當(dāng)寫到結(jié)束位置后重新從開始位置開始寫。寫完一遍以后從頭開始循環(huán)寫、當(dāng)循環(huán)寫時,同時在內(nèi)存中保存最末一分鐘的起始位置LP與最早一分鐘的起始位置FP。
3 算法描述
每次系統(tǒng)啟動時都會保留存儲錄像的開始位置,結(jié)束位置,最早一分鐘起始位置與最末一分鐘起始位置信息。每一分鐘錄像開始的時候會從最末一分鐘錄像結(jié)束位置后的512個扇區(qū)(256KB)整數(shù)倍位置開始寫入。如果這一分鐘之后有老的錄像資料,將覆蓋老的資料。當(dāng)寫完一分鐘的時候,更新最末一分鐘與最早一分鐘的位置信息。
由于最末一分鐘與最早一分鐘的信息是每分鐘都在改變,所以不能將這個信息存儲在SD卡中。否則,會造成存儲這個信息扇區(qū)不停地被寫入而最早損壞。所以在系統(tǒng)剛啟動的時候需要對SD卡進(jìn)行搜索,重建這些信息。
3.1啟動搜索算法
啟動時的搜索分為兩種情況。第一種情況是SD卡還沒有被寫滿的情況,另外一種情況時SD卡已經(jīng)被寫滿。在SD卡沒有被寫滿的情況下,開始位置即為最早時間,結(jié)束位置即為最末時間。SD卡寫滿的情況下的搜索算法如圖2所示。
3.2錄像回放搜索算法
錄像回放一般要從指定的時間點(diǎn)開始播放錄像數(shù)據(jù),所以需要根據(jù)指定的時刻找到錄像所在的位置。搜索方法與搜索最早最末分鐘錄像所在位置的算法類似。首先要找到指定時間所在的區(qū)域,分為三種情況:
(1)開始位置與最末時間之間。
(2)最早時間與結(jié)束時間之間。
(3)其他位置。
對于第三種情況系統(tǒng)直接返回錯誤。對于第一種、第二種情況,先得到比較晚的時間,然后根據(jù)上一天,上一小時,上一分鐘位置信息找到對應(yīng)的錄像頭部信息所在的位置。然后根據(jù)I幀表,找到對應(yīng)的秒的位置,開始播放。
4 算法分析與實(shí)驗(yàn)結(jié)果
在本算法中,由于只緩沖最后一分鐘錄像的數(shù)據(jù),攝像機(jī)的掉電只會造成最后一分鐘的數(shù)據(jù)的丟失,所以不會像普通文件系統(tǒng)一樣對SD卡的整個文件系統(tǒng)結(jié)構(gòu)造成損壞。同時SD卡空間的循環(huán)使用使得每一分鐘的資料都是連續(xù)的,在錄像的過程不會產(chǎn)生碎片,這有效提高了SD卡的使用效率。
回放搜索也有比較高的效率。一般16G的SD卡可以錄10天左右的錄像,在回放的時候最壞的情況下只需要搜索91次找到播放的位置,每一次搜索需要讀取一個扇區(qū)的空間,總共需要讀取45K左右的數(shù)據(jù),而一般SD卡的讀取速度在1MB/s以上,所以讀取所占的時間在45ms左右,完全在可接受的范圍之內(nèi)。如果回放的起始時間點(diǎn)在整個時間段內(nèi)均勻分布,那么平均搜索時間為22.5ms。
我們使用100M內(nèi)存模擬SD卡。在這個模擬的SD卡上使用FAT32結(jié)構(gòu)與本算法。在FAT32文件系統(tǒng)上,每一分鐘使用一個文件。同時定義每一分鐘文件的大小是1M。寫1500分鐘的文件,統(tǒng)計(jì)了每個Sector被寫的次數(shù),結(jié)果如圖3所示。
從統(tǒng)計(jì)結(jié)果發(fā)現(xiàn),使用本文算法每個扇區(qū)最大被寫的次數(shù)是16次,而使用FAT32文件系統(tǒng)被寫100次左右的扇區(qū)達(dá)1%左右,最多的甚至被寫200次以上。所以實(shí)驗(yàn)結(jié)果表明,本文算法可以使SD卡的寫操作均勻化,極大減少了最大寫入次數(shù)。
5 結(jié)束語
本文所提出的一種基于原始文件系統(tǒng)Raw FS的SD卡錄像算法,有效解決了網(wǎng)絡(luò)攝像機(jī)掉電造成的文件系統(tǒng)損壞問題,并且有效減少了磁盤碎片,在可以接受的范圍實(shí)現(xiàn)了錄像點(diǎn)的定位搜索。同時實(shí)驗(yàn)表明該算法可以有效減少SD卡的磨損,大大延長了SD卡的使用壽命。該算法具有現(xiàn)實(shí)使用價(jià)值。