美文网首页
FLV 文件格式

FLV 文件格式

作者: Damon_He | 来源:发表于2019-11-05 17:07 被阅读0次

概述

Flash Video(简称FLV),是一种网络视频格式,用作流媒体格式,它的出现有效地解决了视频文件导入Flash后,使导出的SWF文件体积庞大,不能在网络上有效使用等缺点。

FLV文件结构

FLV 文件 = File Header(FLV 文件头)+ File Body(FLV 文件体)。其中文件体又由一系列的 Tag 和 Tag Size 组成。

FLV_文件结构.jpg

FLV File Header

FLV_File_Header.png
字段 字节 描述
signature 3 文件格式标识。('F‘ : 0x46,'L' : 0x4C,'V' : 0x56)
version 1 版本号。(0x01:版本号为1)
type flags 1 类型标识。
前5个bit是类型标志预留字段,必须是0;
第6个bit音频类型标志(TypeFlagsAudio);
第7个bit是类型标志预留字段,必须是0;
第8个bit视频类型标志(TypeFlagsVideo)。(0x05,也就是 00000101,表示既有音频也有视频)
data offset 4 文件头的长度。(对于版本号为1的FLV文件来说,文件头长度固定是9,大于9表示下面还有扩展信息)

FLV File Body

Body部分是由一系列的 PreviousTagSize + Tag 构成。

PreviousTagSize 固定为4字节,表示前一个Tag的size

Tag分为3种类型:Script(脚本)、Video(视频)、Audio(音频)

FLV Tag

FLV中的Tag又分为 tag header(tag头部分)和 tag data(tag数据部分)。

FLV Tag Header

字段 字节 描述
TagType 1 当前tag的类型,值有:
0x08:audio
0x09:video
0x12:script
其他:未使用的预留值
DataSize 3 数据部分的数据长度(Data字段的数据长度)。
Timestamp 3 当前帧的时间戳,单位是毫秒。相对于第一个TAG的时间戳(第一个的时间戳总是0)
TimestampExtended 1 时间戳扩展字段。 如果时间戳大于0xFFFFFF,将会使用这个字节。这个字节是时间戳的高8位,上面的三个字节是低24位。
StreamID 3 流ID,总是0
Data n 数据部分

FLV Script Tag

Script Tag一般只有一个,且是FLV中第一个Tag,用来存放一些描述信息,如:duration、width、height等。Script Tag 中Data部分的数据都是以 【数据类型 + 数据长度 + 数据】的格式出现的。一般来说,该Tag Data结构包含两个AMF包。AMF(Action Message Format)是Adobe设计的一种通用数据封装格式,在Adobe的很多产品中应用,简单来说,AMF将不同类型的数据用统一的格式来描述。第一个AMF包封装字符串类型数据,用来装入一个“onMetaData”标志,这个标志与Adobe的一些API调用有关。第二个AMF包封装一个数组类型,这个数组中包含了音视频信息项的名称和值。

FLV_Script_Tag.png
Script Data Type
类型 说明
0 Number type double类型,后8字节为数据长度
1 Boolean type bool类型,后1字节为数据长度
2 String type string类型,后两字节为数据长度
3 Object type
4 MovieClip type
5 Null type
6 Undefined type
7 Reference type
8 ECMA array type 数组类型(类似Map),后4字节为数组长度。(key:前两字节为长度;value部分第1字节为类型)
10 Strict array type
11 Date type
12 Long string type
第一个AMF
FLV_Script_AMF_1.png

02:String类型

0A:String长度为10

后面10字节为数据的值

FLV Video Tag Data

字段 占位 描述
FrameType 4 帧类型。
1: 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
CodecID 4 编码类型。
1: JPEG(目前未用到)
2: Sorenson H.263
3: Screen video
4: On2 VP6
5: On2 VP6 with alpha channel
6: Screen video version 2
7: AVC(高级视频编码)
VideoData n 数据部分(AVC则需要参考下面AVCVIDEOPACKET部分)
AVCVIDEOPACKET
字段 字节 描述
AVCPacketType 1 0:AVC sequence header
1:AVC NALU
2:AVC end of sequence
CompositionTime 3 合成时间。
AVCPacketType==1,表示 合成时间(单位毫秒); 否则为0
data n 如果AVCPacketType==0,数据部分为AVCDecoderConfigurationRecord;
如果AVCPacketType==1,数据部分为1个或多个NALU;
如果AVCPacketType==2,数据部分为空
AVCDecoderConfigurationRecord

AVCDecoderConfigurationRecord 包含了H.264解码相关比较重要的SPSPPS信息,再给AVC解码器送数据流之前一定要把SPSPPS信息送出,否则的话解码器不能正常解码。而且在解码器stop之后再次start之前,如seek、快进快退状态切换等,都需要重新送一遍SPSPPS的信息。AVCDecoderConfigurationRecord在FLV文件中一般情况也是出现1次,也就是第一个video tag。

字段 字节 描述
版本 1 0x01,版本号为1
编码规格 3 sps[1]+sps[2]+sps[3]
NALU 的长度 1 0xFF,包长为 (0xFF& 3) + 1,也就是4字节表示
SPS个数 1 0xE1,个数为0xE1 & 0x1F 也就是1
SPS长度 2 整个sps长度
SPS的内容 n 整个sps
PPS个数 1 0x01,1个
PPS长度 2 整个pps长度
PPS内容 n 整个pps内容
FLV_Video_Tag_1.png

FLV Audio Tag Data

与Video Tag类似。

字段 占位 描述
SoundFormat 4 音频数据格式。值:
0 = 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
(7,8,14,15是内部预留)
SoundRate 2 音频采样率。值:
0 = 5.5-kHz
1 = 11-kHz
2 = 22-kHz
3 = 44-kHz
(对于AAC来说,该字段总是3)
SoundSize 1 采样长度。值:
0 = snd9Bit
1 = snd16Bit
(对于压缩过的音频来说,一般都是16bit)
SoundType 1 音频类型(单声道还是双声道)。值:
0 = sndMono
1 = sndStereo
(对于AAC,总是1)
SoundData n 音频数据部分(AAC则需要参考下面AACAUDIODATA部分)
AACAUDIODATA
字段 字节 描述
AACPacketType 1 0:AAC 序列头<br />1:AAC 数据
Data n 如果AACPacketType==0,参考下面的 AudioSpecificConfig
如果AACPacketType==1,即AAC原始音频数据
AudioSpecificConfig
字段 占位
audioObjectType 5
samplingFrequencyIndex 4
channelConfiguration 4
frameLengthFlag 1
dependsOnCoreCoder 1
extensionFlag 1

相关文章

  • ffmpeg直播推拉流

    推流 -re减慢帧率速率-c 音视频编码方式-f flv 已flv文件格式 拉流

  • FLV 文件格式

    概述 Flash Video(简称FLV),是一种网络视频格式,用作流媒体格式,它的出现有效地解决了视频文件导入F...

  • FLV格式解析

    1.FLV文件格式如下,由flv头和一系列tag组成,tag又分为script tag、音频tag、视频tag。 ...

  • iOS RTMP 视频直播开发笔记(6)- 封包 FLV

    讲讲FLV文件格式。以及数据如何放置的。 FLV里面是由多个Tag构成的:[[tag1][tag2][tag3][...

  • FLV 和 HTTP-FLV

    FLV 简介 FLV(Flash Video)是 Adobe 公司推出的一种媒体文件格式,是一种非常常见的音视频封...

  • Flv文件格式解析

    Flv文件解析 Flv文件分为header和body两个部分 Header Body TAG TAG_DATA S...

  • flv文件格式介绍

    目录 概述 flv文件主体结构 Tag介绍 开源的解析软件 参考阅读 1. 概述 flv(Flash Video)...

  • flv文件格式图解

    flv格式是由adobe公司制定的一种比较简单的流媒体存储格式,由于其视频文件体积轻巧、封装播放简单等特点,使其很...

  • FFmpeg 是如何实现多态的?

    前言 众所周知,FFmpeg 在解码的时候,无论输入文件是 MP4 文件还是 FLV 文件,或者其它文件格式,都能...

  • mkv、rmvb、avi、MP4、flv、wmv、HLS特点和区

    mkv,rmvb,avi,mp4, flv ,wmv都是封装格式,也是文件格式,并不是数据压缩格式。 先介绍一下这...

网友评论

      本文标题:FLV 文件格式

      本文链接:https://www.haomeiwen.com/subject/ckqqbctx.html