1. 程式人生 > >FLV文件格式解析

FLV文件格式解析

表示 specific 參考 wid aud details art AMF 如果

1.FLV文件整體結構

FLV文件由FLV header和FLV body組成,FLV body由一系列的FLV tags組成,如下圖所示 技術分享圖片

tag又可以分成三類:audio,video,script,分別代表音頻流,視頻流,腳本流,而每個tag又由tag header和tag data組成。每個Tag前面還包含了Previous Tag Size字段,表示前面一個Tag的大小。整個FLV文件的詳細的組成如下圖所示

技術分享圖片

2.Audio Tag Data結構

音頻tag開始的第1個字節包含了音頻數據的參數信息,從第2個字節開始為音頻流數據。結構如下圖所示 技術分享圖片

音頻tag的第一個字節的前4位代表音頻編碼類型,各個取值的含義如下

技術分享圖片

第5-6位代表音頻采樣率,各取值的含義如下:

技術分享圖片

第7位代表音頻采樣精度,各取值的含義如下 技術分享圖片 第8位代表音頻的聲道數,各取值含義如下: 技術分享圖片 從第2個字節開始就為音頻數據 技術分享圖片 如果音頻數據編碼格式為AAC 技術分享圖片

3.Video Tag Data結構

視頻Tag也用開始的第1個字節包含視頻數據的參數信息,從第2個字節為視頻流數據。結構如下圖所示 技術分享圖片

第1個字節的前4位表示幀類型,各個取值的含義如下:

技術分享圖片

後4位表示視頻編碼類型,各個取值的含義如下:

技術分享圖片

從第二個字節開始就是視頻數據

技術分享圖片

如果視頻為AVC

技術分享圖片

4.Script Tag Data結構(控制幀)

該類型Tag又通常被稱為Metadata Tag,會放一些關於FLV視頻和音頻的元數據信息如:duration、width、height等。通常該類型Tag會跟在File Header後面作為第一個Tag出現,而且只有一個。結構如下圖所示 技術分享圖片
第一個AMF包:第1個字節表示AMF包類型,一般總是0x02,表示字符串。第2-3個字節為UI16類型值,標識字符串的長度,一般總是0x000A(“onMetaData”長度)。後面字節為具體的字符串,一般總為“onMetaData”(6F,6E,4D,65,74,61,44,61,74,61)。 第二個AMF包:第1個字節表示AMF包類型,一般總是0x08,表示數組。第2-5個字節為UI32類型值,表示數組元素的個數。後面即為各數組元素的封裝,數組元素為元素名稱和值組成的對。常見的數組元素如下: 技術分享圖片

參考資料: http://blog.csdn.net/leixiaohua1020/article/details/17934487 flv_video_file_format_specification _v10.pdf

FLV文件格式解析