FLV格式

本文详细介绍了FLV格式的结构,包括FLVHeader、Tag及其组成。FLV文件只包含一种码流,如音频或视频,且数据以大端模式存储。每个Tag后面有四字节的pretagsize,表示前一个tag的大小。Tag由TagHeader和TagData两部分构成,涵盖音频、视频和脚本数据。其中,音频数据部分特别提到了AAC编码,视频数据涉及AVCDecoderConfigurationRecord,而脚本数据则涉及到AMF0格式和OnMetaData。
摘要由CSDN通过智能技术生成

在做rtmp相关的项目,中间用到FLV格式,这里对FLV格式进行介绍说明。

对于FLV格式的文件,一个文件只包含一种类型的码流,不能音频流和视频流混合存放,也不能将多个同类型码流放到一起。FLV里面的数据是采用大端模式存储。

下面对FLV格式做个整体认识:

FLV由FLVHeader和Tag组成,在每个Tag后面都包含一个四字节的pretagsize表示前一个tag的大小。每个Tag又由TagHeader和TagData两部分组成。

下面分别介绍FLV各个部分的具体内容。

1.FLVHeader,每个FLV文件都由FLVHeader开头。包括以下内容

字段

类型

说明

标识

UI8

第一个字节一直为’F’(0x46)

标识

UI8

第二个字节一直为’L’(0x4C)

标识

UI8

第三个字节一直为’V’(0x56)

版本

UI8

FLV版本 0x01版本1

类型标识保留

UB[5]

保留位置0

标识音频

UB[1]

1=表示后面都是音频Tags

类型标识保留

UB[1]

保留位置0

标识视频

UB[1]

1=表示后面都是视频Tags

数据偏移

UI32

FLVHeader的长度

数据偏移在FLV版本1里面是9,后续版本可以用来扩展。从上面可以看出如果是音频则第四个表示流类型的值是4,视频则是1。

2.pretagsize字段,类型是UI32也就是4个字节,表示的是它前面的tag的长度。Pretagsize0一直是0。

3.FLV Tag是FLV body,由tagHeader和tagData组成。包括audio、video、scripts三种类型的tag。

3.1 tagHeader 在FLV version 1里面是11个字节,包括以下内容

字段

类型

说明

预留

UB[2]

置0

过滤

UB[1]

包是否需要预处理标志。未加密0 加密 1

Tag类型

UB[5]

Tag类型 8=audio 9=video 18=scriptdata

TagData部分的大小

UI24

数据大小,从StreamID到tag结束的数据大小

时间戳

UI24

毫秒时间戳

时间戳扩展

UI8

将时间戳扩展到32位,这个字节表示最高位,其他24位是上面的时间戳

StreamID

UI24

一直是0

3.2 tagData部分根据tag类型不同,类型也有不同,对内容的解析也是不同的。

3.2.1 audiodata

字段

类型

说明

SoundFormat

UB[4]

音频类型

0=linear PCM platform endian

1=ADPCM

2=MP3

3= linear PCM little endian

4=Nellymoser 16kHz mono

5=Nellymoser 8kHz 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 8kHz

15=Device-specific sound

SoundRate

UB[2]

采样率

0=5.5 kHz

1=11 kHz

2=22 kHz

3=44 kHz

SoundSize

UB[1]

音频单个采样率位宽,适用于未压缩数据,压缩数据一直是16

0=8 bit

1=16 bit

SoundType

UB[1]

单声道或立体声

0=单声道

1=立体声

data

UI8[n]

音频数据载荷

这里单独介绍一下音频类型是AAC的音频数据载荷 SoundFormat = 10

字段

类型

说明

AACpacketType

UI8

0=AAC sequence header

1=AAC raw

AACData

If AACPacketType=0

AudioSpecificConfig

If AACPacketType=1

Raw AAC UI8[n]

AudioSpecificConfig定义在ISO14496-3

3.2.2 VedioData

字段

类型

说明

FrameType

UB[4]

视频帧类型

1=key frame(for AVC a seekable frame)

2=inter frame(for AVC a non-seekable frame)

3=disposable inter frame(H.263 only)

4=generated key frame(server use only)

5=video info/command frame

CodecID

UB[4]

编码标识符

2=Sorenson H.263

3=Screen Video

4=On2PV6

5=On2PV6 with alpha channel

6=Screen Video version 2

7=AVC

data

UI8[n]

视频数据载荷

对于CodecID=7 AVC 视频数据载荷存在如下格式

字段

类型

说明

AVCPacketType

UI8

0=AVC sequence Header

1=AVC NALU

2=AVC end of sequenc

Composition time

SI24

If AVCPacketType=1 显示时间偏移 其他为 0

Data

UI8[n]

AVCPacketType = 0 AVCDecoderConfigRecord

AVCPacketType = 1 one or more NALUS

AVCDecoderConfigurationRecord的描述参见ISO 14496-15, 5.2.4.1。它包含的信息与将存储在MP4/FLV文件中的avcC框中的信息相同。

3.2.3 script data 这部分数据AMF格式的数据对,这里简单介绍一下AMF0的格式和嵌入在script data 中的OnMetaData的类型数据

AMF0:

字段

类型

说明

Type

UI8

0=Number

1=Boolean

2=String

3=Object

4=MovieClip

5=Null

6=Undefined

7=Reference

8=ECMA array

9=Object end maker

10=Strict array

11=Date

12=Long string

DataValue

If Type=0

DOUBLE

If Type=1

UI8

If Type=2

Datastring

If Type=3

DataObject

If Type=7

UI16

If Type=8

ECMA array

If Type=10

Strict array

If Type=11

Data

If Type=12

Long string

对应类型的数值

AFM0 http: /lopensource.adobe.com/wiki/display/blazeds/Developer+Documentation

OnMateData介绍

属性名称

AMF Type

说明

audiocodecid

Number

文件中使用的音频编解码器ID参见SoundFormat值

audiodatarate

Number

音频比特率(千比特/秒)

audiodelay

Number

跳频延迟由音频编解码器引入,以秒为单位

audiosamplerate

Number

音频流重放时的数字频率

audiosamplesize

Number

单个音频采样位宽

canSeekToEnd

Boolean

标识最后一帧为关键帧

creationdate

String

报告日期和时间

Duration

Number

文件的总时长单位秒

Filesize

Number

文件的大小

framerate

Number

帧率

height

Number

视频高

Stereo

Boolean

立体声音频

Videocodecid

Number

在文件中使用的视频编解码器标识号参见CodecID

Videodatarate

Number

视频比特率

width

Number

视频宽

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值