亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

基于大華嵌入式安防設(shè)備的數(shù)據(jù)提取方法與流程

文檔序號(hào):12362955閱讀:346來(lái)源:國(guó)知局
基于大華嵌入式安防設(shè)備的數(shù)據(jù)提取方法與流程

本發(fā)明屬于數(shù)據(jù)恢復(fù)領(lǐng)域,具體涉及一種基于大華嵌入式安防設(shè)備的數(shù)據(jù)提取方法。



背景技術(shù):

國(guó)內(nèi)經(jīng)濟(jì)的蓬勃發(fā)展帶動(dòng)了不少行業(yè)的發(fā)展,安保行業(yè)正是受益于經(jīng)濟(jì)發(fā)展增長(zhǎng)趨勢(shì)最為明顯的行業(yè)之一。尤其是在視頻監(jiān)控技術(shù)不斷發(fā)展的今天,高清監(jiān)控視頻、多角度視頻技術(shù)等專業(yè)的監(jiān)控設(shè)備在各個(gè)行業(yè)的多種場(chǎng)所都得到了有效地推廣應(yīng)用。視頻監(jiān)控設(shè)備為實(shí)現(xiàn)社會(huì)的安定和諧做出了巨大貢獻(xiàn)。

嵌入式系統(tǒng)是一種完全嵌入受控器件內(nèi)部,為特定應(yīng)用而設(shè)計(jì)的專用操作系統(tǒng),嵌入式系統(tǒng)監(jiān)控機(jī)則是一個(gè)用于控制和監(jiān)視攝像探頭的裝置。從整體性能上來(lái)看,嵌入式硬盤錄像機(jī)表現(xiàn)出來(lái)了無(wú)比強(qiáng)大的優(yōu)越性能,并且從目前的市場(chǎng)占有率上看,已經(jīng)成為安防界的主流產(chǎn)品。

在發(fā)達(dá)國(guó)家,不少監(jiān)控設(shè)備上面存儲(chǔ)的數(shù)據(jù)都是經(jīng)過(guò)多重備份以便確保其數(shù)據(jù)存儲(chǔ)具備高度的安全性。然而,在國(guó)內(nèi),為了節(jié)省企業(yè)的開支以及降低管理上的難度,很多持有監(jiān)控設(shè)備的單位并沒(méi)有相應(yīng)的數(shù)據(jù)安全措施,這就意味著一旦設(shè)備上存儲(chǔ)的視頻資料丟失或出現(xiàn)其它故障,將使得安防功能無(wú)法起到實(shí)際性作用。此外,在部分情況下,有不少案件是由于提供了最真實(shí),最可靠的視頻證據(jù),成為了法院決斷的依據(jù),才得到了公正、高效的判決,因此對(duì)監(jiān)控設(shè)備的數(shù)據(jù)提取與恢復(fù)具有重大意義。

由于監(jiān)控視頻的存儲(chǔ)是設(shè)備廠商自定義的存儲(chǔ)格式,比如大華,因此傳統(tǒng) 的數(shù)據(jù)恢復(fù)技術(shù)無(wú)法應(yīng)用到大華監(jiān)控機(jī)的視頻數(shù)據(jù)提取與恢復(fù);市面上現(xiàn)有技術(shù)無(wú)法恢復(fù)大華監(jiān)控機(jī)的未使用區(qū)域的丟失文件、已使用區(qū)域中未被覆蓋的碎片文件;即使能進(jìn)行視頻數(shù)據(jù)的恢復(fù),但也無(wú)法對(duì)文件狀態(tài)屬性加以區(qū)分。

本發(fā)明涉及到的部分專業(yè)術(shù)語(yǔ):

磁盤分區(qū):在磁盤上劃分幾個(gè)邏輯部分,每一部分都稱之為分區(qū);

塊:一個(gè)分區(qū)被分成大小相等,連續(xù)空間的區(qū)域;

文件分配表:映射到分區(qū)每個(gè)塊的條目列表,在每個(gè)條目中記錄了該條目映射的塊的使用狀況;

正常數(shù)據(jù):是指在磁盤分區(qū)的文件分配表中有已使用的標(biāo)記和已使用字節(jié)數(shù)的塊中可正常播放的視頻數(shù)據(jù);

丟失數(shù)據(jù):是指磁盤分區(qū)的文件分配表中標(biāo)識(shí)為未使用區(qū)域的塊所對(duì)應(yīng)的地址中保存的可播放的有效視頻數(shù)據(jù);

覆蓋數(shù)據(jù):是指在磁盤分區(qū)的文件分配表中有已使用的標(biāo)記的塊中標(biāo)記為未使用的中可正常播放的視頻數(shù)據(jù)。



技術(shù)實(shí)現(xiàn)要素:

本發(fā)明針對(duì)現(xiàn)有技術(shù)的不足,提供了一種基于大華嵌入式安防設(shè)備的數(shù)據(jù)提取方法,能夠有效解決現(xiàn)有技術(shù)無(wú)法恢復(fù)監(jiān)控機(jī)的未使用區(qū)域的丟失文件、已使用區(qū)域中未被覆蓋的碎片文件;即使能進(jìn)行視頻數(shù)據(jù)的恢復(fù),但也無(wú)法對(duì)文件屬性加以區(qū)分等問(wèn)題。

為解決以上問(wèn)題,本發(fā)明采用的技術(shù)方案如下:一種基于大華嵌入式安防設(shè)備的數(shù)據(jù)提取方法,包括如下步驟:

S1加載磁盤,并讀取磁盤第一個(gè)扇區(qū)數(shù)據(jù);

S2嵌入式監(jiān)控設(shè)備在初始化磁盤時(shí)將標(biāo)記0x44484653寫入磁盤第一個(gè)扇區(qū),即0x00偏移地址處,檢測(cè)S1中讀取的數(shù)據(jù)是否符合上述標(biāo)記,若符合則 跳至S3,否則跳至S1;

S3解析主分配記錄中每一個(gè)分區(qū)的起始地址、引導(dǎo)扇區(qū)地址,其中主分配記錄位于磁盤0x1E扇區(qū),分區(qū)表項(xiàng)的起始地址是相對(duì)于0x1E扇區(qū)起始地址偏移0x48字節(jié),每個(gè)分區(qū)信息表項(xiàng)的長(zhǎng)度為0x40,每個(gè)分區(qū)信息表項(xiàng)相對(duì)表項(xiàng)起始地址偏移0x1C~0x1F記錄的值為分區(qū)起始地址相對(duì)于第一個(gè)扇區(qū)的偏移值,每個(gè)分區(qū)信息表項(xiàng)相對(duì)于表項(xiàng)起始地址偏移Ox00~00x1記錄的值為分區(qū)引導(dǎo)記錄地址相對(duì)于分區(qū)起始地址的偏移值;

