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