FLV文件格式详解
来源:互联网 发布:五大贵重宝石知乎 编辑:程序博客网 时间:2024/06/17 07:17
FLV文件格式
FLV包括文件头(File Header)和文件体(File Body)两部分。文件结构如图所示:
FLV文件头
header部分记录了flv的类型、版本等信息,是flv的开头,一般都差不多,占9bytes。具体格式如下:
.
FLV文件体
文件体由一系列的Tag组成。其中,每个Tag前面还包含了Previous Tag Size字段,表示前面一个Tag的大小。Tag的类型可以是视频、音频和Script,每个Tag只能包含以上三种类型的数据中的一种。
.
Tag
每个Tag由也是由两部分组成的:Tag Header和Tag Data。Tag Header里存放的是当前Tag的类型、数据区(Tag Data)长度等信息,具体如下:
.
下面详细介绍一下三种Tag的Tag Data部分的结构:
Audio Tag Data结构(音频Tag)
音频Tag开始的第1个字节包含了音频数据的参数信息,从第2个字节开始为音频流数据。如图为音频Tag结构:
第1个字节的前4位的数值表示了音频编码类型,第5-6位的数值表示音频采样率,第7位表示音频采样精度,第8位表示音频类型。具体格式如下:
从上图可以看出,FLV封装格式并不支持48KHz的采样率。
Video Tag Data结构(视频Tag)
视频Tag也用开始的第1个字节包含视频数据的参数信息,从第2个字节为视频流数据。如图为视频Tag结构:
第1个字节的前4位的数值表示帧类型,第1个字节的后4位的数值表示视频编码类型。具体格式如下:
VideoData为数据具体内容:
如果CodecID=2,为H263VideoPacket;
如果CodecID=3,为ScreenVideopacket;
如果CodecID=4,为VP6FLVVideoPacket;
如果CodecID=5,为VP6FLVAlphaVideoPacket;
如果CodecID=6,为ScreenV2VideoPacket;
如果CodecID=7,为AVCVideoPacket;
AVCVideoPacket格式
AVCVideoPacket同样包括Packet Header和Packet Body两部分:
即AVCVideoPacket Format:
| AVCPacketType(8)| CompostionTime(24) | Data |
AVCPacketType为包的类型:
如果AVCPacketType=0x00,为AVCSequence Header;
如果AVCPacketType=0x01,为AVC NALU;
如果AVCPacketType=0x02,为AVC end ofsequence
CompositionTime为相对时间戳:
如果AVCPacketType=0x01, 为相对时间戳;
其它,均为0;
Data为负载数据:
如果AVCPacketType=0x00,为AVCDecorderConfigurationRecord;
如果AVCPacketType=0x01,为NALUs;
如果AVCPacketType=0x02,为空。
AVCDecorderConfigurationRecord格式
AVCDecorderConfigurationRecord包括文件的信息。
具体格式如下:
| cfgVersion(8) | avcProfile(8) | profileCompatibility(8) |avcLevel(8) | reserved(6) | lengthSizeMinusOne(2) | reserved(3) | numOfSPS(5) |spsLength(16) | sps(n) | numOfPPS(8) | ppsLength(16) | pps(n) |
Script Tag Data结构(控制帧)
该类型Tag又通常被称为Metadata Tag,会放一些关于FLV视频和音频的元数据信息如:duration、width、height等。通常该类型Tag会跟在File Header后面作为第一个Tag出现,而且只有一个。结构如图所示:
第一个AMF包:
第1个字节表示AMF包类型,常见的数据类型如下:
0 = Number type1 = Boolean type2 = String type3 = Object type4 = MovieClip type5 = Null type6 = Undefined type7 = Reference type8 = ECMA array type10 = Strict array type11 = Date type12 = Long string type
FLV文件中,第一个字节一般总是0x02,表示字符串。第2-3个字节为UI16类型值,标识字符串的长度,一般总是0x000A(“onMetaData”长度)。后面字节为具体的字符串,一般总为“onMetaData”(6F,6E,4D,65,74,61,44,61,74,61)。
第二个AMF包:
第1个字节表示AMF包类型,一般总是0x08,表示数组。第2-5个字节为UI32类型值,表示数组元素的个数。后面即为各数组元素的封装,数组元素为元素名称和值组成的对。常见的数组元素如下表:
引用
https://wuyuans.com/2012/08/flv-format/
http://blog.csdn.net/leixiaohua1020/article/details/17934487
- FLV文件格式详解
- FLV文件格式详解
- FLV文件格式详解
- FLV文件格式详解
- FLV文件格式详解
- FLV文件格式官方规范详解
- FLV文件格式官方规范详解
- FLV文件格式官方规范详解
- FLV文件格式
- flv文件格式
- FLV文件格式
- FLV文件格式
- FLV 文件格式
- FLV文件格式
- flv文件格式
- FLV文件格式
- SWF与FLV文件格式
- FLV文件格式分析
- VMware Vsphere 6.0安装部署 (四) vCenter Server的配置与管理
- cxf添加身份认证
- Android NestedScroll笔记
- difference between dmesg and /var/log/kern.log
- 单链表的拆分
- FLV文件格式详解
- 单链表的建立、排序、打印
- 查看MYSQL的数据库表空间
- Redis对于key的操作命令(二)
- 大数据常见算法题
- leetcode No116. Populating Next Right Pointers in Each Node
- 分布式文件存储 搭建FastDFS-5.0.5集群
- QML在动画执行完做其它事
- 全透明UINavigationBar的实现