2024年3月15日发(作者:)

FLV文件格式

本文部分摘自: /s/blog_

参考了Adobe 官方的

不但包括 FLV 格式说明, 还包括 F4V 格式说明.

FLV是流媒体封装格式,可将其数据看为二进制字节流,其字节编码格式为

BigEndianUnicode 。总体上看,FLV包括文件头(File Header)和文件体(File Body)

两部分,其中文件体由一系列的Tag及Tag Size对组成。因此一个FLV文件看上

去是下面的结构:

其中,Previous Tag Size紧跟在每个Tag之后,占4个字节表示一个UI32类型的

数值,表示前面一个Tag的大小。需要注意的是,Previous Tag Size #0的值总是

为0。Tag类型包括视频、音频和Script,且每个Tag只能包含一种类型的数据。

下面我们看看File Header和Tag的具体结构,为了方便大家理解,我贴一个实

际FLV文件的字节流图片,图片中把不同部分区分了颜色。

一、File Header结构

File Header的长度和结构是固定的,在当前版本中总是由9个字节组成,如图

中蓝色区域所示。

第1-3字节为文件标识(Signature),总为“FLV”(0x46 0x4C 0x56),如图中

紫色区域。

第4字节为版本,目前为1(0x01)。

第5个字节的前5位保留,必须为0。

第5个字节的第6位表示是否存在音频Tag。

第5个字节的第7位保留,必须为0。

第5个字节的第8位表示是否存在视频Tag。

第6-9个字节为UI32类型的值,表示从File Header开始到File Body开始的字

节数,版本1中总为9。

二、Previous Tag Size结构

如图中红色位置所示。

三、Tag结构

Tag包括Tag Header和Tag Data两部分。不同类型的Tag的Header结构是相

同的,但是Data结构各不相同。如图中绿色和黄色区域分别表示Tag Header数

据和Tag Data数据。

当前版本的Tag Header结构占用11个字节。

第1个字节表示Tag类型,包括音频(0x08)、视频(0x09)和script data(0x12),