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