FLV是FLASH VIDEO的简称,它是Adobe 公司推出的一种视频封装格式,FLV主要用于流媒体系统。
这节我们来详细了解一下FLV协议,之前我写过一篇,那篇有点乱,看了李超老师的课再来总结一下。
FLV协议分为FLV header和FLV body
首先FLV header占9个字节
1 - 3 : ‘F’ , ‘L’ , ‘V’;
4 : Version,FLV的版本为1;
5 : Type;
6 - 9 : 版本为1时填9,表示FLV header占9个字节
之后是FLV Body,FLV body包含一个一个的pre tagsize , Tag。
1.pre tagsize(4个字节)表示前面一个tag的大小,但是FLV中的表示和我们所习惯的有偏差(普通协议:尺寸在前,内容在后,但是RTMP,内容在前,尺寸在后)
2.对于每一个tag又分为tag head 和 tag body
2.1其中tag header占11个字节:
TT(Tag Type),DataSize(数据大小),TimeStamp(时间戳),E(扩展时间戳),SID(流 ID)
Tag Type:占1字节,表示tag的类型;0x08表示音频,0x09表示视频,0x12表示script
DataSize:占3个字节,表示该tag的data部分的大小
TimeStamp:占3字节,表示tag的时间戳
TimestampExtended:1字节,表示时间戳的扩展字节
StreamId:3字节,总为0
2.2
Tag Data(数据内容,分为 Audio 和 Video)
而音频和视频的tag Data都分为 header 和 Audio data; header 和 Video data
2.2.1 音频header 包含音频格式 采样率 采样精度和音频声道
2.2.2 Audio data包含AACPacketType 和 AAC Data
AAC Data:AAC数据,又分为配置信息和aac数据
同理
2.2.3 视频header 包含帧类型和编码ID
2.2.4 Video Data包含AVCPacketType , Timestamp 和 AVCPacketData
AVCPacketData又分为pps sps 和 nalu数据
总结:
FLV 协议与RTMP协议
所有RTMP 数据在FLV中要加一个头 header,RTMP 数据就是tag data,
变成flv文件,要在tag data前面加一个tag header,再加一个FLV Header 9个字节的文件头。
将mp4 推流的时候先转成flv文件