目前的硬盤錄像機中,基于PC和采集卡的一般采用Windows系統(tǒng),文件系統(tǒng)則多采用NTFS或FAT32;而嵌入式硬盤錄像機所采用的文件系統(tǒng)則與廠商選擇的嵌入式操作系統(tǒng)及其研發(fā)能力有密切的關(guān)系。目前嵌入式硬盤錄像機中所采用的嵌入式操作系統(tǒng)有RTOS、pSOS、嵌入式 Linux、VxWorks等,一般也都采用FAT文件系統(tǒng)。 隨著對硬盤錄像機需求的增長,傳統(tǒng)FAT格式的文件系統(tǒng)逐漸顯得有些力不從心,例如讀寫效率低,磁盤容量和分區(qū)大小有限制,有文件大小限制,沒有斷電保護功能,文件數(shù)據(jù)安全性低等。另外,長時間連續(xù)覆蓋使用后會存在大量文件碎片,降低磁盤使用率。據(jù)不完全統(tǒng)計,硬盤錄像機(DVR)的故障率60%是由硬盤引起的。這些問題在需要高安全性的安防行業(yè)顯得尤為重要,特別是當(dāng)前嵌入式數(shù)字硬盤錄像機朝高清和高路數(shù)方向發(fā)展的趨勢下,需要存儲的數(shù)據(jù)量倍增,不解決數(shù)據(jù)存儲的問題就不能滿足相關(guān)設(shè)備的安全性和穩(wěn)定性要求。PC系統(tǒng)使用的FAT文件系統(tǒng),對于長時間錄像產(chǎn)生的大數(shù)據(jù)包無法管理,只能進行分包,將一段完整的錄像,分為若干個小的文件包,如5、10、30 min自動形成一個文件,或者150 MB、200 MB作為一個文件。這樣容易產(chǎn)生包與包之間丟幀現(xiàn)象。同時,硬盤磁頭需要頻繁地讀寫數(shù)據(jù)與文件索引,磁頭頻繁跳動,對于每天十幾~24小時連續(xù)讀寫硬盤的DVR系統(tǒng),極易造成硬盤故障。硬盤錄滿后,需要刪除整段文件,但新錄制的文件與老的文件大小不同,由此會在硬盤上產(chǎn)生大量碎片空間,影響硬盤的使用和系統(tǒng)效率。此外,F(xiàn)AT文件系統(tǒng)用做錄像機錄像資料管理還存在兩個風(fēng)險:一是文件分配表如果損壞,則錄像資料大多會丟失;二是系統(tǒng)突然斷電或遭到人為破壞,當(dāng)前的錄像數(shù)據(jù)不能保存和恢復(fù)。 錄像監(jiān)控行業(yè)的趨勢是高清晰度和高集成度。高清晰度必然產(chǎn)生更大的數(shù)據(jù)量,原來一臺硬盤錄像機一般只有4路或8路,對文件系統(tǒng)的要求不是很高。現(xiàn)在16路以上的也已較為普遍,特別是網(wǎng)絡(luò)集中存儲方式出現(xiàn),一臺設(shè)備可能需要存儲幾十路甚至上百路的視頻數(shù)據(jù),如何可靠、安全、快捷地實現(xiàn)大量視頻數(shù)據(jù)的存儲和檢索就成為一個亟待解決的突出問題。 為彌補FAT文件系統(tǒng)在媒體數(shù)據(jù)流存儲領(lǐng)域中的不足之處,本文提出一種適合媒體數(shù)據(jù)流存儲方式的硬盤管理文件系統(tǒng),該系統(tǒng)可以高效率地管理整個硬盤,克服FAT文件系統(tǒng)的固有缺陷。 1 理論分析 本文提出的嵌入式視頻專用文件系統(tǒng)的基本原理是把硬盤所有扇區(qū)劃分為幾個數(shù)據(jù)區(qū):文件信息區(qū)、索引信息區(qū)和數(shù)據(jù)區(qū)。數(shù)據(jù)區(qū)又劃分為若干個數(shù)據(jù)塊,數(shù)據(jù)塊的大小可以根據(jù)實際情況自由設(shè)置。通過文件信息和索引信息來管理數(shù)據(jù)塊,即相當(dāng)于把硬盤模擬成傳統(tǒng)的模擬錄像帶,錄像文件長度可從幾s到幾十小時,數(shù)據(jù)可從幾KB到幾十TB。采用這種硬盤管理方式,克服了FAT系統(tǒng)對長時間錄像管理存在的缺陷。由于數(shù)據(jù)是連續(xù)存儲,因此不存在丟幀或丟數(shù)據(jù)的情況,并且每個扇區(qū)也能實現(xiàn)均衡讀寫,延長硬盤使用壽命;硬盤錄滿后,采用數(shù)據(jù)塊覆蓋技術(shù),不存在硬盤碎片,也能最大限度保留磁盤的錄像資料。硬盤任何地方的錯誤,不會影響前面或后面的錄像。在突然斷電的情況下,也能保存斷電前瞬間的圖像。同時,原始錄像資料盤數(shù)據(jù)與PC不兼容,無法在PC上直接修改和查看,保證原始資料的保密性和安全性。 設(shè)計思想是把硬盤記錄數(shù)據(jù)的扇區(qū)劃分為一個一個的數(shù)據(jù)塊,并通過索引信息(索引塊)為每個數(shù)據(jù)塊建立索引,快速定位每個錄像文件或某個時間對應(yīng)的數(shù)據(jù)塊;通過每個數(shù)據(jù)塊的鏈表又可以快速定位相關(guān)聯(lián)的前后數(shù)據(jù)塊的位置。由于同一個視頻源所產(chǎn)生的視頻數(shù)據(jù)是嚴(yán)格按照時間來錄像的,所以同一個視頻源對應(yīng)的文件信息、索引信息和數(shù)據(jù)塊在機制上就保證了嚴(yán)格按照時間順序來排序。但由于存在多路視頻和音頻數(shù)據(jù),數(shù)據(jù)的產(chǎn)生和存儲位置是隨機的,所以必須通過索引和鏈表來把這些隨機的數(shù)據(jù)塊組織成一個個獨立的錄像文件。 2 文件系統(tǒng)結(jié)構(gòu) 對硬盤所有扇區(qū)進行了重新劃分,共劃分為5個區(qū)域,分別為磁盤信息區(qū)、保留信息區(qū)、文件信息區(qū)、索引信息區(qū)、數(shù)據(jù)區(qū)。 通過磁盤信息可以找到文件信息、索引信息、數(shù)據(jù)區(qū)及保留信息區(qū)。而通過文件信息又可得到索引信息,從而通過索引信息單元找到數(shù)據(jù)塊。這些磁盤區(qū)域的關(guān)聯(lián)關(guān)系如圖1所示。 圖1 文件系統(tǒng)關(guān)系圖 2.1 磁盤信息區(qū) 磁盤信息區(qū)的位置固定,用于保存當(dāng)前磁盤信息和文件系統(tǒng)基本信息,如記錄每個區(qū)域的具體位置和大小、信息區(qū)的使用情況、最后數(shù)據(jù)塊位置等。下面為典型的磁盤信息結(jié)構(gòu): typedef STruct { UInt32 Formatted;/*格式化標(biāo)志*/ UInt32 DBN_Num;/*總數(shù)據(jù)塊數(shù)*/ UInt32 DBN_Size;/*數(shù)據(jù)塊的大小*/ UInt32 DBN_Begin;/*當(dāng)前可用數(shù)據(jù)塊開始地址*/ UInt32 CurrentFAT;/*當(dāng)前所用的分區(qū)*/ UInt32 OtherInfoBlockAddr; /*保留信息區(qū)開始扇區(qū)*/ UInt32 OtherInfoBlockSize;/*保留信息區(qū)大小*/ UInt32 FileInfoBlockAddr[MAX_CHANNEL]; /*文件信息塊開始扇區(qū)*/ UInt32 FileInfoBlockSize;/*文件信息區(qū)大小*/ UInt32 IndexInfoBlockAddr[ MAX_CHANNEL];/*索引信息塊開始扇區(qū)*/ UInt32 IndexInfoBlockSize;/*索引信息區(qū)大小*/ } DiskInfo; 2.2 保留信息區(qū) 保留信息區(qū)用于保存其他系統(tǒng)信息,如操作日志信息、系統(tǒng)設(shè)置信息等,此區(qū)域大小可自由設(shè)定。 2.3 文件信息區(qū) 文件信息區(qū)用于保存錄像文件的文件信息,如錄像開始和結(jié)束時間,第一個數(shù)據(jù)塊和最后一個數(shù)據(jù)塊的位置,索引信息的位置和其他文件信息。每個文件的數(shù)據(jù)結(jié)構(gòu)和大小固定。通過文件序號就可以準(zhǔn)確定位文件信息的具體位置。 文件信息區(qū)分兩個部分,分別為分區(qū)一和分區(qū)二,用于描述覆蓋前的文件信息和覆蓋后的文件信息。每個分區(qū)根據(jù)最大文件數(shù)按錄像路數(shù)順序分配存儲空間。 每個文件信息包含以下信息:文件開始時間和結(jié)束時間,文件開始索引塊地址和結(jié)束索引塊地址,文件開始數(shù)據(jù)塊地址和結(jié)束數(shù)據(jù)塊地址等。下面為典型的文件信息結(jié)構(gòu): typedef struct { UInt32 FileID;/*文件序號*/ time_t FileStartTime;/*錄像開始時間*/ time_t FileEndTime;/*錄像結(jié)束時間*/ UInt32 FileStartDBN;/*文件開始DBN*/ UInt32 FileEndDBN;/*文件結(jié)束DBN*/ IndexInfoAddr IndexInfoStart;/*索引信息開始地址*/ IndexInfoAddr IndexInfoEnd;/*索引信息結(jié)束地址*/ } FileInfo; 2.4 索引信息區(qū) 索引信息區(qū)用于保存錄像文件所使用數(shù)據(jù)塊的索引信息。索引信息也分為兩部分,分別為分區(qū)一和分區(qū)二,用于描述覆蓋前和覆蓋后的索引信息。每個分區(qū)根據(jù)最大文件數(shù)按錄像路數(shù)順序分配存儲空間。 每個錄像文件至少需要使用一個索引塊,每個索引塊包含N個索引信息,一個數(shù)據(jù)塊對應(yīng)一個索引信息。每個索引信息描述下一個數(shù)據(jù)塊的物理偏離和時間偏移,每個索引塊描述本索引塊所描述第一個數(shù)據(jù)塊的物理地址和時間偏移。典型的數(shù)據(jù)結(jié)構(gòu)如下: typedef struct { UInt8 TimeOffset;/*與上一個數(shù)據(jù)塊的時間偏移*/ UInt8 DBNOffset;/*與上一個數(shù)據(jù)塊的物理偏移*/ } IndexInfo; /*索引信息*/ typedef struct { UInt16 BeginDBN;/*本索引塊的起始數(shù)據(jù)塊地址*/ UInt16 TimeOffset;/*本索引塊與上一個索引塊的時間偏移*/ IndexInfo IndexInfo[N]; } IndexBlockInfo; /*索引塊信息,包含N個索引信息*/ 2.5 數(shù)據(jù)區(qū) 數(shù)據(jù)區(qū)是指整個磁盤空間除了用于以上文件系統(tǒng)開銷外的所有空間,重新劃分為若干個數(shù)據(jù)塊,數(shù)據(jù)塊的大小可以自由設(shè)置。數(shù)據(jù)塊是指錄像數(shù)據(jù)保存的最小單元,一般以32"512 KB之間為宜,每個數(shù)據(jù)塊的頭部保留幾個字節(jié)用于保存本數(shù)據(jù)塊的時間戳和相關(guān)數(shù)據(jù)塊的地址偏移。數(shù)據(jù)塊的結(jié)構(gòu)如圖2所示。 圖2 數(shù)據(jù)塊結(jié)構(gòu)示意圖 文件系統(tǒng)在使用前需要獲取磁盤的容量和可使用扇區(qū)的大小,并定義一個最大文件數(shù)。由于文件信息和索引信息需要占用一定的磁盤空間,并且與最大文件數(shù)密切相關(guān),在實際使用時定義一個最小文件的大小,并通過磁盤容量得到一個固定的最大文件數(shù),這樣文件信息和索引信息所占用的磁盤空間在整個磁盤中只占很小的比例。 3 系統(tǒng)實現(xiàn) 3.1 數(shù)據(jù)的存儲 數(shù)據(jù)的存儲過程比較簡單,創(chuàng)建文件的時候系統(tǒng)自動分配一個唯一的文件號,并通過文件號進行計算得到文件信息和索引信息對應(yīng)的磁盤地址。當(dāng)有足夠一個數(shù)據(jù)塊大小的數(shù)據(jù)時打包并保存到當(dāng)前可以使用的數(shù)據(jù)塊,同時更新文件信息和索引信息。 圖3 數(shù)據(jù)存儲流程 數(shù)據(jù)存儲的流程如圖3所示。可以看出,只要視頻數(shù)據(jù)緩存到一個數(shù)據(jù)塊的大小時就可以進行一次存盤。例如,數(shù)據(jù)塊大小為64 KB,對應(yīng)為512 kbps碼率1 s的視頻數(shù)據(jù),也就是緊急斷電等突發(fā)事故中實際丟失的視頻數(shù)據(jù)最多是一個數(shù)據(jù)塊的錄像長度。由于突然斷電導(dǎo)致文件信息和索引信息沒有及時存儲,可以在啟動的時候通過掃描沒有形成文件的數(shù)據(jù)塊來進行恢復(fù)。即使在最壞的情況下,硬盤的磁盤信息、文件信息及索引信息等都丟失了,完全可以通過掃描所有的數(shù)據(jù)塊來重建整個文件系統(tǒng),這樣極大提高了數(shù)據(jù)的安全性。由于數(shù)據(jù)塊是順序排列,每個數(shù)據(jù)塊的讀寫幾率幾乎一致,不會因為頻繁讀寫某一個硬盤扇區(qū)導(dǎo)致壞道或縮短硬盤使用壽命,也提高了系統(tǒng)和數(shù)據(jù)的可靠性。 3.2 數(shù)據(jù)的讀取 數(shù)據(jù)的讀取可以通過兩種模式進行,一種是直接通過文件號來讀取文件,另一種是通過輸入時間檢索定位指定的錄像資料。這兩種方式最終都是定位到指定的數(shù)據(jù)塊實現(xiàn)數(shù)據(jù)的讀取,只要定位了第一個數(shù)據(jù)塊,就可以根據(jù)數(shù)據(jù)塊的DataBlockInfo來實現(xiàn)前/后數(shù)據(jù)塊的讀取,還可以通過數(shù)據(jù)塊的時間戳來實現(xiàn)高效的快進快退等操作。 圖4 數(shù)據(jù)恢復(fù)流程 3.3 數(shù)據(jù)的恢復(fù) 在實際使用中,不可避免會出現(xiàn)異常關(guān)機、斷電、磁盤壞道等問題,本系統(tǒng)中數(shù)據(jù)恢復(fù)的流程如圖4所示。在開機后首先檢查文件是否正常關(guān)閉。若是則不需要恢復(fù),否則進行數(shù)據(jù)恢復(fù)。先讀取數(shù)據(jù)塊信息,然后檢驗數(shù)據(jù)塊信息的合法性,合法則更新相應(yīng)信息。 3.4 錄像資料的檢索和精確定位 在本文件系統(tǒng)中,由于文件信息、索引信息和數(shù)據(jù)塊都是嚴(yán)格按照時間進行記錄的,所以可以采用二分法快速查找到指定錄像時間的錄像文件,再根據(jù)錄像文件信息的錄像開始時間及索引信息里包含的時間偏移和地址偏移,就可以快速準(zhǔn)確定位指定錄像時間的數(shù)據(jù)塊,根據(jù)數(shù)據(jù)塊的幀信息可以準(zhǔn)確定位到某一秒甚至某一幀,這樣就可以實現(xiàn)快速、準(zhǔn)確的錄像資料檢索。 結(jié)語 本視頻存儲專用文件系統(tǒng)通過對嵌入式數(shù)字硬盤錄像機媒體數(shù)據(jù)的特點深入研究和分析,分別從存儲機制、檢索機制、讀取機制和數(shù)據(jù)恢復(fù)機制等幾個方面詳細(xì)闡述設(shè)計思想和具體的實現(xiàn)方法。經(jīng)過相關(guān)產(chǎn)品的嚴(yán)格測試和大規(guī)模應(yīng)用,證明此文件系統(tǒng)可以很好地滿足實際應(yīng)用需求,在數(shù)據(jù)讀寫效率、檢索效率、檢索精確度、數(shù)據(jù)安全性和系統(tǒng)穩(wěn)定性等幾方面都達(dá)到了相應(yīng)指標(biāo),實現(xiàn)了對媒體流數(shù)據(jù)高效、安全的存儲。 |