FLV文件格式分析

 转自:http://wenku.baidu.com/view/8246086e1eb91a37f1115c03.html

FLV是一个二进制文件,由文件头(FLV header)和很多tag组成。tag又可以分成三类:audio,video,script,分别代表音频流,视频流,脚本流(关键字或者文件信息之类)。

FLV Header

一般比较简单,包括文件类型之类的全局信息,如图:

文件类型(3bytes):FLV(0x46 0x4C 0x56)

版本(1byte):一般是0x01,表示FLV version 1

流信息(1byte):倒数第一bit是1表示有视频,倒数第三bit是1表示有音频,其他都应该是0(有些软件如flvtool2可能造成倒数第四bit是1,不过也没发现有什么不对)

Header(4bytes):整个文件头的长度,一般是9(3+1+1+4),有时候后面还有些别的信息,就不是9了

 

FLV Body

FLV body就是由很多tag组成的。

FLV文件里面帧的实体就是tag了,每个tag都可以分为两部分,

第一部分包含是tag 类型信息,长度固定为15字节,分别是:

Previoustagsize(4bytes):前一个tag的长度,第一个tag就是0。00 00 00 00

tag类型(1byte)三类:8——音频tag;9——视频tag;  18——脚本tag, 12

数据区长度(3bytes):00 00 F6

时间戳(3bytes):单位毫秒,如果是脚本tag就是0,00 00 00

扩展时间戳(1byte):作为时间戳的高位,00

streamsID(3bytes):总是0(不知道干啥用):00 00 00

第二部分为tag data

Data Object类型标志(1Byte): 02

object name的长度(2Byte): 000A

Object name(10 Bytes) 6F 6E 4D 65 74 61 44 61 74 61(onMetaData)

第二个amf. data array的类型标志(1Byte): 08

数组的长度(4Bytes):0000000E

object name的长度(2Bytes) 000D

object name(0D Bytes)61 75 64 69 6F 64 61 74 61 72 61 74 65 (audiodatarate)

double类型数据标志(1Byte):00

double类型的数据值(8Bytes)40 4C 35 4D DA 20 43 55

object name的长度(2Bytes) 0009

object name(0D Bytes)66 72 61 6D 65 72 61 74 65 (framerate)

double类型数据标志(1Byte):00

double类型的数据值(8Bytes)40 39 00 00 00 00 00 00

If Type = 8,数据变量[ECMAArrayLength] 变量的结束标志是000009

tag data,也就是flv的数据(有音频,视频,脚本等三类数据),根据不同的tag类型就有不同的数据区,数据区的长度由第一部分的数据区长度字段定义 

接下来就是下一个tag的内容,其开始的四个字节定义了上个tag的总长度,注意上个tag的总长度中不包括上个tag之前的4个描述再上一个tag的长度的4个字节。

 

FLV Tail(略)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值