FLV檔案格式解析

2021-06-19 15:10:48 字數 1932 閱讀 9552

flv是流**封裝格式,我們可以將其資料看為二進位制位元組流。總體上看,flv包括檔案頭(fileheader)和檔案體(file body)兩部分,其中檔案體由一系列的tag及tagsize對組成。因此乙個flv檔案看上去是下面的結構:

一、file header結構

fileheader在當前版本中總是由9個位元組組成,如圖中藍色區域所示。

第1-3位元組為檔案標識(signature),總為「flv」(0x46 0x4c 0x56),如圖中紫色區域。

第4位元組為版本,目前為1(0x01)。

第5個位元組的前5位保留,必須為0。

第5個位元組的第6位表示是否存在音訊tag。

第5個位元組的第7位保留,必須為0。

第6-9個位元組為ui32型別的值,表示從file header開始到file body開始的位元組數,版本1中總為9。

二、previous tag size結構

如圖中紅色位置所示。

三、tag結構

tag包括tagheader和tagdata兩部分。不同型別的tag的header結構是相同的,但是data結構各不相同。如圖中綠色和黃色區域分別表示tagheader資料和tag data資料。

當前版本的tagheader結構占用11個位元組。

第2-4位元組為ui24型別的值,表示該tag data部分的大小。

第5-7位元組為ui24型別的值,表示該tag的時間戳(單位為ms),第乙個tag的時間戳總是0。

第8個位元組為時間戳的擴充套件位元組,當24位數值不夠時,該位元組作為最高位將時間戳擴充套件為32位值。

第9-11位元組為ui24型別的值,表示stream id,總是0。

後面的位元組為tagdata資料,data的大小由第2-4位元組的數值指示,根據第1個位元組指示的tag型別,按照不同的結構解析tagdata。下面分別介紹。

四、audio tag data結構

音訊tag開始的第1個位元組包含了音訊資料的引數資訊,從第2個位元組開始為音訊流資料。

第1個位元組的第5-6位的數值表示取樣率,0 = 5.5 khz,1 = 11 khz,2 = 22 khz,3 = 44khz。

第1個位元組的第7位表示取樣精度,0 = 8bits,1 = 16bits。

第1個位元組的第8位表示音訊型別,0 = mono,1 = stereo。

五、video tag data結構

第1個位元組的前4位的數值表示幀型別。

六、script tag data結構

第乙個amf包:

第1個位元組表示amf包型別,一般總是0x02,表示字串,其他值表示意義請查閱文件。

第2-3個位元組為ui16型別值,表示字串的長度,一般總是0x000a(「onmetadata」長度)。

後面位元組為字串資料,一般總為「onmetadata」。

第二個amf包:

第1個位元組表示amf包型別,一般總是0x08,表示陣列。

第2-5個位元組為ui32型別值,表示陣列元素的個數。

後面即為各陣列元素的封裝,陣列元素為元素名稱和值組成的對。表示方法如下:

第1-2個位元組表示元素名稱的長度,假設為l。

後面跟著為長度為l的字串。

第l+3個位元組表示元素值的型別。

後面跟著為對應值,占用位元組數取決於值的型別。

FLV檔案格式解析

flv是流 封裝格式,我們可以將其資料看為二進位制位元組流。總體上看,flv包括檔案頭 file header 和檔案體 file body 兩部分,其中檔案體由一系列的tag及tag size對組成。因此乙個flv檔案看上去是下面的結構 其中,previous tag size 緊跟在每個 tag...

FLV檔案格式解析

原創出處 flv是流 封裝格式,我們可以將其資料看為二進位制位元組流。總體上看,flv包括檔案頭 file header 和檔案體 file body 兩部分,其中檔案體由一系列的tag及tag size對組成。因此乙個flv檔案看上去是下面的結構 一 file header結構 file head...

FLV檔案格式解析

flv是流 封裝格式,我們可以將其資料看為二進位制位元組流。總體上看,flv包括檔案頭 file header 和檔案體 file body 兩部分,其中檔案體由一系列的tag及tag size對組成。因此乙個flv檔案看上去是下面的結構 一 file header結構 file header在當前...