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