FLV数据格式
视频帧:0x09
音频帧:0x08
script帧:0x12
FLV(Flash Video)是Adobe公司设计开发的一种流行的流媒体格式,由于其视频文件体积轻巧、封装简单等特点,使其很适合在互联网上进行应用。此外,FLV可以使用Flash Player进行播放,而Flash Player插件已经安装在全世界绝大部分浏览器上,这使得通过网页播放FLV视频十分容易。目前主流的视频网站无一例外地使用了FLV格式。FLV封装格式的文件后缀通常为“.flv”。
一、FLV结构
FLV包括文件头(File Header)和文件体(File Body)两部分,其中文件体由一系列的Tag组成。
其中,每个Tag前面还包含了Previous Tag Size字段,表示前面一个Tag的大小。
Tag的类型可以是视频、音频和Script,每个Tag只能包含以上三种类型的数据中的一种。
下面详细介绍一下三种Tag的Tag Data部分的结构(不同类型tag,tag data不同)。
1.1 Audio Tag Data结构(音频Tag)
音频Tag开始的第1个字节包含了音频数据的参数信息,从第2个字节开始为音频流数据。
第1个字节的前4位的数值表示了音频编码类型。
如果SoundFormat=10,那么音频数据就是AACAUDIODATA。
1.2 Video Tag Data结构(视频Tag)
视频Tag也用开始的第1个字节包含视频数据的参数信息,从第2个字节为视频流数据。
对于H.264数据来说,CodecID = 7,视频数据就是AVCVIDEOPACKET格式。
- 如果 AVCPacketType = 0,那么Data就是AVCDecoderConfigurationRecord格式。
- 如果 AVCPacketType = 1,那么Data结构就简单了。
Nalu len(UI32) | Nalu Data(UI8[n]) | Nalu len(UI32) | Nalu Data(UI8[n]) | ......
- CompostionTime = (pts - dts)/90,单位ms,Flv Tag Header有个TimeStamp,单位ms(dts=TimeStamp *90 ,单位1/90*1000秒)。
示例: