1.FLV文件格式如下,由flv头和一系列tag组成,tag又分为script tag、音频tag、视频tag。 PreviousTagSize表示上一个tag的大小,占位4Byte。
FLV Header |
PreviousTagSize0 |
Tag1 |
PreviousTagSize1 |
Tag2 |
... |
- FLV Header由9个字节组成,说明如下
字段名称 |
字段大小 |
字段说明 |
Signature |
1Byte |
Signature byte always 'F' (0x46) |
Signature |
1Byte |
Signature byte always 'L' (0x4C) |
Signature |
1Byte |
Signature byte always 'V' (0x56) |
Version |
1Byte |
flv版本号 (一般为0x01表示版本1) |
TyepFlagsReserved |
5bit |
保留位 |
TypeFlagsAudio |
1bit |
音频标志位(1:存在音频,0:不存在音频) |
TypeFlagsReserved |
1bit |
保留位 |
TypeFlagsVideo |
1bit |
视频标志位(1:存在视频,0:不存在视频) |
DataOffset |
4Byte |
FLV header 长度(版本1为9) |
- tag是由Tag Header和Tag Data组成,不同类型的Tag其TagHeader部分总是相同,共11个字节。我们可以根据TagType知道后续的tag是音频还是视频,根据TimeStamp来进行视音频同步。
|---------------------------------------------------------------Tag ------------------------------------------------|
|----------------------------------------------------------Tag Header---------------------------------------------|
TagType |
DataSize |
TimeStamp |
TimeStampExt |
StreamId |
1Byte |
3Byte |
3Byte |
1Byte |
3Byte |
1-2bit位:必须为0,保留位;第3bit位: 0表示未加密,1表示加密,一般默认0;4-8bit位:8:音频、9:视频、18:script数据; |
Tag Data的长度,不包括11字节的Tag Header |
时间戳,毫秒为单位,则意味着要将时间戳单位关系换算好;第一个tag时,该值总是0 |
扩展时间戳(当时间戳不够时,当做高8位,很少用) |
流id,总是0 |
-
flv文件第一个tag一般是script tag,script tag Header如下图所示。scriptTag数据主要是文件的元数据信息Metdata,包括视频时长、分辨率、视频帧率、码率、音频采样大小等等信息。
- flv的音频tag。