康艷榮, 張 弘, 趙 露, 鄧 奇, 范 瑋
(1.公安部物證鑒定中心, 北京 100038; 2.中國(guó)人民公安大學(xué), 北京 100038 3.北京北亞時(shí)代科技有限公司, 北京 100094; 4.天津市公安局, 天津 300193)
視頻數(shù)據(jù)因其能記錄、保存時(shí)間和空間上的各種信息,已逐漸成為信息處理領(lǐng)域中主要的信息媒體形式,蘊(yùn)涵著大量潛在價(jià)值的信息和知識(shí),目前在基于內(nèi)容的視頻信息檢索研究方面有不少研究成果,這些成果都是在視頻數(shù)據(jù)能夠正常播放的前提下實(shí)現(xiàn)的,如葉鋒等人提出的一種面向視頻編碼的基于結(jié)構(gòu)分析的感知信號(hào)處理模型,降低了視頻感知冗余[1],陳堯等人提出的關(guān)鍵幀提取技術(shù)可以快速?gòu)拇罅恳曨l數(shù)據(jù)中檢索出用戶(hù)所關(guān)心的視頻數(shù)據(jù)[2]。而如何通過(guò)分析二進(jìn)制碼視頻數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)對(duì)無(wú)法播放視頻數(shù)據(jù)的信息檢索和解碼,是當(dāng)前亟需解決的一個(gè)技術(shù)難題。在MPEG4等編碼標(biāo)準(zhǔn)中,場(chǎng)景、對(duì)象、通道、時(shí)間信息等都是以二進(jìn)制形式進(jìn)行編碼并存放在一個(gè)視頻文件中,鄭翔等人通過(guò)一個(gè)簡(jiǎn)單的分析實(shí)例介紹了MP4 流文件的組成機(jī)制,為分析通用格式的MP4視頻數(shù)據(jù)結(jié)構(gòu)提供了一個(gè)研究思路[3],黃東軍等人詳細(xì)介紹了僅含圖像序列的AVI文件結(jié)構(gòu),為分析AVI封裝格式提供了一個(gè)結(jié)構(gòu)框圖[4],文獻(xiàn)5介紹了H.264碼流總體結(jié)構(gòu),為分析基于H.264編碼的視頻數(shù)據(jù)結(jié)構(gòu)分析提供了一個(gè)參考內(nèi)容[5],王進(jìn)解析了網(wǎng)絡(luò)傳送的視頻流中IBP幀數(shù)據(jù)格式,為關(guān)鍵幀數(shù)據(jù)結(jié)構(gòu)分析提供了一個(gè)成功案例[6],但因?yàn)榇蟛糠謴S(chǎng)商的視頻監(jiān)控產(chǎn)品都定義了自己的數(shù)據(jù)格式,上述這些方法尚未涉及有關(guān)廠(chǎng)商自有的視頻監(jiān)控?cái)?shù)據(jù)格式解析。本文以上述文獻(xiàn)中所介紹的各類(lèi)視頻數(shù)據(jù)封裝結(jié)構(gòu)、編解碼知識(shí)為基礎(chǔ),針對(duì)一類(lèi)波粒超大視頻數(shù)據(jù)文件使用常規(guī)播放器(如暴風(fēng)影音)和廠(chǎng)家專(zhuān)用播放器均無(wú)法播放的問(wèn)題,研究廠(chǎng)商自有的封裝結(jié)構(gòu),通過(guò)二進(jìn)制碼分析比對(duì)正常和超大波粒視頻數(shù)據(jù)文件結(jié)構(gòu),解析了兩類(lèi)波粒視頻數(shù)據(jù)之間索引位圖、關(guān)鍵幀等數(shù)據(jù)結(jié)構(gòu),建立了波粒超大視頻數(shù)據(jù)解析算法, 該方法首先將封裝在一個(gè)波粒超大視頻文件中的多個(gè)通道的索引位圖數(shù)據(jù)拆分,其次根據(jù)索引位圖中給出的所有關(guān)鍵幀數(shù)據(jù)的位置提取每一個(gè)關(guān)鍵幀數(shù)據(jù)及其余下的49個(gè)非關(guān)鍵幀數(shù)據(jù);最后將每一個(gè)索引位圖與所對(duì)應(yīng)的視頻關(guān)鍵幀、非關(guān)鍵幀數(shù)據(jù)重新組合形成一個(gè)新的文件,實(shí)現(xiàn)了波粒超大視頻的解碼與播放。
本節(jié)將通過(guò)數(shù)學(xué)語(yǔ)言的描述建立起數(shù)學(xué)符號(hào)與正常WAPA文件、超大WAPA文件的數(shù)據(jù)結(jié)構(gòu)之間的關(guān)系。
定義1.1 WAPA文件頭索引 正常WAPA視頻數(shù)據(jù)文件1的前20個(gè)字節(jié)為固定值,記為f1,第21至24字節(jié)為WAPA文件的總播放時(shí)長(zhǎng),記為f2,25至28字節(jié)為WAPA文件起始時(shí)間,記為f3,則由f1,f2,f3組成的二進(jìn)制數(shù)據(jù)序列為WAPA文件頭索引(F),記為F=(f1,f2,f3)。
定義1.2 WAPA數(shù)據(jù)包索引 由WAPA文件頭索引往后,每8個(gè)字節(jié)為一組,記為k[i](i≥0),其中前4個(gè)字節(jié)為第i個(gè)數(shù)據(jù)包的絕對(duì)偏移地址記為Aa[i](i≥0),后4個(gè)字節(jié)為第i個(gè)數(shù)據(jù)包的起始毫秒數(shù),記為T(mén)[i](i≥0),k[i]=Aa[i]+T[i],則由k[0],k[1],k[2]……k[i]組成的二進(jìn)制數(shù)據(jù)序列為WAPA數(shù)據(jù)包索引(KI),記為KI=(k[0],k[1],k[2]……k[i])(i≥0)。
定義1.3 位圖索引 由WAPA文件頭索引和WAPA數(shù)據(jù)包索引組成的二進(jìn)制序列為位圖索引(BM),記為BM=(F,KI)。
定義1.4 WAPA數(shù)據(jù)包頭由16個(gè)字節(jié)組成,記為H;第1字節(jié)為幀標(biāo)識(shí),第2字節(jié)為空,第3字節(jié)為通道標(biāo)識(shí),第4字節(jié)為WAPA文件內(nèi)部視頻分類(lèi)標(biāo)識(shí),記為Fx;第5-8字節(jié)為下一幀數(shù)據(jù)的相對(duì)偏移地址,記為Ra;第9-12字節(jié)為數(shù)據(jù)包的起始毫秒數(shù),記為T(mén)s;第13-16字節(jié)為數(shù)據(jù)包的視頻錄制起始時(shí)間Tp。
定義1.5 WAPA關(guān)鍵幀數(shù)據(jù)包 由WAPA數(shù)據(jù)包頭和1個(gè)關(guān)鍵幀數(shù)據(jù)組成,記為Pk。
定義1.6 WAPA非關(guān)鍵幀數(shù)據(jù)包 由WAPA數(shù)據(jù)包頭和1個(gè)非關(guān)鍵幀數(shù)據(jù)組成,記為Pm。
定義1.7 WAPA數(shù)據(jù)包 由1個(gè)WAPA關(guān)鍵幀數(shù)據(jù)包和49個(gè)非關(guān)鍵幀數(shù)據(jù)包組成,記為P,其中第i個(gè)WAPA數(shù)據(jù)包記為P[i],第i個(gè)WAPA關(guān)鍵幀數(shù)據(jù)包記為Pk[i],第i個(gè)WAPA數(shù)據(jù)包中第n個(gè)非關(guān)鍵幀數(shù)據(jù)包記為Pm[i,n],(i≥0,n≥0)。
定義1.8 WAPA數(shù)據(jù)文件由位圖索引和多個(gè)WAPA數(shù)據(jù)包組成的數(shù)據(jù)文件為WAPA數(shù)據(jù)文件,記為NF,結(jié)構(gòu)如圖1所示。
圖1 WAPA數(shù)據(jù)文件結(jié)構(gòu)圖
定義1.9 超大WAPA文件由多個(gè)位圖索引和多個(gè)WAPA數(shù)據(jù)包組成的數(shù)據(jù)文件,記為SF,結(jié)構(gòu)如圖2所示。
圖2 超大WAPA數(shù)據(jù)文件結(jié)構(gòu)圖
根據(jù)上節(jié)中建立的數(shù)據(jù)模型,本節(jié)將給出超大WAPA視頻數(shù)據(jù)解析算法步驟。
輸入:超大WAPA數(shù)據(jù)文件(SF)
輸出:WAPA數(shù)據(jù)文件(NF)
file open(SF);∥讀取超大WAPA數(shù)據(jù)文件
for(i=0;i≤n-1;i++) ∥n為通道數(shù)
{
∥讀取第i個(gè)通道的位圖索引
StartAddress=Seek(Hex(第i個(gè)通道F));
EndAddress= Seek(Hex(第i+1個(gè)通道F));
Len=EndAddress-StartAddress+Sizeof(F);∥計(jì)算位圖索引長(zhǎng)度
Read file(buffer,Hex(StartAddress-Siziof(F)),Hex(Len));
File write(NewFile[i],buffer,Hex(Len));∥讀取位圖索引至一個(gè)新文件NewFile[i]
∥讀取第i通道WAPA數(shù)據(jù)包
Count=( EndAddress-StartAddress)/8 ∥計(jì)算NewFile[i]中KI序列個(gè)數(shù)
For(m=0;m≤Count-1;m++)
{
PAddress=Seek(Hex(k[m].Aa[m]));
Read file(buffer, PAddress,4);∥讀取第i通道第m個(gè)數(shù)據(jù)包的絕對(duì)偏移地址
KAddress= Seek(Hex(Pk[m].Ra));
Read file(buffer,PAddress,KAddress+16);
File write(NewFile[i],buffer, KAddress+16);∥讀取第i通道第m個(gè)數(shù)據(jù)包的關(guān)鍵幀數(shù)據(jù)并寫(xiě)入NewFile[i]
While(0≤k≤48)
{
∥讀取第i通道第m個(gè)數(shù)據(jù)包的所有非關(guān)鍵幀數(shù)據(jù)
MAddress=Seek(Hex(Pm[m,k].Ra));
Read file(buffer,PAddress+KAddress+16,MAddress)
PAddress= PAddress+MAddress;
File write(NewFile[i],buffer,MAddress);
}k++;
NAddress=Seek(Hex(NewFile[i].Pk[m]));
OverWrite(NewFile[i].k[m].Aa[m]);∥修改NewFile[i]文件中WAPA數(shù)據(jù)包索引中的偏移地址值
}
}
File close(SF);
本文使用Python語(yǔ)言實(shí)現(xiàn)了上述算法,一個(gè)超大WAPA數(shù)據(jù)文件被成功解析成13個(gè)WAPA數(shù)據(jù)文件的實(shí)現(xiàn)界面截圖,如圖3所示。同時(shí),本文利用本實(shí)驗(yàn)用的超大WAPA數(shù)據(jù)文件中的WAPA位圖索引和WAPA數(shù)據(jù)包分別組成了包含2個(gè)、4個(gè)、6個(gè)、8個(gè)、10個(gè)、12個(gè)WAPA位圖索引(2BM,4BM,6BM,8BM,10BM,12BM)和對(duì)應(yīng)WAPA數(shù)據(jù)包的超大數(shù)據(jù)文件,比較算法的執(zhí)行效果,如圖4所示。從圖4中可以看出,隨著WAPA數(shù)據(jù)文件的增大,執(zhí)行時(shí)間也越來(lái)越長(zhǎng),因此,后期將進(jìn)行算法改進(jìn),使之可以同時(shí)讀取一個(gè)超大WAPA數(shù)據(jù)文件中的2-4個(gè)WAPA位圖索引,分別寫(xiě)入不同的文件,以提高算法的執(zhí)行速度。
圖3 算法實(shí)現(xiàn)界面
圖4 算法執(zhí)行效果
本文主要通過(guò)將一個(gè)無(wú)法播放的超大WAPA數(shù)據(jù)文件解析成多個(gè)WAPA數(shù)據(jù)文件的方法,使其能夠正常播放。因此,文中并未對(duì)WAPA數(shù)據(jù)包頭中的視頻錄制起始時(shí)間Tp進(jìn)行詳細(xì)闡述,但在實(shí)現(xiàn)本文算法的過(guò)程中,作者已對(duì)波粒監(jiān)控4字節(jié)的時(shí)間編碼格式進(jìn)行了分析和研究,解析了4字節(jié)二進(jìn)制數(shù)據(jù)每一位的含義及與年月日的關(guān)系,并建立了相應(yīng)的計(jì)算公式。利用波粒視頻數(shù)據(jù)的此項(xiàng)編碼規(guī)則,可以直接訪(fǎng)問(wèn)硬盤(pán)底層二進(jìn)制數(shù)據(jù)并恢復(fù)或查找已刪除、部分覆蓋的視頻數(shù)據(jù)。
本文通過(guò)分析WAPA視頻文件和超大WAPA視頻文件的索引位圖、WAPA數(shù)據(jù)包,發(fā)現(xiàn)了WAPA視頻文件和超大WAPA視頻文件的文件結(jié)構(gòu)差異,解析了WAPA視頻文件和超大WAPA視頻文件中廠(chǎng)商自有數(shù)據(jù)的封裝結(jié)構(gòu)與位置信息,并結(jié)合廠(chǎng)商自有數(shù)據(jù)結(jié)構(gòu)和常規(guī)視頻數(shù)據(jù)結(jié)構(gòu)成功將超大WAPA視頻文件分解成多個(gè)WAPA視頻文件并播放。實(shí)驗(yàn)證明,本論文提出的超大WAPA視頻數(shù)據(jù)解析算法能夠正確解析容量為不小于6GB的超大WAPA數(shù)據(jù)文件,但該算法僅適用于對(duì)正常WAPA文件的解析,對(duì)于已被刪除、格式化或部分覆蓋的超
大WAPA視頻數(shù)據(jù),根據(jù)WAPA位圖索引中存儲(chǔ)的WAPA數(shù)據(jù)包地址無(wú)法找到對(duì)應(yīng)WAPA數(shù)據(jù)包,下一步,作者將針對(duì)上述問(wèn)題從兩個(gè)方面展開(kāi)研究,一是建立超大WAPA數(shù)據(jù)文件時(shí)間搜索算法,直接從硬盤(pán)底層以二進(jìn)制方式搜索、恢復(fù)丟失的數(shù)據(jù),二是建立超大WAPA數(shù)據(jù)文件地址重建算法,將丟失的每個(gè)數(shù)據(jù)包重新組合,并建立對(duì)應(yīng)的位圖索引,形成可以正常播放WAPA視頻數(shù)據(jù)文件。