您的位置:首页 > 其它

FLV文件格式解析

2016-06-27 17:48 316 查看
最近要用到flv,整理了一些flv格式的资料,供参考。 flv文件主要由两部分组成:header和body。


1.header

header部分记录了flv的类型、版本等信息,是flv的开头,一般都差不多,占9bytes。具体格式如下:
文件类型3 bytes“FLV”
版本1 byte一般为0x01
流信息1 byte倒数第一位是1表示有视频,倒数第三位是1表示有音频,倒数第二、四位必须为0
header长度4 bytes整个header的长度,一般为9;大于9表示下面还有扩展信息
FLV的header长度为9byte

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

| F(8) | L(8) | V(8) | Version(8) | TypeFlagsReserved(5) | TypeFlagsAudio(1)| TypeFlagsReserved(1) | TypeFlagsVideo(1) | DataOffset(32) |

前三个字节为FLV,十六进制表示为 0x46 0x4C 0x56。

Version为FLV的版本号,一般为0x01。

TypeFlagsReserved为保留位,均为0

TypeFlagsAudio为FLV文件中是否包括音频数据,1是有,0是没有。

TypeFlagsVideo为FLV文件中是否包括视频数据,1是有,0是没有。

DataOffset为FLV Header的长度,为固定值0x00000009。

举个栗子:

一个只包含音频的FLV的Header的16进制表示为:0x46 0x4C 0x56 0x01 0x04 0x00 0x00 0x00 0x09

一个只包含视频的FLV的Header的16进制表示为:0x46 0x4C 0x56 0x01 0x01 0x00 0x00 0x00 0x09

一个包含音视频的FLV的Header的16进制表示为:0x46 0x4C 0x56 0x01 0x05 0x00 0x00
0x00 0x09


2.body

body部分由一个个Tag组成,每个Tag的下面有一块4bytes的空间,用来记录这个tag的长度,这个后置用于逆向读取处理,他们的关系如下图:



即:

| PreviousTagSize0(32) | Tag1(PreviousTagSize1) |PreviousTagSize1(32) | Tag2 | ……| PreviousTagSizeN-1(32) | TagN(previousTagSizeN)| previousTagSizeN(32) |

PreviousTagSize0为0x00000000。

Tag为每一个内容,目前包括音频、视频、脚本。

previousTagSize为前一个Tag的长度。


2.1.Tag

每个Tag由也是由两部分组成的:Tag Header和Tag Data。Tag Header里存放的是当前Tag的类型、数据区(Tag Data)长度等信息,具体如下:
名称长度介绍
Tag类型1 bytes8:音频

9:视频

18:脚本

其他:保留
数据区长度3 bytes在数据区的长度
时间戳3 bytes整数,单位是毫秒。对于脚本型的tag总是0
时间戳扩展1 bytes将时间戳扩展为4bytes,代表高8位。很少用到
StreamsID3 bytes总是0
数据区(data)由数据区长度决定数据实体
FLV Tag Format :

| TagType(8) | DataSize(24) | Timestamp(24) |TimestampExtended(8) | StreamID(24) | Data(DataSize) |


2.2.Tag Data

数据区根据Tag类型的不同可分为三种,音频数据、视频数据和脚本数据。


2.2.1.音频数据

第一个byte是音频的信息,格式如下。
名称长度介绍
音频格式4 bits0 = Linear PCM, platform endian

1 = ADPCM

2 = MP3

3 = Linear PCM, little endian

4 = Nellymoser 16-kHz mono

5 = Nellymoser 8-kHz mono

6 = Nellymoser

7 = G.711 A-law logarithmic PCM

8 = G.711 mu-law logarithmic PCM

9 = reserved

10 = AAC

11 = Speex

14 = MP3 8-Khz

15 = Device-specific sound
采样率2 bits0 = 5.5-kHz

1 = 11-kHz

2 = 22-kHz

3 = 44-kHz

对于AAC总是3
采样的长度1 bit0 = snd8Bit

1 = snd16Bit

压缩过的音频都是16bit
音频类型1 bit0 = sndMono

1 = sndStereo

对于AAC总是1
第2byte开始就是音频流数据了。


2.2.2.视频数据

和音频数据一样,第一个byte是视频信息,格式如下:
名称长度介绍
帧类型4 bits1: keyframe (for AVC, a seekable frame)

2: inter frame (for AVC, a non-seekable frame)

3: disposable inter frame (H.263 only)

4: generated keyframe (reserved for server use only)

5: video info/command frame
编码ID4 bits1: JPEG (currently unused)

2: Sorenson H.263

3: Screen video

4: On2 VP6

5: On2 VP6 with alpha channel

6: Screen video version 2

7: AVC
最后附上flv官方手册:video_file_format_spec_v10
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  flv格式