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