学习和分析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 部分主要是参考的上面第二个链接

转一张图过来,相信一看就懂。



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