S4讀取正常數(shù)據(jù)記錄:依次解析磁盤劃分的每一個(gè)分區(qū),在相對(duì)分區(qū)的引導(dǎo)扇區(qū)起始地址偏移0x44長(zhǎng)度0x04的地址是該分區(qū)的文件分配表的地址,跳轉(zhuǎn)至文件分配表的地址后遍歷該表,在文件分配表中每一表項(xiàng)長(zhǎng)度為0x20,讀取每個(gè)表項(xiàng)中相對(duì)表項(xiàng)起始位置偏移0x00處的值,當(dāng)值為01或03時(shí)標(biāo)志著該表項(xiàng)對(duì)應(yīng)的塊已經(jīng)被使用,計(jì)算出該表項(xiàng)對(duì)應(yīng)的塊地址來(lái)獲取對(duì)應(yīng)數(shù)據(jù)。

S5讀取非正常數(shù)據(jù)記錄,非正常數(shù)據(jù)記錄包括讀取丟失數(shù)據(jù)和覆蓋數(shù)據(jù);

S6按照正常數(shù)據(jù)、丟失數(shù)據(jù)、覆蓋數(shù)據(jù)三種類別讀取數(shù)據(jù)記錄后,結(jié)合視頻文件的格式結(jié)構(gòu),分類別提取其對(duì)應(yīng)的有效數(shù)據(jù);

作為優(yōu)選,S4讀取正常數(shù)據(jù)的詳細(xì)流程如下所述:

S41讀取位于磁盤0x1E扇區(qū)的主分配記錄中的分區(qū)的起始地址、分區(qū)引導(dǎo)記錄地址的信息,然后遍歷每一個(gè)分區(qū)并讀取信息;

S42跳至分區(qū)引導(dǎo)記錄地址,解析分區(qū)引導(dǎo)記錄信息,讀取相對(duì)分區(qū)引導(dǎo)記錄起始地址偏移0x2C長(zhǎng)度為0x02的值記為sectorsize、相對(duì)分區(qū)引導(dǎo)記錄起始地址偏移0x30~0x31的值記為blocksectors、相對(duì)分區(qū)引導(dǎo)記錄起始地址偏 移0x38~0x3B的值記為data_firstblock、相對(duì)分區(qū)引導(dǎo)記錄起始地址偏移0x44~0x47的值記為FAT、相對(duì)分區(qū)引導(dǎo)記錄起始地址偏移0x48~0x4B的值記為data_firstsector,相對(duì)分區(qū)引導(dǎo)記錄起始地址偏移0x4C~0x4F的值記為blocks;

S43跳至文件分配表FAT地址讀取文件分配信息;

S44讀取文件分配表中所有數(shù)據(jù)的值,判斷其值是否為0x00,若全部為0x00則跳至S42,否則跳至S45;

S45讀取塊m的分配記錄信息,其中初始值m=0:按文件分配表順序一一讀取表項(xiàng)中的值,讀取每個(gè)表項(xiàng)中相對(duì)表項(xiàng)起始位置偏移0x00處的值記為flag,讀取相對(duì)表項(xiàng)起始位置偏移0x10~0x13的值記為usedbytes;

S46根據(jù)S45中讀取的信息中flag與usedbytes來(lái)判斷該塊是否已經(jīng)被寫入數(shù)據(jù),當(dāng)flag值為0x01或者0x03且usedbytes大于0則表示已經(jīng)寫入數(shù)據(jù),則跳至S47,否則跳至S411;

S47再次讀取文件分配表的表項(xiàng),讀取相對(duì)表項(xiàng)起始位置偏移0x01處的值記為channel,讀取相對(duì)表項(xiàng)起始位置偏移0x04~0x07的值記為starttime,讀取相對(duì)表項(xiàng)起始位置偏移0x08~0x0B的值記為endtime,讀取相對(duì)表項(xiàng)起始位置偏移0x0C~0x0F的值記為nextblock,讀取相對(duì)表項(xiàng)起始位置偏移0x14~0x17的值記為lastblock,讀取相對(duì)表項(xiàng)起始位置偏移0x10~0x13的值記為usedbytes,并計(jì)算出該塊對(duì)應(yīng)的數(shù)據(jù)區(qū)地址,讀取該地址的相應(yīng)數(shù)據(jù);

S48根據(jù)S47讀取的nextblock來(lái)判讀該塊的下一個(gè)塊區(qū)域是否存在,若nextblock不等于0則跳至S49,否則跳至S410;

S49根據(jù)公式offset=nextblock*0x20計(jì)算下一個(gè)塊nextblock相對(duì)于文件分配表起始地址的偏移量,并跳轉(zhuǎn)至該地址,然后跳至S45;

S410創(chuàng)建已讀取塊的集合Ni,初始值i=0:創(chuàng)建一個(gè)集合,在集合中記錄已經(jīng)讀取的塊的編號(hào),如果2個(gè)及以上的塊是相互關(guān)聯(lián)的則按照順序依次寫入集合Ni,集合Ni的格式如{0x00,0x01,…,0x0m};

S411使得S45所述的m=m+1,相對(duì)該表項(xiàng)起始地址向后跳轉(zhuǎn)0x20字節(jié),獲取下一個(gè)塊的分配記錄地址;

S412根據(jù)S42中塊個(gè)數(shù)blocks來(lái)判斷下一個(gè)讀取的塊的地址是否已經(jīng)達(dá)到文件分配表尾部,若當(dāng)前m≥blocks則跳至S414,若m<blocks則跳至S413;

S413讀取該塊的編號(hào),并在Ni中驗(yàn)證該塊是否已經(jīng)被讀取,若已經(jīng)被讀取則跳至S411,否則跳至S45;

S414創(chuàng)建正常文件集合N,將所有的集合Ni寫入到集合N中,其格式如{N0,N1,N2,…,Ni};

S415將所有的正常文件依次寫入集合N后,并對(duì)其加上正常數(shù)據(jù)標(biāo)識(shí)N,以便區(qū)別其他類型的數(shù)據(jù)文件。

