核心定义:
FLV(Flash Video)是一种基于 Tag 的流媒体封装格式,由 FLV Header + PreviousTagSize + Tag Chain 组成。
每个 Tag 独立承载 Audio / Video / Script 数据。
FLV(Flash Video)是一种基于 Tag 的流媒体封装格式,由 FLV Header + PreviousTagSize + Tag Chain 组成。
每个 Tag 独立承载 Audio / Video / Script 数据。
📦 1. FLV Header(文件头,9 bytes)
| 字段 | 大小 | 类型 | 说明 |
|---|---|---|---|
| Signature | 3 bytes | char[3] | 固定 “FLV” |
| Version | 1 byte | uint8 | 通常为 0x01 |
| Flags | 1 byte | bitfield | 0x04(video) / 0x01(audio) |
| DataOffset | 4 bytes | uint32 | Header长度(通常9) |
🔗 2. PreviousTagSize(4 bytes)
| 字段 | 大小 | 说明 |
|---|---|---|
| PreviousTagSize | 4 bytes | 前一个Tag的总长度(TagHeader + TagData) |
👉 用于流式解析回溯,不依赖索引
🎞 3. FLV Tag结构(核心)
结构: Tag = TagHeader + TagData
| 字段 | 大小 | 类型 | 说明 |
|---|---|---|---|
| TagType | 1 byte | uint8 | 8=audio / 9=video / 18=script |
| DataSize | 3 bytes | uint24 | Tag Data长度 |
| Timestamp | 4 bytes | uint32 | 低24位 + Extended 8bit |
| StreamID | 3 bytes | uint24 | 固定0 |
🎧 4. Audio Tag(音频数据结构)
⚠️ 当FLV数据中音频的类型是AAC时,前2个字节构成Audio Tag Header。
| 字段 | 位宽 | 说明 |
|---|---|---|
| SoundFormat | 4 bit | AAC / MP3 / PCM |
| SoundRate | 2 bit | 5.5k / 11k / 22k / 44k |
| SoundSize | 1 bit | 8bit / 16bit |
| SoundType | 1 bit | mono / stereo |
AAC 特殊:需要 AudioSpecificConfig(ASC)
The AudioSpecificConfig is explained in ISO 14496-3. AAC sequence header存放的是
AudioSpecificConfig结构,该结构则在“ISO-14496-3 Audio”中描述。
如果是AAC数据,如果他是AAC RAW, tag data[3] 开始才是真正的AAC frame data。
The AudioSpecificConfig is explained in ISO 14496-3. AAC sequence header存放的是
AudioSpecificConfig结构,该结构则在“ISO-14496-3 Audio”中描述。
如果是AAC数据,如果他是AAC RAW, tag data[3] 开始才是真正的AAC frame data。
🎥 5. Video Tag(视频数据结构)
| 字段 | 位宽 | 说明 |
|---|---|---|
| FrameType | 4 bit | keyframe / interframe |
| CodecID | 4 bit | H264 / H265 / VP6 |
| AVCPacketType | 8 bit | 0=seq / 1=NALU / 2=end |
| CompositionTime | 24 bit | B帧时间偏移 |
1. CompositionTime 单位ms
CompositionTime 每个视频Tag (整个tag) 的第14-16个字节(如果Tag data偏移[3]~[5],[0],[1][2:AVCPackettype] (表示PTS相对于DTS的偏移值)。CompositionTime: 显示时间 = 解码时间(tag的第5~8字节,位置索引[4]~[7])+ CompositionTime
2. AVCDecoderConfigurationRecord
AVC sequence header就是AVCDecoderConfigurationRecord结构,该结构在标准⽂档“ISO-14496-15 AVC file format”
📜 6. Script Tag(元数据)
该Tag又成为MetaData Tag,存放一些关于FLV视频和音频的元信息,通常该Tag作为第一个Tag,并且只有一个,跟在FLV header后面。
- key: onMetaData
- duration
- width / height
- framerate
- audiosamplerate
👉 用于播放器初始化(非常关键)
