这几天在研究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 部分主要是参考的上面第二个链接
转一张图过来,相信一看就懂。