作為優(yōu)選,所述S5讀取非正常數(shù)據(jù)記錄詳細(xì)流程如下:

S51讀取丟失數(shù)據(jù)記錄:依次解析磁盤劃分的每一個(gè)分區(qū),在分區(qū)的引導(dǎo)扇區(qū)中讀取該分區(qū)的文件分配表的地址,遍歷該表讀取相對(duì)表項(xiàng)起始位置偏移0x00處的值為非01或03的塊,并計(jì)算出該塊對(duì)應(yīng)的數(shù)據(jù)區(qū)地址,判斷該地址的內(nèi)容是否為0x00,不全部為0x00時(shí)按照嵌入式監(jiān)控設(shè)備的視頻數(shù)據(jù)結(jié)構(gòu)提取有效的視頻數(shù)據(jù);

S52讀取覆蓋數(shù)據(jù)記錄:依次解析磁盤劃分的每一個(gè)分區(qū),在分區(qū)的引導(dǎo)扇區(qū)中讀取該分區(qū)的文件分配表的地址,遍歷該表讀取相對(duì)表項(xiàng)起始位置偏移0x10處的值,該值即為塊的已使用的字節(jié)數(shù),然后計(jì)算出該塊對(duì)應(yīng)的數(shù)據(jù)區(qū)地址中未使用的字節(jié)數(shù),其公式可表示為:塊中未使用字節(jié)數(shù)=blocksectors*sectorsize-usedbytes,讀取塊中標(biāo)記為未使用的字節(jié)數(shù)地址的內(nèi)容,判斷該地址的內(nèi)容中是否為0x00,不全部為0x00時(shí)按照嵌入式監(jiān)控設(shè)備的視頻數(shù)據(jù)結(jié)構(gòu)提取有效的視頻數(shù)據(jù)。

作為優(yōu)選,S51讀取丟失數(shù)據(jù)的詳細(xì)流程如下所述:

S511讀取磁盤主引導(dǎo)記錄:讀取位于磁盤0x1E扇區(qū)的主分配記錄中的分區(qū)的起始地址、分區(qū)引導(dǎo)記錄地址的信息,然后遍歷每一個(gè)分區(qū)并讀取信息;

S512跳至分區(qū)引導(dǎo)記錄地址:解析分區(qū)引導(dǎo)記錄信息,讀取相對(duì)分區(qū)引導(dǎo)記錄起始地址偏移0x2C長(zhǎng)度為0x02的值記為sectorsize、相對(duì)分區(qū)引導(dǎo)記錄起始地址偏移0x30~0x31的值記為blocksectors、相對(duì)分區(qū)引導(dǎo)記錄起始地址偏移0x38~0x3B的值記為data_firstblock、相對(duì)分區(qū)引導(dǎo)記錄起始地址偏移0x44~0x47的值記為FAT、相對(duì)分區(qū)引導(dǎo)記錄起始地址偏移0x48~0x4B的值記為data_firstsector,相對(duì)分區(qū)引導(dǎo)記錄起始地址偏移0x4C~0x4F的值記為blocks;

S513跳至FAT地址讀取文件分配信息;

S514讀取塊的分配記錄信息,其中初始值m=0,按文件分配表順序一一讀取表項(xiàng)中的值,讀取每個(gè)表項(xiàng)中相對(duì)表項(xiàng)起始位置偏移0x00處的值記為flag;

S515讀取塊的記錄信息flag標(biāo)記來(lái)判斷分區(qū)是否使用,若flag為0x01 或0x03則跳至S519,否則跳至S516;

S516計(jì)算出該塊對(duì)應(yīng)的數(shù)據(jù)區(qū)地址,讀取該地址的數(shù)據(jù)內(nèi)容并判斷其數(shù)據(jù)是否為空,若數(shù)據(jù)內(nèi)容全部為0x00則跳至S519,否則跳至S517;

S517根據(jù)視頻數(shù)據(jù)的格式提取塊內(nèi)容中的有效視頻文件;

S518創(chuàng)建已讀取塊集合Li,在集合中記錄已讀取塊的編號(hào),其格式如{0x00,0x01,…,0x0m};

S519使得S514的m=m+1,相對(duì)該表項(xiàng)起始地址向后跳轉(zhuǎn)0x20字節(jié),獲取下一個(gè)塊的分配記錄地址;

S5110根據(jù)S512中塊個(gè)數(shù)blocks來(lái)判斷下一個(gè)讀取的塊的地址是否已經(jīng)達(dá)到文件分配表尾部,若當(dāng)前m≥blocks則跳至S5112,若m<blocks則跳至S5111;

S5111讀取該塊的編號(hào),并在Li中驗(yàn)證該塊是否已經(jīng)被讀取,若已經(jīng)被讀取則跳至S519,若未被讀取則跳至S514;

S5112創(chuàng)建丟失文件集合L,將所有的集合Li寫入到集合L中,其格式如{L0,L1,L2,…,Li};

S5113將所有的丟失文件依次寫入集合L后,并對(duì)其加上丟失數(shù)據(jù)標(biāo)識(shí)L,以便區(qū)別其他類型的數(shù)據(jù)文件。

作為優(yōu)選,S52讀取覆蓋數(shù)據(jù)的詳細(xì)流程如下所述:

S521讀取位于磁盤0x1E扇區(qū)的主分配記錄中的分區(qū)的起始地址、分區(qū)引導(dǎo)記錄地址的信息,然后遍歷每一個(gè)分區(qū)并讀取信息;

S522解析分區(qū)引導(dǎo)記錄信息,讀取相對(duì)分區(qū)引導(dǎo)記錄起始地址偏移0x2C 長(zhǎng)度為0x02的值記為sectorsize、相對(duì)分區(qū)引導(dǎo)記錄起始地址偏移0x30~0x31的值記為blocksectors、相對(duì)分區(qū)引導(dǎo)記錄起始地址偏移0x38~0x3B的值記為data_firstblock、相對(duì)分區(qū)引導(dǎo)記錄起始地址偏移0x44~0x47的值記為FAT、相對(duì)分區(qū)引導(dǎo)記錄起始地址偏移0x48~0x4B的值記為data_firstsector,相對(duì)分區(qū)引導(dǎo)記錄起始地址偏移0x4C~0x4F的值記為blocks;

