FLV = FLV Header + FLV Body
1. FLV Header
FLV Header: 头三个字节为‘F‘ ’L’ ‘V’ 三个字节、版本、类型、偏移
2. FLV Body
FLV Body:包括pre tagsize 和 tag
2.1 pre tagsize
pre tagsize代表了前一个tag的大小,tag代表当前的数据
2.2 Tag Header
2.3 Tag Body
2.3.1 Script Tag Data
Script data: MetaData Tag,存储的是描述视频或⾳频的信息的数据,如宽度、⾼度、时间等等通,常该类型Tag会作为FLV⽂件的第⼀个tag,并且只有⼀个,跟在File Header后。
- 第⼀个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类型值,表示数组元素的个数。后⾯即为各数组元素的封装,数组元素为元素名称和值组成的对。常⻅的数组元素如下表所示。
注:Lavf54.63.104即是 Libavformat version 54.63.104. 即是ffmpeg对于库的版本
2.3.2 Audio Tag Data
- 第一个Byte代表包含了⾳频数据的参数信息,实际上除了音频格式之外,其他的参数信息仅供参考,意义不大。
- 第二个Byte代表了音频数据包的类型,0代表配置信息,1代表音频流数据。配置信息具体含义参考ISO-14496-3(2009-09)标准。
2.3.2 Video Tag Data
Video Tag Data 和 Audio Tag Data格式是相同的,区别在于其数据的含义不同
- 第1个Byte代表的含义,针类型和编码Id各占4bit
- 第2个Byte代表的含义
CompositionTime:表示PTS相对于DTS的事件偏移量,单位毫秒
即PTS = DTS + CompositionTime,位于整个tag的第14~16Byte。
AVCDecoderConfigurationRecord:详细含义见ISOIEC 14496-15 Advanced Video Coding (AVC) 中有详细说明。