flv是流**封裝格式,我們可以將其資料看為二進位制位元組流。總體上看,flv包括檔案頭(file header)和檔案體(file body)兩部分,其中檔案體由一系列的tag及tag size對組成。因此乙個flv檔案看上去是下面的結構:
其中,previous tag size
緊跟在每個
tag之後,佔
4個位元組表示乙個
ui32
型別的數值,表示前面乙個
tag的大小。需要注意的是,
previous tag size #0
的值總是為0。
tagscript
,且每個
tag只能包含一種型別的資料。下面我們看看
file header
和tag
的具體結構,為了方便大家理解,我貼乙個實際
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。
第6-9個位元組為ui32型別的值,表示從file header開始到file body開始的位元組數,版本1中總為9。
二、previous tag size結構
如圖中紅色位置所示。
三、tag結構
tag包括tag header和tag data兩部分。不同型別的tag的header結構是相同的,但是data結構各不相同。如圖中綠色和黃色區域分別表示tag header資料和tag data資料。
當前版本的tag header結構占用11個位元組。
第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。下面分別介紹。
四、audio tag data結構
音訊tag開始的第1個位元組包含了音訊資料的引數資訊,從第2個位元組開始為音訊流資料。
第1個位元組的第5-6位的數值表示取樣率,0 = 5.5 khz,1 = 11 khz,2 = 22 khz,3 = 44 khz。
第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檔案看上去是下面的結構 一 file header結構 file head...
FLV檔案格式解析
flv是流 封裝格式,我們可以將其資料看為二進位制位元組流。總體上看,flv包括檔案頭 fileheader 和檔案體 file body 兩部分,其中檔案體由一系列的tag及tagsize對組成。因此乙個flv檔案看上去是下面的結構 一 file header結構 fileheader在當前版本中...
FLV檔案格式解析
flv是流 封裝格式,我們可以將其資料看為二進位制位元組流。總體上看,flv包括檔案頭 file header 和檔案體 file body 兩部分,其中檔案體由一系列的tag及tag size對組成。因此乙個flv檔案看上去是下面的結構 一 file header結構 file header在當前...