FLV格式详解

分类: beat365在线下载 作者: admin 时间: 2025-09-13 09:26:03 阅读: 6721
FLV格式详解

本文是什么

FLV (Flash Video) 是由Adobe公司开发的一种非常流行的视频格式,其简单的内容组成非常适合用于流媒体传输。虽然现如今这种格式已经开始被弃用,但因为各种原因,一部分企业仍然继续使用这种格式来进行流媒体传输。学习FLV格式也有利于学习同样是由Adobe公司开发的实时传输协议RTMP (Real-Time Messaging Protocol)。因此本文将会介绍FLV文件是如何组织音视频信息的。

正文

FLV文件由FLV文件头以及多个Tag组成,其中的各种信息是以大端的方式进行存储。简单来说FLV文件=FLV文件头+FLV文件体(Tag0+Tag1+...+TagN)。

FLV文件头

FLV的文件头固定为9个字节大小。

第0-2个字节是文件签名,值为FLV。

第3个字节为文件的版本,目前只有1。

第4个字节就被分为了4个部分,其中第0-4位作为保留值,值为0;第5位表示是否有音频Tag,0为没有,1为有。第6位也被用作保留值;第7位表示是否具有视频Tag,同样是0为没有,1为有。

第5-8个字节表示数据偏移,其实就是FLV文件头的大小,值固定为9。

FLV文件体

FLV文件体有许多个Tag拼接而成。从这种结构来看,FLV文件确实非常适合用于流媒体中,每个Tag之间都相对独立,易于切分。每个Tag由4字节大小的前一个Tag大小和当前Tag主体组成,也就是Tag=前一个Tag大小+当前Tag主体。

每个Tag由多个固定的字段组成。

第0个字节表示这个Tag的类型,8为音频,9为视频,18为文本数据,其他值进行了保留。

第1-3个字节表示数据部分的大小。

第4-6个字节表示时间戳。

第7个字节为扩展时间戳,与时间戳共同使用就可以表示32位的时间,其中扩展时间戳表示高位,时间戳表示低位。

第8-10个字节为流ID,这个值一直为0。

后面的字节都是数据,是什么类型的数据由前面的Tag类型指示,长度由前面的数据大小指示。数据部分也有固定的字段对这个数据进行更近一步的说明。

音频数据

第0-3位表示了音频的格式,值见下表。

类型

0

线性PCM,大小端与平台相关

1

ADPCM

2

MP3

3

线性PCM,小端

4

Nellymoser 16KHz 单声道

5

Nellymoser 8KHz 单声道

6

NellyMoser

7

G.711 A-law 对数PCM

8

G.711 mu-law 对数PCM

9

保留

10

AAC

11

Speex

14

MP3 8KHz

15

设备相关类型

第4-5位表示声音的采样率,值见下表

采样率

0

5.5KHz

1

11KHz

2

22KHz

3

44KHz

第6位表示每次采样的大小,或者叫做位深。0为8bit,1为16bit。

第7位为声音通道数。0为单通道,1为双通道。

如果声音的格式为AAC,则还会多占用1个字节来表示这个音频数据是AAC序列头还是AAC原始数据。剩余的部分就都是音频的数据了。

视频数据

第0-3位表示帧的类型,值见下表。

帧类型

1

关键帧,I帧 H264

2

P帧或B帧 H264

3

H263

4

生成关键帧,服务器使用

5

视频信息,命令帧

第4-7位为编码器ID,值见下表。

帧类型

1

JPEG,未使用

2

Sorenson H263

3

Screen Video

4

On2 VP6

5

带Alpha通道的On2 VP6

6

Screen Video 2

5

H264

同样,如果编码器类型为H264,则同样会占用4个字节。

第0个字节表示H264包的类型。0为H264序列头,1为NALU,2为H264序列结尾。

第1-3个字节表示为一个时间差值,是一个有符号数,如果视频中有B帧,这个值表示B帧PTS和DTS之间的差值。剩余的部分就是视频数据了。

文本数据

第0个字节表示数据的类型,为AMF格式。剩余的数据则根据AMF格式进行解析。

结尾

以上就是FLV文件的组成,可以看出其格式相对还是比较简单的,这也是为什么FLV比较适合作为流媒体格式的原因。FLV文件=FLV文件头+FLV文件体。FLV文件头对文件进行了十分简单的描述。FLV文件体又由多个Tag组成,Tag中又有固定字段对Tag的属性进行描述,而在Tag的数据中又根据Tag类型有更加详细的数据描述。了解FLV文件的组成不仅方便我们操作FLV文件,也利于对RTMP协议的了解。

相关推荐