S523跳至文件分配表地址讀取文件分配信息;

S524讀取文件分配表中所有數(shù)據(jù)的值,判斷其值是否為0x00,若全部為0x00則跳至S522,否則跳至S525;

S525讀取當(dāng)前塊m的分配記錄信息,其中初始值m=0:從FAT第一個(gè)表項(xiàng)開始逐一讀取FAT各表項(xiàng)信息,讀取每個(gè)表項(xiàng)中相對(duì)表項(xiàng)起始位置偏移0x00處的值記為flag,讀取相對(duì)表項(xiàng)起始位置偏移0x10~0x13的值記為usedbytes;

S526根據(jù)S525中讀取的信息中flag與usedbytes來(lái)判斷該塊是否已經(jīng)被寫入數(shù)據(jù),當(dāng)flag值為0x01或者0x03且usedbytes大于0則表示已經(jīng)寫入數(shù)據(jù)跳至S527,否則跳至S5211;

S527根據(jù)S526中讀取的usedbytes進(jìn)行計(jì)算塊中未使用字節(jié)數(shù),讀取塊中未使用地址的數(shù)據(jù);

S528判斷未使用區(qū)域的內(nèi)容是否為空,若全部為0x00則跳至S5211,否則跳至S529;

S529根據(jù)視頻數(shù)據(jù)的格式提取塊內(nèi)容中的有效視頻文件;

S5210創(chuàng)建已讀取塊集合Fi,在集合中記錄已讀取塊的編號(hào),F(xiàn)i的格式入{0x0m};

S5211使得所述S25的m=m+1,相對(duì)該表項(xiàng)起始地址向后跳轉(zhuǎn)0x20字節(jié),來(lái)獲取下一個(gè)塊的分配記錄地址;

S5212根據(jù)S522中塊個(gè)數(shù)blocks來(lái)判斷下一個(gè)讀取的塊的地址是否已經(jīng)達(dá)到文件分配表尾部,若當(dāng)前m≥blocks則跳至S5214,m<blocks則跳至S5213;

S5213讀取該塊的編號(hào),并在Fi中驗(yàn)證該塊是否已經(jīng)被讀取,若已經(jīng)被讀取則跳至S5211,否則跳至S525;

S5214創(chuàng)建覆蓋文件集合F,將所有的集合Fi寫入到集合F中,其格式如{F0,F1,F2,…,Fi};

S5215將所有的覆蓋文件依次寫入集合F后,并對(duì)其加上覆蓋數(shù)據(jù)標(biāo)識(shí)F,以便區(qū)別其他類型的數(shù)據(jù)文件。

作為優(yōu)選,S4所述的計(jì)算方法如下所述:

計(jì)算公式為:編號(hào)為x的塊表項(xiàng)對(duì)應(yīng)的塊地址=數(shù)據(jù)區(qū)開始扇區(qū)+(文件首塊號(hào)+x)*每塊扇區(qū)數(shù),其中記錄數(shù)據(jù)區(qū)開始扇區(qū)地址位于相對(duì)分區(qū)引導(dǎo)記錄起始地址偏移0x48且長(zhǎng)度為0x04,記錄文件首塊號(hào)的地址位于相對(duì)分區(qū)引導(dǎo)記錄起始地址偏移0x38且長(zhǎng)度為0x04,記錄每塊扇區(qū)數(shù)的地址位于相對(duì)分區(qū)引導(dǎo)記錄起始地址偏移0x30且長(zhǎng)度為0x04。

作為優(yōu)選,S47所述的計(jì)算方法如下所述:

計(jì)算公式:addressx=data_firstsector+(data_firstblock+x)*blocksectors,其中x為文件分配表的編號(hào)。

作為優(yōu)選,S516所述的計(jì)算公式:addressx=data_firstsector+(data_firstblock+x)*blocksectors,其中x為文件分配表的編號(hào)。

作為優(yōu)選,S527讀取塊中未使用地址的數(shù)據(jù)具體方法如下:

根據(jù)計(jì)算公式:addressx=data_firstsector+(data_firstblock+x)*blocksectors計(jì)算出該塊對(duì)應(yīng)的數(shù)據(jù)區(qū)地址,其中x為文件分配表中表項(xiàng)的編號(hào);再根據(jù)計(jì)算公式:塊中未使用的字節(jié)=blocksectors*sectorsize-usedbytes來(lái)獲取塊中未使用的字節(jié)數(shù),跳至addressx地址的讀取相應(yīng)未使用區(qū)域的字節(jié)。

本發(fā)明的有益效果如下:本發(fā)明采用了按照磁盤的分區(qū)逐一讀取的方法,在讀取每一個(gè)分區(qū)時(shí)按照正常數(shù)據(jù)文件、丟失數(shù)據(jù)文件、覆蓋數(shù)據(jù)文件進(jìn)行分類解析。在讀取正常數(shù)據(jù)文件時(shí),解析分區(qū)的文件分配記錄表,從該表中解析已經(jīng)使用的塊記錄,并讀取其中視頻數(shù)據(jù);在讀取丟失數(shù)據(jù)文件時(shí),解析分區(qū)的文件分配記錄表,從該表中解析未使用的塊記錄,并讀取其中視頻數(shù)據(jù)判斷其是否為空,不為空時(shí)按照嵌入式監(jiān)控設(shè)備的視頻數(shù)據(jù)結(jié)構(gòu)提取有效的視頻數(shù)據(jù);在讀取覆蓋數(shù)據(jù)文件時(shí),解析分區(qū)的文件分配記錄表,從該表中解析已使用的塊記錄及已使用塊的字節(jié)數(shù),然后讀取其中未使用字節(jié)的視頻數(shù)據(jù),判斷其是否為空,不為空時(shí)按照嵌入式監(jiān)控設(shè)備的視頻數(shù)據(jù)結(jié)構(gòu)提取有效的視頻數(shù)據(jù)?;谏鲜龇椒?,本發(fā)明可以快速判斷磁盤數(shù)據(jù)是否為大華的監(jiān)控視頻數(shù)據(jù)格式,也可以提取出磁盤數(shù)據(jù)中有效的視頻數(shù)據(jù)文件,包括正常數(shù)據(jù)文件、丟失數(shù)據(jù)文件和覆蓋數(shù)據(jù)文件;還可以正確區(qū)分視頻數(shù)據(jù)文件正常、丟失、覆蓋的狀態(tài)。

