FLV格式解析
2021-02-19 本文已影响0人
水木年华1987
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 | Tag Data |
|---|
|----------------------------------------------------------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,包括视频时长、分辨率、视频帧率、码率、音频采样大小等等信息。
image.png
- flv的音频tag。
image.png