FLV封装格式
FLV(Flash Video)是Adobe公司设计开发的一种流行的流媒体格式,由于其视频文件体积轻巧、封装简单等特点,使其很适合在互联网上进行应用。此外,FLV可以使用Flash Player进行播放,而Flash Player插件已经安装在全世界绝大部分浏览器上,这使得通过网页播放FLV视频十分容易。目前主流的视频网站如优酷网,土豆网,乐视网等网站无一例外地使用了FLV格式。FLV封装格式的文件后缀通常为“.flv”。
Flash Video是一种流行的网络视频封装格式(flv,f4v),其封装的视频文件中常见的视频编码格式是vp6、H.264、avc,常见的音频编码格式是aac和mp3等;此封装格式的特点是视频质量良好、体积小、在线播放且非常普及。
FLV文件的结构:
结构如图所示: 文件头 + 文件体
每个Tag前面包含一个previous tag size字段,表示前面一个Tag的大小。Tag的类型可以是视频、音频或者Script(此Tag通常放在Header之后最为第一个Tag且只有一个),每个Tag只能包含以上三种类型数据中的一种,下面是flv文件的详细结构:
FLV Header 9个字节:
结构为: signature (3bytes 0x46, 0x4c, 0x66) + Version(1byte 0x1) + Flags(1Byte 00000)+ Headersize(4Bytes 表示头信息的大小,目前为9,和版本号有关系,与Version相关联)
FLV Body:
结构为:
Previous Tag Size (4Byte,表示前一个tag的长度) + Tag
Tag的结构为:
Tag Header + Tag Data()
Tag Header的结构为:
Type(1Byte)表示Tag类型,包括音频(0x08)、视频(0x9)、script (0x12),其他类型被保留
Datasize(3Byte)表示tag data的数据大小
Timpstamp(3Byte) 表示Tag的时间戳
Timestamp_ex(1Byte)时间戳扩展
StreamID(1Byte)
Header 11个字节
Tag类型:
1. Audio Tag解析
Audio Tag Header:的大小是11个字节;
Audio Tag Data:开始的第1个字节包含了音频数据的参数信息,从第2个字节开始为音频流数据;第一个字节的前四位的数值表示音频数据格式,第5、6的数值表示采用率(0=5.5KHz,1=11KHz,2=22KHz),第7位表示采样精度(0=8bits,1=16bits);第8位表示音频类型(0=mono,1=stereo);
2. Video Tag解析
Video Tag Header:的大小是11个字节;
Video Tag Data:开始的第1个字节包含了视频数据的参数信息,从第2个字节开始为视频流数据;第一个字节的前4位的数值表示帧类型,后4位的数值表示视频编码ID:1=JPEG,2=H.263,7=AVC等;
3. MetaData Tag解析
该类型Tag又通常被称为Script Tag,会放一些关于FLV视频和音频的参数信息,如duratuin、width、height等,该类型Tag会跟在File Header后面作为第一个Tag出现,且只有一个。
Script Tag Header:大小占用11个字节;
Script Tag Data:该Tag Data结构包含两个AMF包:
Script Tag Header:大小占用11个字节;
Script Tag Data:该Tag Data结构包含两个AMF包:
第一个AMF包:第一个字节是AMF包类型,0x02表示字符串,第2、3个字节是UI16类型值,表识字符串长度,一般总是0x000A(10,也就是”onMetaData“的长度),后面字节为具体的字符串,一般是”onMetaData“(6F 6E 4D 65 74 61 44 61 74 61);
第二个AMF包:第1个字节表示AMF包类型,一般总是0x08,表示数组,第2-5个字节为UI32类型值,表示数组元素的个数,后面即为个数组元素的封装,数组元素为元素名称和值组成的对--第1-2个字节表示元素名称的长度,假设为L,后面跟着为长度为L的字符串,第L+3个字节表示元素值的类型,后面跟着为对应值,占用字节数取决于值的类型。
常见的MetaData值和含义:duration(时长)、width(视频宽度)、height(视频高度)、videodatarate(视频码率)、framerate(视频帧率)、videocodecid(视频编码方式)、audiosamplerate(视频采样率)、audiosamplesize(视频采样精度)、stereo(是否为立体声)、audiocodecid(音频编码方式)、filesize(文件大小)。