RTMP 协议包头参考

我怕爱的太早我们不能终老 提交于 2020-08-08 09:36:10

为了方便查阅,把RTMP协议的包头记录下来,以便参考:

RTMP协议在握手完成以后,服务器与客户端通过包(chunk)来进行信令交换。

包(thunk)格式如下

每个包有包头与数据组成。而包头自身是由三部分组成:
       包头可以是4种长度的任意一种:12, 8, 4, 1 byte(s).完整的RTMP包头应该是12bytes,包含了时间戳,AMFSize,AMFType,StreamID信息, 8字节的包头只纪录了时间戳,AMFSize,AMFType,其他字节的包头纪录信息依次类推 。
       包体最大长度默认为128字节,通过chunkSize可改变包体最大长度,通常当一段AFM数据超过128字节后,超过128的部分就放到了其他的RTMP封包中,包头为一个字节. 
完整的12字节RTMP包头每个字节的含义: 
用途                     大小(Byte)            含义 
Head_Type               1                      包头 
TiMMER                    3                      时间戳 
AMFSize                   3                      数据大小 
AMFType                  1                      数据类型 
StreamID                  4                      流ID 
一、Head_Type 
第一个字节Head_Type的前两个Bit决定了包头的长度.它可以用掩码0xC0进行"与"计算: 
Head_Type的前两个Bit和长度对应关系: 
Bits        Header  Length 
00         12 bytes 
01          8 bytes 
10          4 bytes 
11          1 byte 
Head_Type的后面6个Bit和StreamID决定了ChannelID。
StreamID和ChannelID对应关系:StreamID=(ChannelID-4)/5+1 参考red5 
ChannelID     用途
02                  Ping 和ByteRead通道 
03                  Invoke通道 我们的connect() publish()和自字写的NetConnection.Call() 数据都是在这个通道的 
04                  Audio和Vidio通道 
05 06 07        服务器保留,经观察FMS2用这些Channel也用来发送音频或视频数据 
例如:在rtmp包里面经常看到的0xC2, 就表示一字节的包头,channelID=2.。
























 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!