1. FLV文件格式相对于MP4,简单很多。
FLV Header(9Bytes) + FLV Body
a比特: 1:有音频; 0:无音频
v比特: 1:有视频; 0:无视频 如果音视频都有这个字节为0x05
'F'|'L'|'V'|0x01|0b00000a0v| 0x00 00 00 09|
| |
版本字节一般为0x01 头长度 固定为9
FLV Body由一系列的Tag组成,每个tag的结构如下:
{ 0x00000000| tag_header0| tag_data0 } | {tag_size0| tag_header1 | tag_data1 } | {tag_size1| tag_header2 | tag_data2 } |...
tag_size(n) = tag_data_size(n-1) + 11
解析完一个tag后,读取下4个字节,可以比较下看是不是前帧完全解码完毕。
|3Byte data_size数据区长度 | 纯数据长度,不包括头信息的15字节
|3Byte timestamp 时间戳 | 最终的时间戳 = (timestamp_ex<< 24) | timestamp
|1Byte timestamp_ex扩展时间戳 | 最终时间戳的高8位。不知道为什么定义成这样,可能是因为标准扩展
FLV Header(9Bytes) + FLV Body
a比特: 1:有音频; 0:无音频
v比特: 1:有视频; 0:无视频 如果音视频都有这个字节为0x05
'F'|'L'|'V'|0x01|0b00000a0v| 0x00 00 00 09|
| |
版本字节一般为0x01 头长度 固定为9
FLV Body由一系列的Tag组成,每个tag的结构如下:
{ 0x00000000| tag_header0| tag_data0 } | {tag_size0| tag_header1 | tag_data1 } | {tag_size1| tag_header2 | tag_data2 } |...
tag_size(n) = tag_data_size(n-1) + 11
解析完一个tag后,读取下4个字节,可以比较下看是不是前帧完全解码完毕。
除了可以验证码流外,还有什么样的好处促使FLV格式采用这种方式呢?不太清楚。
0x00000000| { tag_header0| tag_data0 | tag_size0} | { tag_header1 | tag_data1 | tag_size1} |...
Tag body也可以这样看,编码时按照: 数据头 数据体 数据大小 三部分来划分,更适合一些。下面各个tag都是按照这个结构来写的。
Tag header 11Bytes
|1Byte Tag类型 | 只支持3类, 0x08音频; 0x09视频;0x12脚本|3Byte data_size数据区长度 | 纯数据长度,不包括头信息的15字节
|3Byte timestamp 时间戳 | 最终的时间戳 = (timestamp_ex<< 24) | timestamp
|1Byte timestamp_ex扩展时间戳 | 最终时间戳的高8位。不知道为什么定义成这样,可能是因为标准扩展