專利名稱:一種媒體文件中循環文件的實現方法
技術領域:
本發明屬于電數字數據處理領域,具體涉及一種媒體文件系統中的循環文件實現
方法。
背景技術:
隨著數字視頻技術的成熟,各種數字視頻錄像機產品得到了廣泛的應用。在數字 視頻錄像機中,有一項重要的功能,就是時移(Time-Shift)。如圖1所示。圖中播放位置在 當前實時流位置之前,所以稱之為時移。例如,用戶錯過幾分鐘前的精彩鏡頭,需要退回去 重新瀏覽精彩鏡頭。 實現Time-Shift時,需要在硬盤中始終記錄當前實時流之前的一段視頻(比如30 分鐘)。這樣用戶才可以通過操作,進行倒退,觀看實時流位置之前的視頻。
另外,對于數字視頻監控來說,預錄像也非常重要,這樣可以保留事故發生前的視 頻。對于時移來說,對文件的處理,跟預錄像是一樣的。 眾所周知,硬盤空間是有限的,長時間進入時移狀態時,會在硬盤中產生大量的視 頻數據。 一般做法是將預錄像區域之前的數據刪掉。比如預錄像長度為30分鐘時,當錄滿 30分鐘后,將文件數據頭部刪除一分鐘,文件就變成29分鐘了,一直重復這個過程,達到文 件長度始終不超過30分鐘的目的。 對于文件系統來說,總是以塊為單位管理硬盤空間,最小的塊為一個扇區,即512 字節。通常,塊大小為4K,8K,16K字節。以塊為單位管理空間,給刪除文件數頭部造成了一 定的困難。 一個是只能以塊對齊的方式刪除,不能刪除任意大小。另一個,頻繁的刪除,會 造成系統性能下降,同時也可能導致磁盤空間碎片。 另一種做法,是開辟一個文件,在里面循環寫。當時移結束時同時需要保留預錄像 時,需要將循環文件中的數據拷貝到一個新文件中。如圖2所示,在循環文件中,段落B實 際上比段落A早,因此,必須要將數據進行重新排列,才能將段落B移到段落A前面,保證播 放時的順序無誤。 一般情況下,媒體文件都非常大,因此這個拷貝的代價也很大。
發明內容
針對現有技術中存在的缺陷,本發明的目的是提供一種媒體文件系統中的循環文 件實現方法,該方法能夠高效地處理循環文件,以滿足預錄像的需求。該方法提供一種寫文 件的方法,在預錄像時,不需要刪除文件頭部的數據塊;同時在讀文件時,提供一種方法,能 夠讓應用程序獲得的數據與錄像時的數據一致。
為達到以上目的,本發明采用的技術方案是 在新建文件描述結點i-node中,增加循環區域大小LoopLength、文件起始指針
StartPointer、以及文件狀態FileStatus三個描述,所述文件狀態FileStatus包括預寫、
循環寫及正常讀寫三種,對新建文件依次進行預寫、循環寫及正常讀寫; 預寫新文件創建后自動進入預寫狀態,當寫入數據長度Length,新的指針為
Pointer = Pointer+Length ; 循環寫當文件達到預寫長度后,調用本文件系統提供的API,將Pointer賦值給LoopLength,進入循環寫狀態,文件指針Pointer在LoopLength內循環,寫入數據長度Length后,新的指針為 Pointer = (Pointer+Length) % LoopLength ;
實際偏移地址為Offset = (StartPointer+Pointer) % LoopLength ; 正常讀寫系統提供API結束循環寫,自動將當前指針Pointer賦值給
StartPointer,進入正常讀寫狀態,實際偏移地址為Offset = (StartPointer+Pointer) % LoopLength ; 進一步的,上述技術方案中,所述文件預寫長度可以根據需要設定。 進一步的,所述循環寫的次數是根據上層邏輯,當上層退出循環寫狀態時或當實
際文件和循環覆蓋文件完全重合時,結束循環寫。 本發明方法的優點在于高效的讀寫減少重復性的刪除和拷貝,有效的保護硬盤提高效率,非常適合安防行業硬盤錄像機進行24小時錄像的讀和寫。
圖1是實現時移的示意圖。 圖2是現有技術實現循環寫的方法示意圖。 圖3為本發明所述i-node的結構圖。 圖4是本發明文件3個狀態的狀態轉換圖。 圖5是寫文件的流程圖。 圖6是讀文件的流程圖。
具體實施例方式
下面結合附圖,對本發明的技術方案作進一步的闡述。 圖2是現有技術中實現循環寫的方法示意圖。這種方法的不足之處在于當時移結束時同時需要保留預錄像時,需要將循環文件中的數據拷貝到一個新文件中。媒體文件都非常大,因此這個拷貝的代價也很大。因此本發明設計了一種新方案,即在新建文件中增加一循環區域LoopLength,當新建文件進行預寫至設定長度時,對文件進行循環寫,文件指針Pointer在LoopLength內循環,因而無需再做很大的拷貝,高效的讀寫減少重復性的刪除和拷貝。當上層邏輯結束循環寫時,再計算實際偏移地址Offset。
基于上述原理,本發明具體的技術方案如下 如圖3、圖5所示,首先在新建文件描述結點i-node中,增加循環區域大小LoopLength、文件起始指針StartPointer、以及文件狀態FileStatus三個描述,所述文件狀態FileStatus包括預寫、循環寫及正常讀寫三種,對新建文件依次進行預寫、循環寫及正常讀寫; 預寫新文件創建后自動進入預寫狀態,當寫入數據長度Length,新的指針為
Pointer = Pointer+Length ;
循環寫當文件達到預寫長度后,預寫長度可以根據需要設定,調用本文件系統提供的API,將Pointer賦值給LoopLength,進入循環寫狀態,文件指針Pointer在LoopLength內循環,寫入數據長度Length后,新的指針為
Pointer = (Pointer+Length) % LoopLength ;
實際偏移地址為 Offset = (StartPointer+Pointer) % LoopLength ; 正常讀寫系統提供API結束循環寫,自動將當前指針Pointer賦值給
StartPointer,進入正常讀寫狀態,實際偏移地址為 Offset = (StartPointer+Pointer) % LoopLength ; 上述述循環寫的次數是根據上層邏輯,當上層退出循環寫狀態時或當實際文件和循環覆蓋文件完全重合時,結束循環寫。 圖4顯示的是本發明文件3個狀態的狀態轉換圖。新文件創建后即依次進行預寫、循環寫及正常讀寫。 對于利用上述方法形成的媒體文件,對文件進行循環寫,文件指針Pointer在LoopLength內循環,因而無需再做很大的拷貝。再對該種媒體文件進行讀取,即可能夠讓應用程序獲得的數據與錄像時的數據一致,如圖6所示,因此在讀該種文件時首先判斷文件是否是循環寫的模式寫入的,如果不是,則進行正常的讀寫,如果是,則繼續步驟讀出開始保存的文件寫入的偏移量Offset,計算出文件開頭指針,即保存到數據庫的值,實際就是實際的偏移量,再根據設定的每次寫入大小,這個是預先設定的,是數據長度Length,依次讀出相關數據。如果數據讀到整個區域結尾,將從文件頭部開始讀。
權利要求
一種媒體文件中循環文件的實現方法,所述方法的特征在于在新建文件描述結點i-node中,增加循環區域大小LoopLength、文件起始指針StartPointer、以及文件狀態FileStatus三個描述,所述文件狀態FileStatus包括預寫、循環寫及正常讀寫三種,對新建文件依次進行預寫、循環寫及正常讀寫;預寫新文件創建后自動進入預寫狀態,當寫入數據長度Length,新的指針為Pointer=Pointer+Length;循環寫當文件達到預寫長度后,調用本文件系統提供的API,將Pointer賦值給LoopLength,進入循環寫狀態,文件指針Pointer在LoopLength內循環,寫入數據長度Length后,新的指針為Pointer=(Pointer+Length)%LoopLength;實際偏移地址為Offset=(StartPointer+Pointer)%LoopLength;正常讀寫系統提供API結束循環寫,自動將當前指針Pointer賦值給StartPointer,進入正常讀寫狀態,實際偏移地址為Offset=(StartPointer+Pointer)%LoopLength;
2. 根據權利要求1所示的一種媒體文件中循環文件的實現方法,其特征在于所述文 件預寫長度可以根據需要設定。
3. 根據權利要求1所示的一種媒體文件中循環文件的實現方法,其特征在于所述循 環寫的次數是根據上層邏輯,當上層退出循環寫狀態時或當實際文件和循環覆蓋文件完全 重合時,結束循環寫。
全文摘要
本發明屬于電數字數據處理領域,具體涉及一種媒體文件系統中的循環文件實現方法。本發明采用的技術方案是在新建文件描述結點i-node中,增加循環區域大小LoopLength、文件起始指針StartPointer、以及文件狀態FileStatus三個描述,所述文件狀態FileStatus包括預寫、循環寫及正常讀寫三種,對新建文件依次進行預寫、循環寫及正常讀寫;本發明方法的優點在于高效的讀寫減少重復性的刪除和拷貝,有效的保護硬盤提高效率,非常適合安防行業硬盤錄像機進行24小時錄像的讀和寫。
文檔編號G06F17/30GK101794294SQ20101000019
公開日2010年8月4日 申請日期2010年1月8日 優先權日2010年1月8日
發明者唐玉勇 申請人:李鋼