1.FLV文件总体结构
FLV文件由FLV header和FLV body组成,FLV body由一系列的FLV tags组成,以下图所示
tag又能够分红三类:audio,video,script,分别表明音频流,视频流,脚本流,而每一个tag又由tag header和tag data组成。每一个Tag前面还包含了Previous Tag Size字段,表示前面一个Tag的大小。整个FLV文件的详细的组成以下图所示数组

2.Audio Tag Data结构
音频tag开始的第1个字节包含了音频数据的参数信息,从第2个字节开始为音频流数据。结构以下图所示
音频tag的第一个字节的前4位表明音频编码类型,各个取值的含义以下ide

第5-6位表明音频采样率,各取值的含义以下:编码

第7位表明音频采样精度,各取值的含义以下
第8位表明音频的声道数,各取值含义以下:
从第2个字节开始就为音频数据
若是音频数据编码格式为AAC
3.Video Tag Data结构
视频Tag也用开始的第1个字节包含视频数据的参数信息,从第2个字节为视频流数据。结构以下图所示
第1个字节的前4位表示帧类型,各个取值的含义以下:.net

后4位表示视频编码类型,各个取值的含义以下:3d

从第二个字节开始就是视频数据orm

若是视频为AVC视频

4.Script Tag Data结构(控制帧)
该类型Tag又一般被称为Metadata Tag,会放一些关于FLV视频和音频的元数据信息如:duration、width、height等。一般该类型Tag会跟在File Header后面做为第一个Tag出现,并且只有一个。结构以下图所示
第一个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类型值,表示数组元素的个数。后面即为各数组元素的封装,数组元素为元素名称和值组成的对。常见的数组元素以下:
参考资料:
flv_video_file_format_specification _v10.pdf