前言
内容为个人总结的一些理解,如果有错误感谢提出交流~
FLV格式详解
FLV是一种在网络直播与点播场景中的常见格式。其封装格式是由多个FLVTAG的形式存在,并且每个TAG都是独立存在的。
FLV文件格式分为两个部分,一部分为FLV文件头,另一部分为FLV文件内容(多个FLVTAG组成)。
FLV文件头格式解析
FLV头文件格式示意图如下所示,需要说明如果是一个音视频都能播放展示的FLV文件,对应位置可以分别置1
FLV文件内容格式解析
FLV文件内容格式主要为多个FLVTAG组成。而每个FLVTAG分为两个部分,分别是Header和Body。整体结构如下所示,
Header部分信息
下图为Header的字段结构(包含了TAG Data),其中TAG类型表示了该TAG数据的类型,数据大小表示了该TAG数据的大小,时间戳表示该TAG的时间。(全部字段刚好11字节)
TAG类型有三种:
- 0x08:音频TAG
- 0x09:视频TAG
- 0x12:脚本数据
其中视频TAG和音频TAG还会分为Header和body。
Body部分
在FLVTAG的Header之后存储的是TAG的Data,下面按三种类型分别说明。
VideoTag数据格式解析
VideoTag分为Header和body存储在FLVTAG的Header之后,其中Header如下图所示(包含了body),body则问实际视频数据。
AudioTag数据格式解析
AudioTag和VideoTag一样分为header和body两个部分,header结构如下所示,
字段 | 类型大小 | 说明 |
---|---|---|
声音格式 | 4位 | 使用较多的是ACC(10),MP3(3) |
音频采样率 | 2位 | 0代表5.5kHz 1代表11kHz 2代表22kHz 3代表44kHz |
采样大小 | 1位 | 0代表8位,1代表16位 |
音频类型 | 1位 | 0代表Mono sound, 1代表Stereo sound |
音频包类型 | 当音频为ACC时占用8位 | 0代表 AAC Sequence Header, 1代表AAC raw |
音频数据 | 音频数据大小 | 具体的编码的音频数据 |
ScriptData数据格式解析
常见的ScriptData是FLV的Metadata,里面一般储存AMF数据,且一般保存在文件的起始部分。该TAG数据和上面两种不同,它只有一部分,第一个字节表示类型,后续就是AMF数据。(这里不对ScriptData做详细说明)