FLV文件格式解析

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

类型长度(byte)说明
Header9固定长度
Bodyn可变

Header格式

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

字段长度(bit)说明
F80x46
L80x4C
V80x56
Version8一般为0x01
TypeFlagsReserved5保留位,均为0
TypeFlagsAudio1否包括音频数据,1是有,0是没有
TypeFlagsReserved1保留位
TypeFlagsVideo1是否包括视频数据,1是有,0是没有
DataOffset32Header的长度,为固定值0x00000009

Body格式

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

PreviousTagSize04
Tag1n
PreviousTagSize14
Tag2n
......
PreviousTagSizeN-14
TagNn
previousTagSizeN4

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

Tag格式

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

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

VideoData格式

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

字段长度(bit)说明
FrameType41为关键帧,2为非关键帧,3为h263的非关键帧,4为服务器生成关键帧,5为视频信息或命令帧。
CodecID41为JPEG,2为H263,3为Screen video,4为On2 VP6,5为On2 VP6,6为Screen videoversion 2,7为AVC。
VideoDatan如果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)说明
AVCPacketType1AVCPacketType=0x00,为AVCSequence Header;AVCPacketType=0x01,为AVC NALU;AVCPacketType=0x02,为AVC end ofsequence
CompostionTime3相对时间戳,如果AVCPacketType=0x01,为相对时间戳,其它均为0
Datan负载数据,如果AVCPacketType=0x00,为AVCDecorderConfigurationRecord;如果AVCPacketType=0x01,为NALUs;如果AVCPacketType=0x02,为空。

AVCDecorderConfigurationRecord格式

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

字段长度(bit)
cfgVersion8
avcProfile8
profileCompatibility8
avcLevel8
reserved6
lengthSizeMinusOne2
reserved3
numOfSPS5
spsLength16
spsn
numOfPPS8
ppsLength16
ppsn

参考文章

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值