代码改变世界

FLV封装格式分析

2017-06-15 20:26  jiayayao  阅读(1300)  评论(0编辑  收藏  举报

  FLV官方文档:https://github.com/jiayayao/DataSheet/tree/master/media%20format/flv

一、FLV格式

  FLV包括文件头(FLV header)和文件体(FLV Body)两部分,其中文件体由一系列的Tag组成。如下图所示:

   FLV header一共9个字节,分别是:

  • Signature(3个字节)总是“FLV”,即0x46, 0x4c, 0x56;
  • Version(1个字节) 总是1,即0x01;
  • Flags(1个字节) 第6位表示是否存在音频,第8位表示是否存在视频,即音视频都有的话,是0x05;
  • HeaderSize(4个字节)头字节大小,总为9 。

  每个Tag包含3部分,Previous Tag Size字段(4个字节),Tag header字段(11个字节)和Tag data字段。

  Previous Tag Size表示前面一个Tag的大小。 

  Tag header字段包含11个字节:

  • Type(1个字节)可以是视频、音频和Script,每个Tag只能包含以上三种类型的数据中的一种:

Tag类型

视频

0x09

音频

0x08

Script

0x12

  • Data size(3个字节)表示该tag的data部分的大小;
  • Timestamp(3个字节)表示该tag的时间戳;
  • Timestamp(1个字节)表示扩展时间戳,当时间戳24位数值不够时,会扩展至32位;
  • StreamID(3个字节)表示stream id,总是0.  

 二、视频Tag

  视频tag的第一个字节用来表示视频数据的参数信息,第二个字节开始为视频数据。

  第一个字节的前4位表示帧类型:

含义

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 only)

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

  视频tag从二个字节开始为视频数据。

三、Script Tag

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

  音频tag不再贴了,有兴趣可以看官方文档。


参考资料:  

http://blog.csdn.net/leixiaohua1020/article/details/17934487