1. 程式人生 > >分析flv檔案的資訊

分析flv檔案的資訊

上一篇博文“FLV檔案格式解析”提到的小工具FLVParse,是由於工作需要,我自己寫的一個小程式。
這個工具的主要功能是檢視FLV的檔案結構,幫助我們理解FLV格式。另外,如果涉及到處理FLV檔案的開發,這個工具對於檢視處理結果非常有幫助。因此我覺得有必要寫一個使用說明,希望這個工具能夠給大家提供幫助。
 

  
    開啟後的介面如下圖所示。


    先說一下介面佈局:左上方是FLV檔案的結構樹,右邊是FLV檔案的位元組流資料;左側結構樹下面依次是結構樹的資訊等級選擇、高速模式選擇、檔案分析用時及進度條等;下方是分析檔案的地址顯示以及檔案選擇按鈕。下面詳細介紹一下相關部分。
   
    結構樹及資訊等級


    FLV結構樹是這個工具最重要的顯示資訊,使用者可以直觀的檢視當前FLV檔案的結構。FLVParse預設FLV檔案結構樹的形式為:File Header + Metadata Tag(1個) + Video or Audio Tags(按順序)。
    結構樹的資訊詳細程度是按等級劃分的,之所以要分等級,是為了區分顯示資訊的詳細程度,因為不同程度的分析對於分析所用的時間影響是比較大的(主要在UI介面上),越詳細的資訊等級佔用分析時間越長。一共有6個等級,按從簡單到詳細介紹如下。
    only section position info
  —— 只有每個section的位置資訊,如下圖所示。其中每個section後的方括號裡是位置資訊(十六進位制表示),每個“Pre Tag Size”後面的數字表示size的大小(十進位制表示),Video&Audio Tag按照在檔案中的順序依次排序標號;


    file header info, metadata info  —— 只有File Header + Metadata Tag的詳細資訊,如下圖所示。其中File Header的詳細結構資訊會在子樹中列出,並在每項後面標示該項的值;Metadata Tag類似,包含Tag Header和Tag Data兩個子樹,並且對應子項的詳細資訊也都列出;


    file header info, metadata info, tag position info  —— 包含File Header + Metadata Tag的詳細資訊,Video&Audio Tags的位置資訊,以及Pre Tag Size資訊,如下圖所示;


    file header info, metadata info, tag section position info  —— 比上個等級多出Video&Audio Tags的Tag Header和Tag Data的位置資訊,如下圖所示;


    file header info, metadata info, tag header info  —— 比上個等級多出Tag Header的詳細子項資訊,如下圖所示;

    file header info, metadata info, tag info  —— 比上個等級多出Tag Data的詳細子項資訊,如下圖所示。


    
    FLV位元組流資料顯示
    右側顯示了FLV檔案的資料,可以讓使用者方便地查詢對應位置上的位元組。每一行都以一個十六進位制的位置開始,該位置為相對於檔案開頭的位置。每一行有十六個位元組,每個位元組按高4位和第4位顯示2個十六進位制的字元,使用者可以滑動滾動條檢視任意位置的位元組。
    當用戶選中左邊結構樹中的某項時,右邊資料會自動選中對應的資料區域(綠色),根據不同項的型別,選中的區域大小也會自動對應。

 

    高速模式
    這個選項是為了解決分析比較大的FLV檔案時,使用者等待時間過長的問題。
    普通模式時,分析過程為阻塞模式,即主執行緒分析完畢後重新整理介面,使用者才可以繼續操作。
    高速模式時,為非阻塞模式,主執行緒分析一小部分後立即返回重新整理介面,響應使用者操作;另外一個執行緒會繼續分析剩餘大部分檔案,直到分析完畢自動結束執行緒。因 此高速模式時,使用者會看到結構樹的滾動條一直在滑動,這是因為後臺分析執行緒在不斷向結構樹裡新增子項。需要注意的是,當後臺分析執行緒還沒有結束,如果使用者 開啟新的檔案進行分析,有可能出現錯誤的分析結果。這個目前沒有進行測試,我想應該是這樣的。
    這裡需要提一下,其實真正分析檔案的時間並不會特別長,即使幾百兆的檔案,幾十秒內應該沒有問題,時間主要消耗在MFC的樹型控制元件CTreeCtrl上。 為了開發效率,FLVParse使用了MFC控制元件,但是CTreeCtrl在結構比較複雜,子項比較多的時候,效率會出現比較大的下降。當子項超過 10000的時候,再進行新增的時間大大變長,幾乎到了無法忍受的程度,好在還算穩定,沒有出現崩潰等現象。粗略估計,每次分析檔案,花在更新UI介面上 的時間要佔總耗時的90%以上,而且對於越大的檔案這個比例佔的越大。

 

    分析耗時
    耗時包括分析檔案結構耗時和更新UI介面耗時兩部分,每次分析完畢都會顯示結果。大家還可以根據進度條來估算分析需要等待的時間。

 

FLVParse一般的操作步驟為:

選擇結構資訊等級 --> 根據檔案大小選擇是否“高速模式” --> 點選“瀏覽”選擇要分析的檔案 --> 分析完畢後選中結構樹中某項 --> 檢視資料區對應該項的位元組資料(或通過滾動條檢視某位置位元組資料)

 

注意事項:
1、每次改變資訊等級後,要重新開啟一次檔案,目前不支援動態更新,以後有機會完善此功能;
2、5個等級的資訊對於分析時間的區分還是比較明顯的,建議大家每次分析之前選擇合適的等級;
3、FLVParse預設FLV檔案只有一個Metadata Tag,如果有多個的話,後面的會略過;
4、FLVParse對於Metadata子項的分析,目前只支援DOUBLE,BOOL和STRING三種類型,遇到其他型別,則會將該項與其後的項都忽略,因此有可能出現metadata的array size與實際顯示的不相符的情況;
5、對於比較大的檔案(10M以上),建議大家選擇高速模式,否則等待的過程將很漫長,而且要注意下一次分析時確保上一次分析已經結束;
6、對於metadata的分析部分,可能還有一些bug,但不影響其他Tag的分析,經簡單測試,該工具對FLV結構的分析是比較準確的,大家可以放心使用;