學習和分析FLV封裝格式


這幾天在研究FLV 的封裝格式。

參考了網上的文章

http://blog.csdn.net/leixiaohua1020/article/details/17934487?locationNum=3

http://www.aichengxu.com/view/2430313

FLV 是應用很多的一種格式。

下面是針對具體的文件來分析 。

 

1)  首先FlvHeader 是9個字節,前三個是FLV,版本是01,後面的05(0000 0101),第6位和8位爲1,表示有音頻也有視頻。 後面的4個字節是9.

2)  緊跟着的4個字節是PreviousTag Size 是0,因爲前面沒有Tag

3)  後面緊跟着11個字節的TagHeader, 從12 開始到0x02之前 ,Type爲12表示script,dataSize 爲 00 01 69, 後面的時間戳爲0,後面的擴展時間戳也是0,然後後面的StreamID(3位)也是0

4)  往後看是TagData 第一個字節02表示是第一個AMF包,表示字符串; 後面固定的是0x000A(“onMetaData”的長度,爲10)。

5)  再往後是第二個AMF包,0x08,表示數組,後面2-5字節是 00 00 0010(十進制爲16),表示有16個數組元素。

6)  再往後有兩個字節00 08(應該表示的是元素key值的長度,08表示“duration”一個8個字節,後面依次類推),然後是key值字符串,然後是9個字節的數據(奇怪!)。

7)  因爲上面TagHeader中有dataSize,所以可以往下數00 0169 個字節,後面是第二個Tag



其中上面是第二個Tag

1)   00 01 74 正好是 比00 01 69 大11,正好是TagHeader的大小

2)   後面跟着那個11個TagHeader, 09表示視頻, 00 002D(45)是這個Tag的Datasize。後面的timestamp, timestamp_ex,streamed 均爲0

3)  緊接着是17,TagData的第一個字節(0001 0111)表示keyFrame,AVC

4)  從17開始往下數45個字節 00 00 0038(56,正好是45+11),

5)  下面的0x08表示音頻,後面的DataSize爲09,後面的timestamp, timestamp_ex, streamed 也均爲0.

6)  在往後是AF(1010  1111)  前4位1010表示AAC, 採樣率3表示44kHz採樣精度1表示16位,音頻類型爲sndStereo

至此,分析完了 FlvHeader, TagHeader, TagData 的第一個字節,其中也分析了音頻視頻以及Script。

=================================

其中分析MetaData 部分主要是參考的上面第二個鏈接

轉一張圖過來,相信一看就懂。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章