這幾天在研究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 部分主要是參考的上面第二個連結
轉一張圖過來,相信一看就懂。