附圖說(shuō)明

圖1為磁盤數(shù)據(jù)解析主流程圖;

圖2為S4讀取正常數(shù)據(jù)記錄流程圖;

圖3為S51讀取丟失數(shù)據(jù)記錄流程圖;

圖4為S52讀取覆蓋數(shù)據(jù)記錄流程圖;

圖5為磁盤分區(qū)結(jié)構(gòu)示意圖。

具體實(shí)施方式

為使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下參照附圖并舉實(shí)施例,對(duì)本發(fā)明做進(jìn)一步詳細(xì)說(shuō)明。

針對(duì)上述提出的問(wèn)題,本發(fā)明提出了一種基于大華嵌入式安防設(shè)備的數(shù)據(jù)提取方法,該發(fā)明不僅能高效地提取正常的視頻數(shù)據(jù),還能將非正常的數(shù)據(jù)進(jìn)行有效的恢復(fù)。

本發(fā)明是針對(duì)大華監(jiān)控設(shè)備提出的解決方法,因此先介紹大華嵌入式監(jiān)控設(shè)備在存儲(chǔ)文件時(shí)的基本結(jié)構(gòu)。監(jiān)控設(shè)備在初始化磁盤時(shí),磁盤被劃分為n(n=0,1,2…)個(gè)區(qū)域(劃分的區(qū)域以下簡(jiǎn)稱為分區(qū)),每一個(gè)分區(qū)被劃分成大小相同的塊(類似于windows操作系統(tǒng)中fat32文件系統(tǒng)的簇)來(lái)作為存儲(chǔ)數(shù)據(jù)基本單元,每一個(gè)塊是有固定數(shù)量的扇區(qū)組成,在存儲(chǔ)視頻數(shù)據(jù)時(shí)依次使用每個(gè)分區(qū),并且在分區(qū)中寫入數(shù)據(jù)時(shí)會(huì)在該分區(qū)產(chǎn)生與之對(duì)應(yīng)的塊分配記錄,來(lái)管理該分區(qū)空間的使用情況。

基于上述的存儲(chǔ)文件的邏輯,本發(fā)明所采用的數(shù)據(jù)解析的原理如下:按照磁盤的分區(qū)逐一讀取,在讀取每一個(gè)分區(qū)時(shí)按照正常數(shù)據(jù)文件、丟失數(shù)據(jù)文件、覆蓋數(shù)據(jù)文件進(jìn)行分類解析。在讀取正常數(shù)據(jù)文件時(shí),解析分區(qū)的文件分配記錄表,從該表中解析已經(jīng)使用的塊記錄,并讀取其中視頻數(shù)據(jù);在讀取丟失數(shù)據(jù)文件時(shí),解析分區(qū)的文件分配記錄表,從該表中解析未使用的塊記錄,并讀取其中視頻數(shù)據(jù)判斷其是否為空,不為空時(shí)按照大華嵌入式監(jiān)控設(shè)備的視頻數(shù)據(jù)結(jié)構(gòu)提取有效的視頻數(shù)據(jù);在讀取覆蓋數(shù)據(jù)文件時(shí),解析分區(qū)的文件分配記錄表,從該表中解析已使用的塊記錄及已使用塊的字節(jié)數(shù),然后讀取其中未使 用字節(jié)的視頻數(shù)據(jù),判斷其是否為空,不為空時(shí)按照大華嵌入式監(jiān)控設(shè)備的視頻數(shù)據(jù)結(jié)構(gòu)提取有效的視頻數(shù)據(jù)。

為了詳細(xì)說(shuō)明本專利的發(fā)明方法,結(jié)合附圖進(jìn)一步闡述。

為了更為方便的闡述本發(fā)明中的方法,本例使用大華文件系統(tǒng)4.1版本(DHFS4.1)為例進(jìn)行闡述,該格式的磁盤結(jié)構(gòu)如圖5所示,各部分的詳細(xì)意義如下:

磁盤標(biāo)記:記錄磁盤所使用的大華文件系統(tǒng)版本信息,該標(biāo)記位于磁盤0x0扇區(qū),偏移地址0x00~0x07;

主分配記錄:記錄磁盤劃分分區(qū)的信息,該記錄位于磁盤0x1E扇區(qū),第一個(gè)分區(qū)表項(xiàng)的相對(duì)0x1E扇區(qū)起始偏移地址為0x48,每個(gè)分區(qū)信息表項(xiàng)的長(zhǎng)度為0x40,每個(gè)分區(qū)信息表項(xiàng)包含了分區(qū)的起始地址和分區(qū)引導(dǎo)記錄相對(duì)起始地址的偏移地址;

分區(qū)結(jié)構(gòu):在磁盤中每個(gè)分區(qū)結(jié)構(gòu)是完全一致的,在此僅針對(duì)一個(gè)分區(qū)的結(jié)構(gòu)進(jìn)行闡述,分區(qū)的結(jié)構(gòu)主要包括分區(qū)引導(dǎo)記錄、文件分配表、數(shù)據(jù)存儲(chǔ)區(qū),分區(qū)引導(dǎo)記錄中主要記錄了每扇區(qū)字節(jié)數(shù)、每塊扇區(qū)數(shù)、文件首塊號(hào)、目錄文件位圖開始扇區(qū)、文件分配表的開始扇區(qū)、數(shù)據(jù)存儲(chǔ)區(qū)開始扇區(qū)、塊個(gè)數(shù)、數(shù)據(jù)存儲(chǔ)區(qū)備份的開始扇區(qū)、通道個(gè)數(shù)等信息,文件分配表是對(duì)數(shù)據(jù)存儲(chǔ)區(qū)是否使用的一個(gè)管理區(qū)域,文件分配表項(xiàng)的長(zhǎng)度為0x20,一個(gè)表項(xiàng)對(duì)應(yīng)數(shù)據(jù)存儲(chǔ)區(qū)的一個(gè)塊,每個(gè)表項(xiàng)中記錄對(duì)應(yīng)塊的是否使用標(biāo)記、塊中記錄的視頻數(shù)據(jù)的通道、塊中記錄的視頻數(shù)據(jù)的開始時(shí)間、塊中記錄的視頻數(shù)據(jù)的結(jié)束時(shí)間、塊中記錄的視頻數(shù)據(jù)上一個(gè)塊序號(hào)、塊中記錄的視頻數(shù)據(jù)下一個(gè)塊序號(hào),數(shù)據(jù)存儲(chǔ)區(qū)記錄真實(shí)的視頻數(shù)據(jù)文件。

