生活随笔
收集整理的這篇文章主要介紹了
FLV格式分析
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
FLV格式分析
目錄
FVL概述 框架解析圖 FLV Header FLV Body
GitHub源碼地址:flv-parser Flv解復用代碼解析:Flv解復用代碼解析
1. FVL概述
FLV(Flash Video)是Adobe公司推出的?種流媒體格式,由于其封裝后的?視頻?件體積?、封裝簡單等特點,?常適合于互聯?上使?。?前主流的視頻?站基本都?持FLV。采?FLV格式封裝的?件后綴為.flv。 FLV封裝格式是由?個?件頭(file header)和 ?件體(file Body)組成。 FLV body由?對對的(Previous Tag Size字段 + tag)組成。Previous Tag Size字段排列在Tag之前,占?4個字節。Previous Tag Size記錄了前??個Tag的??,?于逆向讀取處理。FLV header后的第?個Pervious Tag Size的值為0。 Tag?般可以分為3種類型:腳本(幀)數據類型、?頻數據類型、視頻數據類型。FLV數據以?端序進?存儲,在解析時需要注意。 ?個標準FLV?件結構如下圖: FLV?件的詳細內容結構如下圖:
2. 框架解析圖
3. FLV Header
注:在下?的數據type中,UI表示?符號整形,后?跟的數字表示其?度是多少位。?如UI8,表示?符號整形,?度?個字節。UI24是三個字節,UI[8*n]表示多個字節。UB表示位域,UB5表示?個字節的5位??梢詤⒖糲中的位域結構體。 FLV頭占9個字節,?來標識?件為FLV類型,以及后續存儲的?視頻流。?個FLV?件,每種類型的tag都屬于?個流,也就是?個flv?件最多只有?個?頻流,?個視頻流,不存在多個獨?的?視頻流在?個?件的情況。
1. FLV頭的結構如下:
4. FLV Body
FLV Header之后,就是FLV File Body。FLV File Body是由?連串的back-pointers + tags構成。Back-pointer表示Previous Tag Size(前?個tag的字節數據?度),占4個字節。
1. FLV Tag
每?個Tag也是由兩部分組成:tag header和tag data。Tag Header?存放的是當前tag的類型、數據區(tag data)的?度等信息。
1. tag header
tag header?般占11個字節的內存空間。FLV tag結構如下: 注意: flv?件中Timestamp和TimestampExtended拼出來的是dts。也就是解碼時間。Timestamp和TimestampExtended拼出來dts單位為ms。(如果不存在B幀,當然dts等于pts) CompositionTime 表示PTS相對于DTS的偏移值, 在每個視頻tag的第14~16字節 。顯示時間(pts) = 解碼時間(tag的第5~8字節) +CompositionTime。 CompositionTime的單位也是ms Script data腳本數據就是描述視頻或?頻的信息的數據,如寬度、?度、時間等等,?個?件中通常只有?個元數據,?頻tag和視頻tag就是?視頻信息了,采樣、聲道、頻率,編碼等信息。
2. Script Tag Data結構(腳本類型、幀類型)
該類型Tag?被稱為MetaData Tag,存放?些關于FLV視頻和?頻的元信息,?如:duration、width、height等。通常該類型Tag會作為FLV?件的第?個tag,并且只有?個,跟在File Header后。該類型Tag Data的結構如下所示: 第?個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類型值,表示數組元素的個數。后?即為各數組元素的封裝,數組元素為元素名稱和值組成的對。常?的數組元素如下表所示。
3. Audio Tag Data結構(?頻類型)
?頻Tag Data區域開始的: 第?個字節包含了?頻數據的參數信息, 第?個字節開始為?頻流數據。 (這兩個字節屬于tag的data部分,不是header部分) 第?個字節為?頻的信息(仔細看spec發現對于AAC??,?較有?的字段是SoundFormat),格式如下: 第?個字節開始為?頻數據(需要判斷該數據是真正的?頻數據,還是?頻config信息) 如果是AAC數據,如果他是AAC RAW, tag data[3] 開始才是真正的AAC frame data。
4. Video Tag Data結構(視頻類型)
視頻Tag Data開始的: 第?個字節包含視頻數據的參數信息。 第?個字節開始為視頻流數據。 第?個字節包含視頻信息,格式如下: 第?個字節開始為視頻數據 CompositionTime 單位毫秒 CompositionTime 每個視頻tag(整個tag)的第14~16字節(如果是tag data偏移[3]~[5],[0],[1][2:AVCPackettype] )(表示PTS相對于DTS的偏移值 )。 CompositionTime 單位為ms : 顯示時間 = 解碼時間(tag的第5~8字節,位置索引[4]~[7])+ CompositionTime
總結
以上是生活随笔 為你收集整理的FLV格式分析 的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔 網站內容還不錯,歡迎將生活随笔 推薦給好友。