2024年2月11日发(作者:)
FLV文件结构
FLV是一个二进制文件,由文件头(Flv header / File header)和很多Tag组成。Tag又可以分成三类:Metadata Tag、Audio Tag、Video Tag,分别为元数据(包括文件信息、音视频信息等)、音频流,视频流。可以使用小工具查看Flv文件信息(选择要显示的信息类型下面的下拉框中选择“file header info,
metadata info, tag header info”较好)。
各个部分介绍如下:
1. Flv Header
一般比较简单,包括文件类型之类的全局信息,包括以下部分:
(1) 文件类型 3bytes
总是FLV(0x46 0x4C 0x56)
(2) 版本1byte
一般是0x01,表示FLV version 1
(3) 流信息 1byte
倒数第一bit为1表示有视频流,倒数第三bit为1表示有音频流,其他一般都是0(有些软件如flvtool2可能造成倒数第四bit是1,不过也ok)
(4) header长度4bytes
整个文件头的长度,一般是9(3+1+1+4),有时候后面还有些别的信息,就不是9了
1.5 First Tag Size 4bytes
一般为0,只是为了格式上统一。因为后面每个Tag段都包含Tag+Pre Tag Size,这里File Header部分也看作一个Header+First Tag Size。First Tag Size的具体数值意义不大。
2. Flv Body
Flv body由很多Tag组成,一个Tag包括以下信息:
第一部分,Tag Header,共11bytes,含以下四个部分:
(1) Tag类型 1byte
三类:8 -- 音频Tag;9 -- 视频Tag;18 -- 元数据Tag
(2) 数据区长度 3bytes
Tag Data的长度,以字节为单位
(3) 时间戳 4bytes
单位为ms,如果是Metadata Tag则为0
时间戳包括基本时间戳(前3bytes)和扩展时间戳(后1byte),基本时间戳为低三位,扩展时间戳为高一位,即T=( Textend << 24) + Tbase
(4) Stream id 3bytes
总是0(不知道干啥的)
第二部分,Tag Data,共(数据区长度)个byte
数据区
If TagType == 8 AUDIODATA
If TagType == 9 VIDEODATA
If TagType == 18 METADATA
第三部分,Pre Tag Size,4bytes
当前Tag的长度,即第一部分+第二部分的长度和,也等于11+数据区长度 3bytes。这个数值和数据区长度合在一起可以提供一定的数据鲁棒性,可以用来寻找数据不完整的Flv的可用Tag的起始位置。
在第二部分,数据区根据不同的Tag类型有不同的组织方式:
2.1 Audio Tag 数据区
audio信息 1byte,共8位
(1) 前四位bits表示音频格式:
0 = 未压缩
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) 接着两位bits表示采样率(samplerate):
0 -- 5.5kHz
1 -- 11kHz
2 -- 22kHz
3 -- 44kHz
(3) 然后一位bit表示每个采样的长度:
0 -- snd8Bit
1 -- snd16Bit
(4) 最后一位bit表示类型:
0 -- sndMomo
1 -- sndStereo
audio数据
2.2 Video Tag 数据区
video信息 1byte,共8位
(1) 前四位bits表示数据类型:
1 -- keyframe
2 -- inner frame
3 -- disposable inner frame (H.263 only)
4 -- generated keyframe (reserved for server use only)
5 -- video info/command frame
(2) 后四位bits表示编码器id:
1 -- JPEG (currently unused)
2 -- Seronson H.263
3 -- Screen video
4 -- On2 VP6
5 -- On2 VP6 without channel
6 -- Screen video version 2
7 -- AVC
Video数据


发布评论