一種基于大華嵌入式安防設(shè)備的數(shù)據(jù)提取方法,包括如下步驟:

S1加載磁盤,并讀取磁盤第一個(gè)扇區(qū)數(shù)據(jù);

S2嵌入式監(jiān)控設(shè)備在初始化磁盤時(shí)將標(biāo)記0x44484653寫入磁盤第一個(gè)扇區(qū),即0x00偏移地址處,檢測(cè)S1中讀取的數(shù)據(jù)是否符合上述標(biāo)記,若符合則跳至S3,否則跳至S1;

S3解析主分配記錄中每一個(gè)分區(qū)的起始地址、引導(dǎo)扇區(qū)地址,其中主分配記錄位于磁盤0x1E扇區(qū),分區(qū)表項(xiàng)的起始地址是相對(duì)于0x1E扇區(qū)起始地址偏移0x48字節(jié),每個(gè)分區(qū)信息表項(xiàng)的長(zhǎng)度為0x40,每個(gè)分區(qū)信息表項(xiàng)相對(duì)表項(xiàng)起始地址偏移0x1C~0x1F記錄的值為分區(qū)起始地址相對(duì)于第一個(gè)扇區(qū)的偏移值,每個(gè)分區(qū)信息表項(xiàng)相對(duì)于表項(xiàng)起始地址偏移Ox00~00x1記錄的值為分區(qū)引導(dǎo)記錄地址相對(duì)于分區(qū)起始地址的偏移值;

S4讀取正常數(shù)據(jù)記錄:依次解析磁盤劃分的每一個(gè)分區(qū),在相對(duì)分區(qū)的引導(dǎo)扇區(qū)起始地址偏移0x44長(zhǎng)度0x04的地址是該分區(qū)的文件分配表的地址,跳轉(zhuǎn)至文件分配表的地址后遍歷該表,在文件分配表中每一表項(xiàng)長(zhǎng)度為0x20,讀取每個(gè)表項(xiàng)中相對(duì)表項(xiàng)起始位置偏移0x00處的值,當(dāng)值為01或03時(shí)標(biāo)志著該表項(xiàng)對(duì)應(yīng)的塊已經(jīng)被使用,計(jì)算出該表項(xiàng)對(duì)應(yīng)的塊地址來(lái)獲取對(duì)應(yīng)數(shù)據(jù)。

S5讀取非正常數(shù)據(jù)記錄,非正常數(shù)據(jù)記錄包括讀取丟失數(shù)據(jù)和覆蓋數(shù)據(jù);

S6按照正常數(shù)據(jù)、丟失數(shù)據(jù)、覆蓋數(shù)據(jù)三種類別讀取數(shù)據(jù)記錄后,結(jié)合視頻文件的格式結(jié)構(gòu),分類別提取其對(duì)應(yīng)的有效數(shù)據(jù);

進(jìn)一步地:

S4讀取正常數(shù)據(jù)的詳細(xì)流程如下所述:

S41讀取位于磁盤0x1E扇區(qū)的主分配記錄中的分區(qū)的起始地址、分區(qū)引導(dǎo) 記錄地址的信息,然后遍歷每一個(gè)分區(qū)并讀取信息;

S42跳至分區(qū)引導(dǎo)記錄地址,解析分區(qū)引導(dǎo)記錄信息,讀取相對(duì)分區(qū)引導(dǎo)記錄起始地址偏移0x2C長(zhǎng)度為0x02的值記為sectorsize、相對(duì)分區(qū)引導(dǎo)記錄起始地址偏移0x30~0x31的值記為blocksectors、相對(duì)分區(qū)引導(dǎo)記錄起始地址偏移0x38~0x3B的值記為data_firstblock、相對(duì)分區(qū)引導(dǎo)記錄起始地址偏移0x44~0x47的值記為FAT、相對(duì)分區(qū)引導(dǎo)記錄起始地址偏移0x48~0x4B的值記為data_firstsector,相對(duì)分區(qū)引導(dǎo)記錄起始地址偏移0x4C~0x4F的值記為blocks;

S43跳至文件分配表FAT地址讀取文件分配信息;

S44讀取文件分配表中所有數(shù)據(jù)的值,判斷其值是否為0x00,若全部為0x00則跳至S42,否則跳至S45;

S45讀取塊m的分配記錄信息,其中初始值m=0:按文件分配表順序一一讀取表項(xiàng)中的值,讀取每個(gè)表項(xiàng)中相對(duì)表項(xiàng)起始位置偏移0x00處的值記為flag,讀取相對(duì)表項(xiàng)起始位置偏移0x10~0x13的值記為usedbytes;

S46根據(jù)S45中讀取的信息中flag與usedbytes來(lái)判斷該塊是否已經(jīng)被寫入數(shù)據(jù),當(dāng)flag值為0x01或者0x03且usedbytes大于0則表示已經(jīng)寫入數(shù)據(jù),則跳至S47,否則跳至S411;

S47再次讀取文件分配表的表項(xiàng),讀取相對(duì)表項(xiàng)起始位置偏移0x01處的值記為channel,讀取相對(duì)表項(xiàng)起始位置偏移0x04~0x07的值記為starttime,讀取相對(duì)表項(xiàng)起始位置偏移0x08~0x0B的值記為endtime,讀取相對(duì)表項(xiàng)起始位置偏移0x0C~0x0F的值記為nextblock,讀取相對(duì)表項(xiàng)起始位置偏移0x14~0x17 的值記為lastblock,讀取相對(duì)表項(xiàng)起始位置偏移0x10~0x13的值記為usedbytes,并計(jì)算出該塊對(duì)應(yīng)的數(shù)據(jù)區(qū)地址,讀取該地址的相應(yīng)數(shù)據(jù);

S48根據(jù)S47讀取的nextblock來(lái)判讀該塊的下一個(gè)塊區(qū)域是否存在,若nextblock不等于0則跳至S49,否則跳至S410;

S49根據(jù)公式offset=nextblock*0x20計(jì)算下一個(gè)塊nextblock相對(duì)于文件分配表起始地址的偏移量,并跳轉(zhuǎn)至該地址,然后跳至S45;

