本發(fā)明屬于圖像通信技術(shù)領(lǐng)域,具體涉及一種高效可靠的網(wǎng)絡(luò)攝像機數(shù)據(jù)存儲方法。
背景技術(shù):
網(wǎng)絡(luò)攝像機的嵌入式數(shù)據(jù)存儲一般通過采用flash芯片、sd卡、nas或者usb存儲介質(zhì)等實現(xiàn)。包括音視頻和圖像等網(wǎng)絡(luò)攝像機采集的多媒體數(shù)據(jù)的安全性和可靠性直接影響整個安防監(jiān)控系統(tǒng)的作用和效果。通用網(wǎng)絡(luò)傳輸?shù)牟豢煽啃詫е聜鬏敶鎯^程中容易丟失數(shù)據(jù)。數(shù)據(jù)完整性是視頻監(jiān)控的基本要求,考慮到網(wǎng)絡(luò)傳輸?shù)牟环€(wěn)定性,攝像機都會配置前端存儲系統(tǒng),實現(xiàn)數(shù)據(jù)的緩存和備份,保證數(shù)據(jù)的完整性和可用性,同時滿足不同的應用場景需求。
網(wǎng)絡(luò)攝像機存儲的數(shù)據(jù)類型主要包括:音視頻的流媒體數(shù)據(jù)、圖片數(shù)據(jù)、索引信息、語義描述信息(metadata)及其他輔助信息?,F(xiàn)有的數(shù)據(jù)存取方法中會涉及大量的文件新建、更新和刪除操作,同時存儲的數(shù)據(jù)會被頻繁地查詢、下載、回放,因此網(wǎng)絡(luò)攝像機的數(shù)據(jù)存儲具有數(shù)據(jù)吞吐量大、信息訪問頻繁、可靠性要求高的特點。
現(xiàn)有網(wǎng)絡(luò)攝像機數(shù)據(jù)存儲方法主要是將音視頻、圖片數(shù)據(jù)存儲成媒體文件和將文件描述信息保存成索引文件。數(shù)據(jù)存儲時,新建文件記錄某時間段的音視頻或圖片數(shù)據(jù),同時更新索引記錄;當存儲空間不足時,根據(jù)事先定義的邏輯,比如先刪除部分歷史文件,再新建文件記錄當前數(shù)據(jù)。
現(xiàn)有網(wǎng)絡(luò)攝像機數(shù)據(jù)存儲方案存在的問題有三方面,首先是存儲介質(zhì)存取壽命有限,容易損壞。網(wǎng)絡(luò)攝像機的數(shù)據(jù)存儲過程中,頻繁新建、刪除文件容易造成存儲碎片,降低存儲介質(zhì)讀寫速度、引發(fā)壞塊。其次是索引管理復雜、查詢速度慢、精度低?,F(xiàn)有方案中,每產(chǎn)生一個錄像文件,就在索引文件里新增一條索引記錄,管理索引記錄位置和存儲形式比較復雜。隨著錄像文件數(shù)目增加,記錄條數(shù)越來越多,索引記錄更新和查詢速度就會變慢。通常,索引文件的每條索引記錄對應一個文件的整體信息,很難精確定位到文件某時刻或與某個事件對應的媒體數(shù)據(jù)。第三是安全性、可擴展和兼容性差?,F(xiàn)有方案中,索引文件在同步讀寫、掉電等情況下的保護完全由開發(fā)者的編程邏輯和文件系統(tǒng)決定,一旦文件破損,所有數(shù)據(jù)將無法使用,數(shù)據(jù)存儲的可靠性差。網(wǎng)絡(luò)攝像機的存儲數(shù)據(jù)形式會隨著需求而變化,數(shù)據(jù)形式一旦變化,索引結(jié)構(gòu)和原有的索引查詢和處理機制都要相應變化,因此可擴展性和兼容性差。
技術(shù)實現(xiàn)要素:
本發(fā)明針對上述現(xiàn)有技術(shù)中存在的問題提出一種高效可靠的網(wǎng)絡(luò)攝像機數(shù)據(jù)存儲方法,其特點是數(shù)據(jù)存儲采用預分配和大文件片段存儲,避免文件新增和刪除帶來的存儲空間碎片和存儲介質(zhì)使用不均衡,可以延長存儲介質(zhì)的使用壽命。采用數(shù)據(jù)庫多級索引管理降低索引管理復雜度,提高查詢和處理效率,實現(xiàn)精準查詢。采用數(shù)據(jù)庫雙備份機制,降低主索引文件破損后數(shù)據(jù)無法處理的風險,增強數(shù)據(jù)安全性;多級索引機制屏蔽不同大文件存儲數(shù)據(jù)類型的差異,通過片段類型區(qū)分文件數(shù)據(jù)的種類,適應多種數(shù)據(jù)存儲需求,方便擴展和兼容。
為達到上述目的,本發(fā)明提出的技術(shù)方案為一種高效可靠的網(wǎng)絡(luò)攝像機數(shù)據(jù)存儲方法,包含以下步驟:
(1)初始化過程
網(wǎng)絡(luò)攝像機首次啟動,掛載存儲設(shè)備后,存儲設(shè)備進入初始化階段,對于通過網(wǎng)絡(luò)攝像機格式化存儲設(shè)備或者外部格式化存儲設(shè)備后首次初始化時獲取存儲設(shè)備的空間大小,按照預先設(shè)置的大文件大小新建首個大文件,新建主數(shù)據(jù)庫文件和記錄表,初始化成功后,進入錄像監(jiān)聽,等待錄像狀態(tài)的變化,進入相應的狀態(tài)處理程序;
(2)數(shù)據(jù)存儲過程
數(shù)據(jù)存儲監(jiān)聽線程收到存儲狀態(tài)的變化信息,按照開始數(shù)據(jù)存儲、停止數(shù)據(jù)存儲和默認狀態(tài)三種處理流程進行數(shù)據(jù)存儲;
(3)數(shù)據(jù)存儲循環(huán)更新過程
在寫滿最后一個大文件時,下一個可寫大文件指向首個大文件,滿足特定的條件時開始處理最早數(shù)據(jù)存儲記錄;
(4)圖片存儲過程
觸發(fā)抓拍的圖片保存在本地存儲設(shè)備中,同時更新文件信息表和圖片信息表;當圖片大文件已滿時,找到最早的圖片信息記錄,置狀態(tài)為已覆蓋,同時記錄可以寫入的空間大小,繼續(xù)更新下一條記錄的狀態(tài),直到空間達到要求,寫入新圖片數(shù)據(jù)同時更新相關(guān)信息表;
(5)數(shù)據(jù)庫的備份與恢復
錄像存儲服務(wù)啟動后,主動開啟備份線程,采用預先設(shè)定的周期備份主數(shù)據(jù)庫,保證數(shù)據(jù)庫記錄的可靠穩(wěn)定,前端啟動進行存儲設(shè)備初始化時,當主數(shù)據(jù)庫出現(xiàn)異常時,將備份數(shù)據(jù)庫代替主數(shù)據(jù)庫調(diào)用,恢復正常工作后,再利用周期更新備份數(shù)據(jù)庫的機制重新生成備份數(shù)據(jù)庫并同步主數(shù)據(jù)庫的表記錄;
(6)數(shù)據(jù)存儲文件查詢、下載和回放
文件下載,先通過時間或事件檢索得到的查詢出結(jié)果下載需要的文件,多媒體數(shù)據(jù)查詢根據(jù)索引的起始和終止時間組合成邏輯文件的名稱顯示給用戶,用戶點擊某文件下載時,下載模塊需要重新查詢下載文件信息,根據(jù)傳入的邏輯文件名稱找到物理文件的實際路徑和偏移位置,并返回文件長度等信息;
數(shù)據(jù)回放,先查詢出結(jié)果再根據(jù)結(jié)果回放文件,遇到回放時間段內(nèi)有空檔期的情況,直接跳到有效期內(nèi)下個文件的起始位置回放,當開始時間點回放后,網(wǎng)絡(luò)攝像機內(nèi)部首先在時間段內(nèi)查詢文件數(shù)目,并返回當前需要回放的第一個文件信息,收到文件信息后開始回放,待此文件回放即將結(jié)束時,查詢下個可以回放的文件信息,直到播放文件數(shù)目達到開始查詢的文件總數(shù)為止。
進一步,上述記錄表包括文件信息總表、多媒體數(shù)據(jù)信息表、片段信息表和圖片信息表,并將當前存儲設(shè)備中的新建的文件信息作為記錄項更新到文件信息表;否則直接查找文件信息表初始化全局文件信息變量。
數(shù)據(jù)存儲過程中所述對開始數(shù)據(jù)存儲狀態(tài)的處理流程包括:
(1)查找當前可寫文件序號,獲取文件句柄,置錄像開始標識,用全局信息初始化數(shù)據(jù)存儲信息;
(2)按照初始化后的錄像信息,在多媒體數(shù)據(jù)信息表中末尾更新一條錄像記錄。
數(shù)據(jù)存儲過程中所述對默認數(shù)據(jù)存儲狀態(tài)的處理流程包括:
(1)判斷是否有已打開的文件句柄和開始存儲標識是否有效,無效則結(jié)束流程,重新進入監(jiān)聽等待狀態(tài);
(2)獲取需存儲的數(shù)據(jù),按照片段大小分割,每次只寫入片段大小的錄像數(shù)據(jù),剩下的部分等待下次寫入,更新片段信息表中對應的片段記錄、多媒體數(shù)據(jù)信息表和文件信息表;
(3)計算當前可寫文件剩余的空閑空間大小remspace,每個的大文件大小最大不超過256mb,對于實際要寫的數(shù)據(jù)長度realdata小于remspace的直接寫入當前文件,進入步驟7,否則進入步驟4;
(4)判斷大文件是否進入循環(huán)覆蓋階段,未進入循環(huán)覆蓋階段時,進入步驟5,否則進入步驟6;
(5)將realdata中remspace大小的數(shù)據(jù)寫入當前的文件,關(guān)閉當前文件,更新文件信息表、片段信息表和多媒體數(shù)據(jù)信息表,建立新的大文件,獲取文件句柄,重新初始化錄像信息,在多媒體數(shù)據(jù)信息表中末尾更新一條錄像記錄,將剩下的realdata-remspace部分寫入新的文件,轉(zhuǎn)入步驟7;
(6)將realdata中remspace大小的數(shù)據(jù)寫入當前的文件,關(guān)閉當前文件,更新文件信息表、片段信息表和多媒體數(shù)據(jù)信息表,查找最早的大文件序號,獲取文件句柄,查找文件信息表找到最早的數(shù)據(jù)存儲信息記錄序號,置此數(shù)據(jù)存儲記錄狀態(tài)為已覆蓋,計算可覆蓋的空間大小,如果可寫空間大小小于要寫入的數(shù)據(jù)大小,就需要繼續(xù)查找當前最早的數(shù)據(jù)存儲記錄并將狀態(tài)置為已覆蓋,直到可寫空間大于等于要寫入數(shù)據(jù)大小時結(jié)束數(shù)據(jù)存儲記錄的覆蓋,初始化數(shù)據(jù)存儲信息,在多媒體數(shù)據(jù)信息表的末尾更新一條錄像記錄,將剩下的realdata-remspace部分寫入新的文件,轉(zhuǎn)入步驟7;
(7)更新當前片段記錄長度和可寫片段序號,進入步驟8;
(8)更新文件信息表,更新最早片段記錄信息,重新初始化數(shù)據(jù)存儲信息,在多媒體數(shù)據(jù)信息表的末尾再更新一條數(shù)據(jù)存儲記錄。
數(shù)據(jù)存儲過程中所述對數(shù)據(jù)停止存儲狀態(tài)的處理流程包括:
(1)判斷開始數(shù)據(jù)存儲標識是否有效,無效則結(jié)束流程,重新進入監(jiān)聽等待狀態(tài);
(2)判斷文件句柄是否有效,無效則結(jié)束流程,重新進入監(jiān)聽等待狀態(tài);
(3)獲取需存儲的數(shù)據(jù),按照片段大小分割,每次只寫入片段大小的錄像數(shù)據(jù),剩下的部分等待下次寫入,更新片段信息表中對應的片段記錄、多媒體數(shù)據(jù)信息表和文件信息表;
(4)計算當前可寫文件剩余的空閑空間大小remspace,每個的大文件大小最大不超過256mb,對于實際要寫的數(shù)據(jù)長度realdata小于remspace的直接寫入當前文件,進入步驟8,否則進入步驟5;
(5)判斷大文件是否進入循環(huán)覆蓋階段,未進入循環(huán)覆蓋階段時,進入步驟6,否則進入步驟7;
(6)將realdata中remspace大小的數(shù)據(jù)寫入當前的文件,關(guān)閉當前文件,更新文件信息表、片段信息表和多媒體數(shù)據(jù)信息表,建立新的大文件,獲取文件句柄,重新初始化數(shù)據(jù)存儲信息,在多媒體數(shù)據(jù)信息表中末尾更新一條錄像記錄,將剩下的realdata-remspace部分寫入新的文件,轉(zhuǎn)入步驟7;
(7)將realdata中remspace大小的數(shù)據(jù)寫入當前的文件,關(guān)閉當前文件,更新文件信息表、片段信息表和多媒體數(shù)據(jù)信息表,查找最早的大文件序號,獲取文件句柄,查找文件信息表找到最早的數(shù)據(jù)存儲信息記錄序號,置此數(shù)據(jù)存儲記錄狀態(tài)為已覆蓋,計算可覆蓋的空間大小,如果可寫空間大小小于要寫入的數(shù)據(jù)大小,就需要繼續(xù)查找當前最早的數(shù)據(jù)存儲記錄并將狀態(tài)置為已覆蓋,直到可寫空間大于等于要寫入數(shù)據(jù)大小時結(jié)束數(shù)據(jù)存儲記錄的覆蓋,初始化數(shù)據(jù)存儲信息,在多媒體數(shù)據(jù)信息表的末尾更新一條數(shù)據(jù)存儲記錄,將剩下的realdata-remspace部分寫入新的文件,轉(zhuǎn)入步驟8;
(8)更新當前片段記錄長度和可寫片段簇序號,進入步驟9;
(9)更新文件信息表,更新最早片段記錄信息,重新初始化數(shù)據(jù)存儲信息,在多媒體數(shù)據(jù)信息表的末尾再更新一條數(shù)據(jù)存儲記錄,關(guān)閉當前正在寫的文件,清除正在數(shù)據(jù)存儲標識,清除數(shù)據(jù)存儲和片段信息。
上述數(shù)據(jù)存儲循環(huán)更新過程包括:
(1)查詢到最早的數(shù)據(jù)存儲信息記錄,更新此多媒體數(shù)據(jù)信息表的記錄狀態(tài)為已覆蓋,同時更新文件信息表的最早數(shù)據(jù)存儲信息記錄相關(guān)字段;
(2)記錄當前可用的空間大小或者可寫片段數(shù)目,保證在不夠時及時更新最早的數(shù)據(jù)存儲信息記錄,預留足夠的空間供數(shù)據(jù)寫入,每個片段的寫入需要立即更新片段信息表和定時更新多媒體數(shù)據(jù)信息表、文件信息表。
本發(fā)明還提出一種上述高效可靠的網(wǎng)絡(luò)攝像機數(shù)據(jù)存儲方法采用的索引數(shù)據(jù)結(jié)構(gòu),包含文件信息表,其預分配兩條記錄,第一條記錄代表多媒體數(shù)據(jù)的信息總表,第二條記錄代表圖片數(shù)據(jù)的信息總表,多媒體數(shù)據(jù)信息表、片段信息表和圖片信息表分別按照每個片段一定大小的存儲空間預分配索引記錄條數(shù)。
進一步,上述多媒體數(shù)據(jù)信息表按照每個片段1mb、每個大文件256mb預分配索引記錄條數(shù);片段信息表按照每個片段1mb、每個大文件256mb預分配索引記錄條數(shù);圖片信息表按照每個片段512kb、每個圖片大文件256mb預分配索引記錄條數(shù)。
與現(xiàn)有技術(shù)相比,本發(fā)明的有益效果在于:
1,本發(fā)明采用動態(tài)預分配的技術(shù)存儲多媒體數(shù)據(jù),可以有效的避免存儲空間碎片增長問題,降低存儲介質(zhì)初始化的時間消耗;大文件片段存儲,適應網(wǎng)絡(luò)攝像機對音視頻、圖片多媒體數(shù)據(jù)的快速和精確查找的要求,存儲介質(zhì)使用壽命得到了顯著的延長。
2,通過數(shù)據(jù)庫索引技術(shù)和在線備份的方式實現(xiàn)文件索引,可以降低管理復雜度,提高查詢檢索效率,索引管理簡單、查詢速度快、支持精確查詢。
3,可以增強數(shù)據(jù)存儲和使用的安全性,適合實際應用中不同類型數(shù)據(jù)的存儲,擴展性和兼容性強,保證數(shù)據(jù)安全性,增加數(shù)據(jù)存儲的可擴展性和兼容性。
附圖說明
圖1是本發(fā)明描述的存儲介質(zhì)內(nèi)數(shù)據(jù)文件和索引文件存在形式。
圖2是本發(fā)明描述的多級索引形式。
圖3是存儲設(shè)備的初始化流程。
圖4是錄像模塊工作流程。
圖5是文件寫入的循環(huán)覆蓋流程。
圖6是數(shù)據(jù)庫文件的備份與恢復。
具體實施方式
現(xiàn)結(jié)合附圖對本發(fā)明的具體實施方式作進一步的說明。
本方法使用存儲介質(zhì)動態(tài)預分配、大文件片段存儲、數(shù)據(jù)庫多級索引、數(shù)據(jù)庫在線備份機制實現(xiàn)數(shù)據(jù)存儲。
預分配技術(shù)是按照存儲媒體的特性和存儲介質(zhì)的大小預分配好若干個固定大小的文件空間,后續(xù)的數(shù)據(jù)操作只對現(xiàn)有已分配文件操作的一種技術(shù)。網(wǎng)絡(luò)攝像機的音視頻、圖片等數(shù)據(jù)的新增、刪除都只是更新文件數(shù)據(jù)和索引文件記錄來實現(xiàn)虛擬意義上的文件新建和刪除,并不執(zhí)行物理上的文件新建和刪除操作。這種技術(shù)可有效避免頻繁的文件新增和刪除帶來的存儲空間碎片和存儲介質(zhì)使用不均衡問題,從而延長存儲介質(zhì)的使用壽命。普通的預分配技術(shù)需要在存儲介質(zhì)使用前預先分配好所有文件空間,而網(wǎng)絡(luò)攝像機是嵌入式設(shè)備,資源有限,對大容量存儲介質(zhì)的完全預先分配空間會耗費大量時間。動態(tài)預分配是基于預分配的思想,初始化存儲空間時,索引文件中先記錄出當前存儲空間下要預分配文件的總數(shù),但只生成一個預分配文件,后期根據(jù)數(shù)據(jù)存儲的需要再動態(tài)生成文件,降低預分配文件空間的時間消耗。
大文件是針對實際音視頻數(shù)據(jù)、圖片數(shù)據(jù)等媒體文件提出的新存儲文件形式,在大文件中會涵蓋多個時間段的音視頻或者圖片的多媒體數(shù)據(jù),根據(jù)時間段的先后順序數(shù)據(jù)依次存儲到大文件上。大文件上采用片段存儲方式,每個大文件按照固定大小劃分為若干個片段,每個片段作為存儲的最小數(shù)據(jù)單元,索引記錄通過多媒體的片段起始位置和碼率來精準定位和查詢數(shù)據(jù),減少索引記錄條數(shù),降低索引記錄的占用空間。
數(shù)據(jù)庫管理索引信息借助數(shù)據(jù)庫機制,降低索引管理復雜度,提高查詢和處理效率。多級索引機制通過幾級索引關(guān)系,將大文件中的片段信息關(guān)聯(lián),實現(xiàn)快速定位和查詢錄像。多級索引屏蔽不同大文件存儲數(shù)據(jù)類型的差異,通過片段類型區(qū)分文件中數(shù)據(jù)的種類,適應多種數(shù)據(jù)存儲需求,提高數(shù)據(jù)存儲的可擴展性。
數(shù)據(jù)庫索引記錄在線備份機制,以時間片的方式更新備份索引文件,降低主索引文件破損后數(shù)據(jù)無法處理的風險。
本發(fā)明的存儲方法利用動態(tài)預分配生成大文件,在大文件中采用片段記錄數(shù)據(jù),在新建和更新大文件、片段寫入數(shù)據(jù)時更新相關(guān)索引記錄,當需要查詢、下載或者回放數(shù)據(jù)時,即刻查詢數(shù)據(jù)庫索引記錄,快速定位數(shù)據(jù)讀取位置進行處理。
網(wǎng)絡(luò)攝像機的數(shù)據(jù)存儲形式如圖1所示,包含大文件、索引表信息、主數(shù)據(jù)庫幾類文件形式。大文件是根據(jù)動態(tài)預分配策略按照存儲需求生成的,大文件劃分為多個片段,每個片段固定大小。新建大文件的信息會更新到數(shù)據(jù)庫的文件信息表、多媒體數(shù)據(jù)信息表,數(shù)據(jù)寫入片段時周期更新片段信息表和多媒體數(shù)據(jù)信息表。主數(shù)據(jù)庫文件內(nèi)容周期性同步到在線備份數(shù)據(jù)庫文件中。數(shù)據(jù)庫中的文件信息表、多媒體數(shù)據(jù)信息表、片段信息表關(guān)聯(lián)關(guān)系如圖2所示。文件信息表有兩條記錄,第一條記錄:記錄所有的音視頻文件的信息、存儲狀態(tài)等;第二條記錄:記錄所有的圖片文件的信息、存儲狀態(tài)等。多媒體數(shù)據(jù)信息表記錄每個多媒體文件信息;片段信息表記錄256*n(n為錄像大文件總數(shù)—固定大小的預分配錄像文件總數(shù))條片段信息;圖片信息表記錄每個圖片文件信息。
本方法的實現(xiàn)流程如下:
1、初始化過程
網(wǎng)絡(luò)攝像機首次啟動,掛載存儲設(shè)備后,存儲設(shè)備進入初始化階段,如圖3所示,對于通過網(wǎng)絡(luò)攝像機格式化存儲設(shè)備或者外部格式化存儲設(shè)備后首次初始化時獲取存儲設(shè)備的空間大小,按照媒體碼率等邏輯預先設(shè)置的大文件大小新建首個大文件(預分配為256mb),新建主數(shù)據(jù)庫文件和四個記錄表(文件信息表、多媒體數(shù)據(jù)信息表、片段信息表、圖片信息表)【預分配好表中的記錄項】,并將當前存儲設(shè)備中的新建的文件信息作為記錄項更新到文件信息表;否則,直接查找文件信息表初始化全局文件信息變量。初始化成功后,進入錄像監(jiān)聽,等待錄像狀態(tài)的變化,進入相應的狀態(tài)處理程序。
2、數(shù)據(jù)存儲過程
數(shù)據(jù)存儲監(jiān)聽線程收到存儲狀態(tài)的變化信息(開始數(shù)據(jù)存儲、停止數(shù)據(jù)存儲和默認狀態(tài)),如圖4所示。
(a)對開始數(shù)據(jù)存儲狀態(tài)的處理流程
查找當前可寫文件序號,獲取文件句柄,置錄像開始標識,用全局信息初始化數(shù)據(jù)存儲信息(數(shù)據(jù)存儲記錄號、數(shù)據(jù)存儲當前可寫的文件序號、可寫的片段簇號以及起始和終止時間);
按照初始化后的錄像信息,在多媒體數(shù)據(jù)信息表中末尾更新一條錄像記錄。
(b)對默認數(shù)據(jù)存儲狀態(tài)的處理流程
(1)判斷是否有已打開的文件句柄和開始存儲標識是否有效,無效則結(jié)束流程,重新進入監(jiān)聽等待狀態(tài);
(2)獲取需存儲的數(shù)據(jù),按照片段大小分割,每次只寫入片段大小的錄像數(shù)據(jù),剩下的部分等待下次寫入,更新片段信息表中對應的片段記錄、多媒體數(shù)據(jù)信息表和文件信息表;
(3)計算當前可寫文件剩余的空閑空間大小remspace(每個的大文件大小最大不超過256mb),對于實際要寫的數(shù)據(jù)長度realdata小于remspace的直接寫入當前文件,進入步驟(7),否則進入步驟(4);
(4)判斷大文件是否進入循環(huán)覆蓋階段,未進入循環(huán)覆蓋階段時,進入步驟(5),否則進入步驟(6);
(5)將realdata中remspace大小的數(shù)據(jù)寫入當前的文件,關(guān)閉當前文件,更新文件信息表、片段信息表和多媒體數(shù)據(jù)信息表,建立新的大文件,獲取文件句柄,重新初始化錄像信息,在多媒體數(shù)據(jù)信息表中末尾更新一條錄像記錄,將剩下的realdata-remspace部分寫入新的文件,轉(zhuǎn)入步驟(7);
(6)將realdata中remspace大小的數(shù)據(jù)寫入當前的文件,關(guān)閉當前文件,更新文件信息表、片段信息表和多媒體數(shù)據(jù)信息表,查找最早的大文件序號,獲取文件句柄,查找文件信息表找到最早的數(shù)據(jù)存儲信息記錄序號,置此數(shù)據(jù)存儲記錄狀態(tài)為已覆蓋,計算可覆蓋的空間大小,如果可寫空間大小小于要寫入的數(shù)據(jù)大小,就需要繼續(xù)查找當前最早的數(shù)據(jù)存儲記錄并將狀態(tài)置為已覆蓋,直到可寫空間大于等于要寫入數(shù)據(jù)大小時結(jié)束數(shù)據(jù)存儲記錄的覆蓋,初始化數(shù)據(jù)存儲信息,在多媒體數(shù)據(jù)信息表的末尾更新一條錄像記錄,將剩下的realdata-remspace部分寫入新的文件,轉(zhuǎn)入步驟(7);
(7)更新當前片段記錄長度和可寫片段序號【更新片段信息表和多媒體數(shù)據(jù)信息表】,進入步驟(8);
(8)更新文件信息表,更新最早片段記錄信息,重新初始化數(shù)據(jù)存儲信息,在多媒體數(shù)據(jù)信息表的末尾再更新一條數(shù)據(jù)存儲記錄。
(c)對數(shù)據(jù)停止存儲狀態(tài)的處理流程
(1)判斷開始數(shù)據(jù)存儲標識是否有效,無效則結(jié)束流程,重新進入監(jiān)聽等待狀態(tài);
(2)判斷文件句柄是否有效,無效則結(jié)束流程,重新進入監(jiān)聽等待狀態(tài);
(3)獲取需存儲的數(shù)據(jù),按照片段大小分割,每次只寫入片段大小的錄像數(shù)據(jù),剩下的部分等待下次寫入,更新片段信息表中對應的片段記錄、多媒體數(shù)據(jù)信息表和文件信息表;
(4)計算當前可寫文件剩余的空閑空間大小remspace(每個的大文件大小最大不超過256mb),對于實際要寫的數(shù)據(jù)長度realdata小于remspace的直接寫入當前文件,進入步驟(8),否則進入步驟(5);
(5)判斷大文件是否進入循環(huán)覆蓋階段,未進入循環(huán)覆蓋階段時,進入步驟(6),否則進入步驟(7);
(6)將realdata中remspace大小的數(shù)據(jù)寫入當前的文件,關(guān)閉當前文件,更新文件信息表、片段信息表和多媒體數(shù)據(jù)信息表,建立新的大文件,獲取文件句柄,重新初始化數(shù)據(jù)存儲信息,在多媒體數(shù)據(jù)信息表中末尾更新一條錄像記錄,將剩下的realdata-remspace部分寫入新的文件,轉(zhuǎn)入步驟(7);
(7)將realdata中remspace大小的數(shù)據(jù)寫入當前的文件,關(guān)閉當前文件,更新文件信息表、片段信息表和多媒體數(shù)據(jù)信息表,查找最早的大文件序號,獲取文件句柄,查找文件信息表找到最早的數(shù)據(jù)存儲信息記錄序號,置此數(shù)據(jù)存儲記錄狀態(tài)為已覆蓋,計算可覆蓋的空間大小,如果可寫空間大小小于要寫入的數(shù)據(jù)大小,就需要繼續(xù)查找當前最早的數(shù)據(jù)存儲記錄并將狀態(tài)置為已覆蓋,直到可寫空間大于等于要寫入數(shù)據(jù)大小時結(jié)束數(shù)據(jù)存儲記錄的覆蓋,初始化數(shù)據(jù)存儲信息,在多媒體數(shù)據(jù)信息表的末尾更新一條數(shù)據(jù)存儲記錄,將剩下的realdata-remspace部分寫入新的文件,轉(zhuǎn)入步驟(8);
(8)更新當前片段記錄長度和可寫片段簇序號【更新片段信息表和多媒體數(shù)據(jù)信息表】,進入步驟(9);
(9)更新文件信息表,更新最早片段記錄信息,重新初始化數(shù)據(jù)存儲信息,在多媒體數(shù)據(jù)信息表的末尾再更新一條數(shù)據(jù)存儲記錄,關(guān)閉當前正在寫的文件,清除正在數(shù)據(jù)存儲標識,清除數(shù)據(jù)存儲和片段信息。
3、數(shù)據(jù)存儲循環(huán)更新過程
循環(huán)覆蓋是指在寫滿最后一個大文件時,下一個可寫大文件指向首個大文件的情況,此時需要特定的條件來處理最早數(shù)據(jù)存儲記錄。循環(huán)覆蓋過程如圖5所示。
查詢到最早的數(shù)據(jù)存儲信息記錄,更新此多媒體數(shù)據(jù)信息表的記錄狀態(tài)為已覆蓋【對應原有的片段信息記錄同時也無效,片段數(shù)據(jù)存儲信息是否有效主要和數(shù)據(jù)存儲信息記錄的狀態(tài)有關(guān)】,同時更新文件信息表的最早數(shù)據(jù)存儲信息記錄相關(guān)字段;
記錄當前可用的空間大小(或者可寫片段數(shù)目),保證在不夠時及時更新最早的數(shù)據(jù)存儲信息記錄,預留足夠的空間供數(shù)據(jù)寫入,每個片段的寫入需要立即更新片段記錄信息和定時更新多媒體數(shù)據(jù)信息表、文件信息表。
4、圖片存儲過程
觸發(fā)抓拍的圖片保存在本地存儲設(shè)備中,當產(chǎn)生一張圖片,更新文件信息表的第二條記錄信息和圖片信息表,當需要寫入到大文件的圖片數(shù)據(jù)大小超過大文件當前的剩余空間時,自動切換到下個圖片大文件進行寫入,同時更新文件信息表和圖片信息表;當圖片大文件已滿時,查找文件信息表找到最早的圖片信息記錄,置狀態(tài)為已覆蓋,同時記錄可以寫入的空間大小,繼續(xù)更新下一條記錄的狀態(tài),直到空間達到要求,寫入新圖片數(shù)據(jù)同時更新文件信息表和圖片信息表。
5、數(shù)據(jù)表的索引說明
文件信息表表預分配兩條記錄,第一條記錄代表多媒體數(shù)據(jù)的信息總表,第二條記錄代表圖片數(shù)據(jù)的信息總表。
多媒體數(shù)據(jù)信息表按照每個片段1mb(每個大文件256mb)預分配索引記錄條數(shù)【極限情況一個片段為一個有效文件】,例如:32gb的sd卡(不考慮預留的索引空間大小),需要分配(32gb*1024/256)*256=32768條記錄,按照256字節(jié)一條記錄算索引的空間大小為:32768*256/1024=8192kb。
片段信息表按照每個片段1mb(每個大文件256mb)預分配索引記錄條數(shù),例如:32gb的sd卡(不考慮預留的索引空間大小),需要分配(32gb*1024/256)*256=32768條記錄,按照256字節(jié)一條記錄算索引的空間大小為:32768*256/1024=8192kb。
圖片信息表按照每個片段512kb(每個圖片大文件256mb)預分配索引記錄條數(shù),例如:32gb的sd卡(不考慮預留的索引空間大小),圖片大文件個數(shù)占存儲空間總大小的10%,向上取整,計算有13個圖片大文件,需要分配13*256*1024/512=6656條記錄,按照64字節(jié)一條記錄算索引的空間大小為:6656*64/1024=416kb。
6、數(shù)據(jù)庫的備份與恢復
為了保證數(shù)據(jù)庫的穩(wěn)定與可靠,增加對主數(shù)據(jù)庫的備份處理。錄像存儲服務(wù)啟動后,主動開啟備份線程,采用預先設(shè)定的周期(例如2分鐘)備份主數(shù)據(jù)庫的機制,保證數(shù)據(jù)庫記錄的可靠穩(wěn)定。前端啟動進行存儲設(shè)備初始化時,當主數(shù)據(jù)庫出現(xiàn)異常時,將備份數(shù)據(jù)庫代替主數(shù)據(jù)庫調(diào)用,恢復正常工作后,再利用周期更新備份數(shù)據(jù)庫的機制重新生成備份數(shù)據(jù)庫并同步主數(shù)據(jù)庫的表記錄。如圖6所示。
7、數(shù)據(jù)存儲文件查詢、下載和回放
文件下載,先通過時間或事件檢索得到的查詢出結(jié)果下載需要的文件。多媒體數(shù)據(jù)查詢根據(jù)索引的起始和終止時間組合成邏輯文件的名稱顯示給用戶。用戶點擊某文件下載時,下載模塊需要重新查詢下載文件信息,根據(jù)傳入的邏輯文件名稱找到物理文件的實際路徑和偏移位置,并返回文件長度等信息。
數(shù)據(jù)回放,先查詢出結(jié)果再根據(jù)結(jié)果回放文件,遇到回放時間段內(nèi)有空檔期的情況,直接跳到有效期內(nèi)下個文件的起始位置回放。當開始時間點回放后,網(wǎng)絡(luò)攝像機內(nèi)部首先在時間段(回放時間時刻和查詢到的有效期內(nèi)最后一個文件的終止時間)內(nèi)查詢文件數(shù)目,并返回當前需要回放的第一個文件信息(路徑等),收到文件信息后開始回放,待此文件回放即將結(jié)束時,查詢下個可以回放的文件信息,直到播放文件數(shù)目達到開始查詢的文件總數(shù)為止。
需要說明的是,本發(fā)明所提供的上述實施例僅具有示意性,不具有限定本發(fā)明的具體實施的范圍的作用。本發(fā)明的保護范圍應包括那些對于本領(lǐng)域的普通技術(shù)人員來說顯而易見的變換或替代方案。