美文网首页
flv文件格式介绍

flv文件格式介绍

作者: smallest_one | 来源:发表于2018-11-27 21:31 被阅读8次

目录

  1. 概述
  2. flv文件主体结构
  3. Tag介绍
  4. 开源的解析软件
  5. 参考阅读

1. 概述

flv(Flash Video)是Adobe设计的一个免费开放的音视频格式。

2. flv文件主体结构

flv包括Header和Body两部分:

  • Header:flv的类型、版本等信息。
  • Body: 数据区域。flv中的内容有多种,并可同时存在,因此,Body也不是一整块的数据,而是由更细分的块来组成,这个细分的块叫Tag。

使用的是Big-endian字节序。

2.1 Header信息

Header总共由9个字节组成,构成如下:

           ----------------------------------------------
字节序     | 46 | 4c | 56 | 01 | 05 | 00 | 00 | 00 | 09 |
           ----------------------------------------------
字符序       F    L    V    1  /    \                9
                    ---------------------------------
bit序               | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 |
                    ---------------------------------
                                         1/0     1/0
                                        音频位  视频位

Header的9字节意义如下:

  • 第1-3字节:signature, 文件类型。FLV的文件标志为固定的“FLV"。
  • 第4字节:version,版本。固定为0x01。
  • 第5字节:flags,此字节当前用到的只有第6,8两个bit位,分别标志当前文件是否存在音频,视频。参见上面bit序,即是第5字节的内容。
  • 第6-9字节:header size,整个header的长度,此4字节共同组成一个无符号32位整数,当前版本固定为9。

2.2 BODY

Body是由Tag Size(4字节)和Tag组成,其结构如下:

-------------------------
|  Previous Tag Size    |
-------------------------
|          Tag          |
-------------------------
|  Previous Tag Size    |
-------------------------
|          Tag          |
-------------------------
|  Previous Tag Size    |
-------------------------
|          Tag          |
-------------------------
|  Previous Tag Size    |
-------------------------

Previous Tag Size:前一个Tag的大小,无符号32位整型。第一个Previous Tag Size是紧接着Header的,因此,其值也是固定为0。

3. Tag介绍

Tag分为Tag Header和Tag Data两部分。

Tag Data不止一种,当前版本共有3种类型组成:

  • 音频(audio)
  • 视频(video)
  • 脚本数据(script data):关于FLV视频和音频的一些参数信息(亦称为Metadata Tag),通常该Tag会在Header后面作为第一个Tag出现,并且一个文件仅有一个Script Data Tag。

结构如下:

-------------------------
|       Tag Header      |
-------------------------
|       Tag  Data       |
-------------------------
 
                -------------------------
                |       Tag Header      |
                -------------------------
                 /                    \
--------------------------------------------------------
| 08 | 00 | 00 | 18 | 00 | 00 | 00 | 00 | 00 | 00 | 00 |
--------------------------------------------------------

3.1 Tag Header

由11字节组成:

  • 第1字节:type,Tag的类型。音频(0x08),视频(0x09),Script Data(0x12),除此之外,其他值非法。
  • 第2-4字节:tag data size。一个无符号24位整型数值(UI24),表示当前Tag Data的大小。
  • 第5-7字节:Timestamp。UI24,当前Tag的时间戳(单位为ms),第一个Tag的时间戳总为0;
  • 第8字节:Timestamp_ex,时间戳的扩展字节,当前24位不够用时,该字节作为最高位,将时间戳扩展为32位无符号整数。
  • 第9-11字节:stream id。UI24类型,表示Stream ID,总是0。

3.2 Audio Tag Data

Audio Tag Data开始的第1个字节包含了音频数据的参数信息,第2个字节开始为音频流数据:

第1字节:

  • UB[4],前4位标识音频数据的格式,如:0x2表示的是MP3数据,字典表见表1。
  • UB[2],第5,6位bit表示采样率,见表2。
  • UB[1],采样精度, 0为8bits, 1为16bits。
  • UB[1],音频类型,mono=0, stereo=1

表1.音频编码类型

含义
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
14 MP3 8-Khz
15 Device-specific sound

表2.音频采样率

含义
0 5.5kHz
1 11KHz
2 22 kHz
3 44 kHz

3.3 Video Tag Data

第1个字节包含的是视频参数信息,第2字节开始为视频流数据。

第1个字节:

  • UB[4],前4位标识帧类型。见表3帧类型。
  • UB[4],后4位标识视频编码类型。见表4视频编码类型。

表3.帧类型

含义
1 keyframe (for AVC,a seekable frame)
2 inter frame (for AVC,a nonseekable frame)
3 disposable inter frame (H.263 only)
4 generated keyframe (reserved for server use)
5 video info/command frame

表4.视频编码类型

含义
1 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

3.4 Script Tag Data

该类型Tag又通常被称为Metadata Tag,会放一些视频和音频的元数据信息如:duration、width、height、audiodatarate等。通常该类型Tag会跟在File Header后面作为第一个Tag出现,而且只有一个。

介绍下脚本的数据类型。所有数据都是以

数据类型+(数据长度)+数据的格式

出现的,数据类型占1byte,数据长度看数据类型是否存在,后面才是数据。数据类型见表5。

一个数据包示例如下:

-------------------------------------------------
| AMF1("onMetaData")  | AMF2("wight, height...")|
-------------------------------------------------

第一个AMF包:

第1个字节表示AMF包类型,一般总是0x02,表示字符串。第2-3个字节为UI16类型值,标识字符串的长度,一般总是0x000A(“onMetaData”长度)。后面字节为具体的字符串,一般总为“onMetaData”(6F,6E,4D,65,74,61,44,61,74,61)。

第二个AMF包:

第1个字节表示AMF包类型,一般总是0x08,表示数组。第2-5个字节为UI32类型值,表示数组元素的个数。后面即为各数组元素的封装,数组元素为元素名称和值组成的对。常见的数组元素如表6所示。

表5.数据类型

0 = Number type
1 = Boolean type
2 = String type
3 = Object type
4 = MovieClip type
5 = Null type
6 = Undefined type
7 = Reference type
8 = ECMA array type
10 = Strict array type
11 = Date type
12 = Long string type

表6.常见MetaData

含义
duration 时长
width 视频宽度
height 视频高度
videodatarate 视频码率
framerate 视频帧率
videocodecid 视频编码方式
audiosamplerate 音频采样率
audiosamplesize 音频采样精度
stereo 是否为立体声
audiocodecid 音频编码方式
filesize 文件大小

4. 开源的解析软件

5. 参考阅读

  1. FLV and F4V File Format Specification (Version 10.1)

相关文章

  • flv文件格式介绍

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

  • ffmpeg直播推拉流

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

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

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

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

  • FFmpeg 是如何实现多态的?

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

网友评论

      本文标题:flv文件格式介绍

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