從二進制分析flv數據流

利用utralEdit打開flv的文件可以看到如下:


以頭信息爲例進行分析如下:


這個是對flv格式的視頻數據進行分析的一個總結。

一、File Header結構
  File Header在當前版本中總是由9個字節組成,如圖中藍色區域所示。
  第1-3字節爲文件標識(Signature),總爲“FLV”(0x46 0x4C 0x56),如圖中紫色區域。
  第4字節爲版本,目前爲1(0x01)。
  第5個字節的前5位保留,必須爲0。
  第5個字節的第6位表示是否存在音頻Tag。
  第5個字節的第7位保留,必須爲0。
  第5個字節的第8位表示是否存在視頻Tag。
  第6-9個字節爲UI32類型的值,表示從File Header開始到File Body開始的字節數,版本1中總爲9。

Tag結構

  Tag包括Tag Header和Tag Data兩部分。不同類型的Tag的Header結構是相同的,但是Data結構各不相同。如圖中綠色和黃色區域分別表示Tag Header數據和Tag Data數據。

  當前版本的Tag Header結構佔用11個字節。

  第1個字節表示Tag類型,包括音頻(0x08)、視頻(0x09)和script data(0x12),其他類型值被保留。

  第2-4字節爲UI24類型的值,表示該Tag Data部分的大小。

  第5-7字節爲UI24類型的值,表示該Tag的時間戳(單位爲ms),第一個Tag的時間戳總是0。

  第8個字節爲時間戳的擴展字節,當24位數值不夠時,該字節作爲最高位將時間戳擴展爲32位值。

  第9-11字節爲UI24類型的值,表示stream id,總是0。

  後面的字節爲Tag Data數據,Data的大小由第2-4字節的數值指示,根據第1個字節指示的Tag類型,按照不同的結構解析Tag Data。下面分別介紹。

原本的格式如下


從下圖更形象的看出tag和body的結構



發佈了581 篇原創文章 · 獲贊 300 · 訪問量 189萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章