标准定义

video_file_format_spec_v10_1.pdf

FLV基本结构

[FLV文件头] -> [前一个TAG长度] -> [TAG Header] -> [TAG Data]

H264 FLV封装基本结构

[FLV文件头] -> [前一个TAG长度] -> [TAG Header] -> [AVC Sequence Header] -> [前一个TAG长度] ->[TAG Header] -> [TAG Data]

FLV文件头

文件头固定为 9 字节,用于标识文件类型、版本和包含的流类型。

字段长度 (字节)含义与说明
Signature3文件签名,固定为 ASCII 码 'F', 'L', 'V' (0x46 0x4C 0x56)。
Version1FLV 版本号,通常为 0x01,表示版本 1。
TypeFlags1类型标志位,用于标识文件中是否包含音频或视频流。
• Bit 2: 1 表示有音频,0 表示无音频。
• Bit 0: 1 表示有视频,0 表示无视频。
DataOffset4数据偏移量,表示 FLV Header 的总长度,固定为 9

TAG Header

Tag 是 FLV 文件体的核心,用于承载实际的音视频数据或元数据。每个 Tag 都由一个 11 字节的 Tag Header 和变长的 Tag Data 组成。

字段长度 (字节)含义与说明
TagType1标签类型,定义了 Tag Data 的内容。
8: 音频数据 (Audio)
9: 视频数据 (Video)
18: 脚本数据 (Script)
DataSize3Tag Data 的长度,不包含这 11 字节的 Header。
Timestamp3时间戳的低 24 位,单位为毫秒 (ms)。
TimestampExtended1时间戳的高 8 位,与前面的 3 字节共同组成一个 32 位的时间戳。
StreamID3流 ID,固定为 0

AVC Sequence Header

字段名称长度 (字节)值/示例 (十六进制)说明
AVCPacketType100固定值。0 表示这是 AVC Sequence Header。
CompositionTime300 00 00固定值。对于 Sequence Header,此值必须为 0。
ConfigurationVersion101版本号,固定为 1。
AVCProfileIndication164 / 4D / 58配置文件指示,通常直接复制 SPS 的第 2 个字节(如 64 代表 High Profile)。
ProfileCompatibility100配置文件兼容性,通常直接复制 SPS 的第 3 个字节。
AVCLevelIndication128 / 1F / 32级别指示,通常直接复制 SPS 的第 4 个字节(如 28 代表 Level 4.0)。
LengthSizeMinusOne1FF非常重要。高 6 位保留为 1,低 2 位表示 NALU 长度字段的大小减 1。
0xFF 表示 NALU 长度用 4 字节表示。
NumOfSPS101SPS 的个数,通常为 1(低 5 位有效,高 3 位保留为 1)。
SPS Length200 1ESPS 数据的长度(大端)。例如 0x001E 表示后面有 30 字节。
SPS Data变长67 64 ...SPS 的原始数据(不含 NALU 起始码)。长度由上一字段决定。
NumOfPPS101PPS 的个数,通常为 1。
PPS Length200 05PPS 数据的长度(大端)。例如 0x0005 表示后面有 5 字节。
PPS Data变长68 EB ...PPS 的原始数据(不含 NALU 起始码)。长度由上一字段决定。