1

FLV文件以大端对齐方式存放多字节整型,格式比较简单,分为Header和Body两部分。

类型 长度(byte) 说明
Header 9 固定长度
Body n 可变

Header格式

Hearder的内容长度是固定的,格式如下:

字段 长度(bit) 说明
F 8 0x46
L 8 0x4C
V 8 0x56
Version 8 一般为0x01
TypeFlagsReserved 5 保留位,均为0
TypeFlagsAudio 1 否包括音频数据,1是有,0是没有
TypeFlagsReserved 1 保留位
TypeFlagsVideo 1 是否包括视频数据,1是有,0是没有
DataOffset 32 Header的长度,为固定值0x00000009

Body格式

FLV Body的内容为多个Tag和Tag的长度组成,即:

PreviousTagSize0 4
Tag1 n
PreviousTagSize1 4
Tag2 n
... ...
PreviousTagSizeN-1 4
TagN n
previousTagSizeN 4

Tag为一个内容,目前包括音频、视频、脚本,previousTagSize为前一个Tag的长度,PreviousTagSize0为0x00000000。

Tag格式

Tag是FLV Body的内容,同样是由Tag Header和Tag Data组成。即FLV Tag Format如下所示:

字段 长度(byte) 说明
TagType 1 音频为0x08;视频为0x09;脚本数据为0x12
DataSize 3 Data的长度
Timestamp 3 相对第一个Tag的时间戳,因此第一个Tag的时间戳为0。也可以将所有Tag的时间戳全配置为0,解码器会自动处理。
TimestampExtended 1
StreamID 3 默认的全为0
Data DataSize TagType=0x08,为AudioData;TagType=0x09,为VideoData;TagType=0x12,为ScriptDataObject,但该项因为内容不固定,所以在FLV文件中可以没有该Tag内容。

VideoData格式

VideoData的内容,同样包括VideoData Header和VideoData Body。即VideoData Format:

字段 长度(bit) 说明
FrameType 4 1为关键帧,2为非关键帧,3为h263的非关键帧,4为服务器生成关键帧,5为视频信息或命令帧。
CodecID 4 1为JPEG,2为H263,3为Screen video,4为On2 VP6,5为On2 VP6,6为Screen videoversion 2,7为AVC。
VideoData n 如果CodecID=2,为H263VideoPacket;如果CodecID=3,为ScreenVideopacket;如果CodecID=4,为VP6FLVVideoPacket;如果CodecID=5,为VP6FLVAlphaVideoPacket;如果CodecID=6,为ScreenV2VideoPacket;如果CodecID=7,为AVCVideoPacket;

AVCVideoPacket格式

AVCVideoPacket同样包括Packet Header和Packet Body两部分,即AVCVideoPacket Format:

字段 长度(byte) 说明
AVCPacketType 1 AVCPacketType=0x00,为AVCSequence Header;AVCPacketType=0x01,为AVC NALU;AVCPacketType=0x02,为AVC end ofsequence
CompostionTime 3 相对时间戳,如果AVCPacketType=0x01,为相对时间戳,其它均为0
Data n 负载数据,如果AVCPacketType=0x00,为AVCDecorderConfigurationRecord;如果AVCPacketType=0x01,为NALUs;如果AVCPacketType=0x02,为空。

AVCDecorderConfigurationRecord格式

AVCDecorderConfigurationRecord包括文件的信息,具体格式如下:

字段 长度(bit)
cfgVersion 8
avcProfile 8
profileCompatibility 8
avcLevel 8
reserved 6
lengthSizeMinusOne 2
reserved 3
numOfSPS 5
spsLength 16
sps n
numOfPPS 8
ppsLength 16
pps n

参考文章

FLV文件(H264 + AAC)格式超详细分析
使用librtmp进行H264与AAC直播
FLV视频封装格式详解


txgcwm
764 声望71 粉丝

Linux C/C++