S410創(chuàng)建已讀取塊的集合Ni,初始值i=0:創(chuàng)建一個(gè)集合,在集合中記錄已經(jīng)讀取的塊的編號(hào),如果2個(gè)及以上的塊是相互關(guān)聯(lián)的則按照順序依次寫入集合Ni,集合Ni的格式如{0x00,0x01,…,0x0m};

S411使得S45所述的m=m+1,相對(duì)該表項(xiàng)起始地址向后跳轉(zhuǎn)0x20字節(jié),獲取下一個(gè)塊的分配記錄地址;

S412根據(jù)S42中塊個(gè)數(shù)blocks來(lái)判斷下一個(gè)讀取的塊的地址是否已經(jīng)達(dá)到文件分配表尾部,若當(dāng)前m≥blocks則跳至S414,若m<blocks則跳至S413;

S413讀取該塊的編號(hào),并在Ni中驗(yàn)證該塊是否已經(jīng)被讀取,若已經(jīng)被讀取則跳至S411,否則跳至S45;

S414創(chuàng)建正常文件集合N,將所有的集合Ni寫入到集合N中,其格式如{N0,N1,N2,…,Ni};

S415將所有的正常文件依次寫入集合N后,并對(duì)其加上正常數(shù)據(jù)標(biāo)識(shí)N,以便區(qū)別其他類型的數(shù)據(jù)文件。

進(jìn)一步地:

所述S5讀取非正常數(shù)據(jù)記錄詳細(xì)流程如下:

S51讀取丟失數(shù)據(jù)記錄:依次解析磁盤劃分的每一個(gè)分區(qū),在分區(qū)的引導(dǎo)扇區(qū)中讀取該分區(qū)的文件分配表的地址,遍歷該表讀取相對(duì)表項(xiàng)起始位置偏移0x00處的值為非01或03的塊,并計(jì)算出該塊對(duì)應(yīng)的數(shù)據(jù)區(qū)地址,判斷該地址的內(nèi)容是否為0x00,不全部為0x00時(shí)按照嵌入式監(jiān)控設(shè)備的視頻數(shù)據(jù)結(jié)構(gòu)提取有效的視頻數(shù)據(jù);

S52讀取覆蓋數(shù)據(jù)記錄:依次解析磁盤劃分的每一個(gè)分區(qū),在分區(qū)的引導(dǎo)扇區(qū)中讀取該分區(qū)的文件分配表的地址,遍歷該表讀取相對(duì)表項(xiàng)起始位置偏移0x10處的值,該值即為塊的已使用的字節(jié)數(shù),然后計(jì)算出該塊對(duì)應(yīng)的數(shù)據(jù)區(qū)地址中未使用的字節(jié)數(shù),其公式可表示為:塊中未使用字節(jié)數(shù)=blocksectors*sectorsize-usedbytes,讀取塊中標(biāo)記為未使用的字節(jié)數(shù)地址的內(nèi)容,判斷該地址的內(nèi)容中是否為0x00,不全部為0x00時(shí)按照嵌入式監(jiān)控設(shè)備的視頻數(shù)據(jù)結(jié)構(gòu)提取有效的視頻數(shù)據(jù)。

進(jìn)一步地:

S51讀取丟失數(shù)據(jù)的詳細(xì)流程如下所述:

S511讀取磁盤主引導(dǎo)記錄:讀取位于磁盤0x1E扇區(qū)的主分配記錄中的分區(qū)的起始地址、分區(qū)引導(dǎo)記錄地址的信息,然后遍歷每一個(gè)分區(qū)并讀取信息;

S512跳至分區(qū)引導(dǎo)記錄地址:解析分區(qū)引導(dǎo)記錄信息,讀取相對(duì)分區(qū)引導(dǎo)記錄起始地址偏移0x2C長(zhǎng)度為0x02的值記為sectorsize、相對(duì)分區(qū)引導(dǎo)記錄起始地址偏移0x30~0x31的值記為blocksectors、相對(duì)分區(qū)引導(dǎo)記錄起始地址偏移0x38~0x3B的值記為data_firstblock、相對(duì)分區(qū)引導(dǎo)記錄起始地址偏移 0x44~0x47的值記為FAT、相對(duì)分區(qū)引導(dǎo)記錄起始地址偏移0x48~0x4B的值記為data_firstsector,相對(duì)分區(qū)引導(dǎo)記錄起始地址偏移0x4C~0x4F的值記為blocks;

S513跳至FAT地址讀取文件分配信息;

S514讀取塊的分配記錄信息,其中初始值m=0,按文件分配表順序一一讀取表項(xiàng)中的值,讀取每個(gè)表項(xiàng)中相對(duì)表項(xiàng)起始位置偏移0x00處的值記為flag;

S515讀取塊的記錄信息flag標(biāo)記來(lái)判斷分區(qū)是否使用,若flag為0x01或0x03則跳至S519,否則跳至S516;

S516計(jì)算出該塊對(duì)應(yīng)的數(shù)據(jù)區(qū)地址,讀取該地址的數(shù)據(jù)內(nèi)容并判斷其數(shù)據(jù)是否為空,若數(shù)據(jù)內(nèi)容全部為0x00則跳至S519,否則跳至S517;

S517根據(jù)視頻數(shù)據(jù)的格式提取塊內(nèi)容中的有效視頻文件;

S518創(chuàng)建已讀取塊集合Li,在集合中記錄已讀取塊的編號(hào),其格式如{0x00,0x01,…,0x0m};

S519使得S514的m=m+1,相對(duì)該表項(xiàng)起始地址向后跳轉(zhuǎn)0x20字節(jié),獲取下一個(gè)塊的分配記錄地址;

S5110根據(jù)S512中塊個(gè)數(shù)blocks來(lái)判斷下一個(gè)讀取的塊的地址是否已經(jīng)達(dá)到文件分配表尾部,若當(dāng)前m≥blocks則跳至S5112,若m<blocks則跳至S5111;

S5111讀取該塊的編號(hào),并在Li中驗(yàn)證該塊是否已經(jīng)被讀取,若已經(jīng)被讀取則跳至S519,若未被讀取則跳至S514;

S5112創(chuàng)建丟失文件集合L,將所有的集合Li寫入到集合L中,其格式如 {L0,L1,L2,…,Li};

S5113將所有的丟失文件依次寫入集合L后,并對(duì)其加上丟失數(shù)據(jù)標(biāo)識(shí)L,以便區(qū)別其他類型的數(shù)據(jù)文件。

進(jìn)一步地:

S52讀取覆蓋數(shù)據(jù)的詳細(xì)流程如下所述:

S521讀取位于磁盤0x1E扇區(qū)的主分配記錄中的分區(qū)的起始地址、分區(qū)引導(dǎo)記錄地址的信息,然后遍歷每一個(gè)分區(qū)并讀取信息;

S522解析分區(qū)引導(dǎo)記錄信息,讀取相對(duì)分區(qū)引導(dǎo)記錄起始地址偏移0x2C長(zhǎng)度為0x02的值記為sectorsize、相對(duì)分區(qū)引導(dǎo)記錄起始地址偏移0x30~0x31的值記為blocksectors、相對(duì)分區(qū)引導(dǎo)記錄起始地址偏移0x38~0x3B的值記為data_firstblock、相對(duì)分區(qū)引導(dǎo)記錄起始地址偏移0x44~0x47的值記為FAT、相對(duì)分區(qū)引導(dǎo)記錄起始地址偏移0x48~0x4B的值記為data_firstsector,相對(duì)分區(qū)引導(dǎo)記錄起始地址偏移0x4C~0x4F的值記為blocks;

S523跳至文件分配表地址讀取文件分配信息;

S524讀取文件分配表中所有數(shù)據(jù)的值,判斷其值是否為0x00,若全部為0x00則跳至S522,否則跳至S525;

S525讀取當(dāng)前塊m的分配記錄信息,其中初始值m=0:從FAT第一個(gè)表項(xiàng)開始逐一讀取FAT各表項(xiàng)信息,讀取每個(gè)表項(xiàng)中相對(duì)表項(xiàng)起始位置偏移0x00處的值記為flag,讀取相對(duì)表項(xiàng)起始位置偏移0x10~0x13的值記為usedbytes;

S526根據(jù)S525中讀取的信息中flag與usedbytes來(lái)判斷該塊是否已經(jīng)被寫入數(shù)據(jù),當(dāng)flag值為0x01或者0x03且usedbytes大于0則表示已經(jīng)寫入數(shù) 據(jù)跳至S527,否則跳至S5211;

S527根據(jù)S526中讀取的usedbytes進(jìn)行計(jì)算塊中未使用字節(jié)數(shù),讀取塊中未使用地址的數(shù)據(jù);

S528判斷未使用區(qū)域的內(nèi)容是否為空,若全部為0x00則跳至S5211,否則跳至S529;

S529根據(jù)視頻數(shù)據(jù)的格式提取塊內(nèi)容中的有效視頻文件;

S5210創(chuàng)建已讀取塊集合Fi,在集合中記錄已讀取塊的編號(hào),F(xiàn)i的格式入{0x0m};

S5211使得所述S25的m=m+1,相對(duì)該表項(xiàng)起始地址向后跳轉(zhuǎn)0x20字節(jié),來(lái)獲取下一個(gè)塊的分配記錄地址;

S5212根據(jù)S522中塊個(gè)數(shù)blocks來(lái)判斷下一個(gè)讀取的塊的地址是否已經(jīng)達(dá)到文件分配表尾部,若當(dāng)前m≥blocks則跳至S5214,m<blocks則跳至S5213;

S5213讀取該塊的編號(hào),并在Fi中驗(yàn)證該塊是否已經(jīng)被讀取,若已經(jīng)被讀取則跳至S5211,否則跳至S525;

S5214創(chuàng)建覆蓋文件集合F,將所有的集合Fi寫入到集合F中,其格式如{F0,F1,F2,…,Fi};

S5215將所有的覆蓋文件依次寫入集合F后,并對(duì)其加上覆蓋數(shù)據(jù)標(biāo)識(shí)F,以便區(qū)別其他類型的數(shù)據(jù)文件。

進(jìn)一步地:

S4所述的計(jì)算方法如下所述:

計(jì)算公式為:編號(hào)為x的塊表項(xiàng)對(duì)應(yīng)的塊地址=數(shù)據(jù)區(qū)開始扇區(qū)+(文件首 塊號(hào)+x)*每塊扇區(qū)數(shù),其中記錄數(shù)據(jù)區(qū)開始扇區(qū)地址位于相對(duì)分區(qū)引導(dǎo)記錄起始地址偏移0x48且長(zhǎng)度為0x04,記錄文件首塊號(hào)的地址位于相對(duì)分區(qū)引導(dǎo)記錄起始地址偏移0x38且長(zhǎng)度為0x04,記錄每塊扇區(qū)數(shù)的地址位于相對(duì)分區(qū)引導(dǎo)記錄起始地址偏移0x30且長(zhǎng)度為0x04。

進(jìn)一步地:

S47所述的計(jì)算方法如下所述:

計(jì)算公式:addressx=data_firstsector+(data_firstblock+x)*blocksectors,其中x為文件分配表的編號(hào)。

進(jìn)一步地:

S516所述的計(jì)算公式:addressx=data_firstsector+(data_firstblock+x)*blocksectors,其中x為文件分配表的編號(hào)。

進(jìn)一步地:

S527讀取塊中未使用地址的數(shù)據(jù)具體方法如下:

根據(jù)計(jì)算公式:addressx=data_firstsector+(data_firstblock+x)*blocksectors計(jì)算出該塊對(duì)應(yīng)的數(shù)據(jù)區(qū)地址,其中x為文件分配表中表項(xiàng)的編號(hào);再根據(jù)計(jì)算公式:塊中未使用的字節(jié)=blocksectors*sectorsize-usedbytes來(lái)獲取塊中未使用的字節(jié)數(shù),跳至addressx地址的讀取相應(yīng)未使用區(qū)域的字節(jié)。

本領(lǐng)域的普通技術(shù)人員將會(huì)意識(shí)到,這里所述的實(shí)施例是為了幫助讀者理解本發(fā)明的實(shí)施方法,應(yīng)被理解為本發(fā)明的保護(hù)范圍并不局限于這樣的特別陳述和實(shí)施例。本領(lǐng)域的普通技術(shù)人員可以根據(jù)本發(fā)明公開的這些技術(shù)啟示做出各種不脫離本發(fā)明實(shí)質(zhì)的其它各種具體變形和組合,這些變形和組合仍然在本發(fā)明的保護(hù)范圍內(nèi)。

當(dāng)前第1頁(yè)1 2 3 
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1