前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >手撕rtmp协议细节(2)——rtmp Header

手撕rtmp协议细节(2)——rtmp Header

作者头像
视界音你而不同
发布2020-05-20 00:43:53
3.5K1
发布2020-05-20 00:43:53
举报

Rtmp协议握手完成之后,就可以进行数据交互了,但交换的数据格式需要一个组织的标准,发送端按照该标准进行数据的组装,接收方按照该标准进行数据的拆解,这样才能完成通信。rtmp的协议的数据包,总的来讲分为两大部分,一部分是Rtmp Header,另一部分为Rtmp Body,这一篇我们来主要讲解一下Rtmp Header的组织形式。

RTMP header的长度不固定,可能的长度为12字节,8字节,4字节,1字节。具体长度为多少个字节,由RTMP header数据包的第一个字节的高2位决定。

如下方表格,Format决定了RTMP header的长度为多少个字节:

Format取值(2bits)

header的长度

说明

0(二进制00)

12字节

onMetaData流开始的绝对时间戳控制消息(如connect)

1(二进制01)

8字节

大部分的rtmp header都是8字节的

2(二进制10)

4字节

比较少见

3(二进制11)

1字节

偶尔出现,低于8字节频率

下面,通过wireshark抓包看下,RTMP HEADER的长度。

图中,RTMP Header的第一个字节为0x03,高两位的值为00,所以,整个RTMP Header的长度就是4个字节了。

第一个字节的低6位,命名为Chunk Stream ID,Chunk Stream ID用来表示消息的级别:

chunk stream id

级别

说明

2

low level

3

high level(像connect, create_stream一类消息)

4

control stream

5

video

6

audio

8

control stream

还是看上面抓包的图片:

chuk_stream id为3,表示消息的级别为high levle,这一条消息实际上是一条connect的消息。

知道了RTMP header的第一个字节的作用以后,接下来我们看下几种不同长度的RTMP Header。

12字节的RTMP Header

还是老规矩,借助抓包工具,我们时间分一个RTMP Header的包,还是拿前面举过的列子来分析吧,看下面的图:

下面来,详细说说这几个字段是干嘛的:

第一个时间戳,无需多言。

BodySize字段,表示RTMP Body所包含数据包的大小,此处为209,感兴趣的可以在图中数一数,除去RTMP Header部分,后面的数据部分长度便是209。

Type ID字段表示消息类型ID,比如此处0x14表示以AMF0编码(还有AMF3编码,Adobe定义的编码方式)。另外还有如0x04表示用户控制消息,0x05表示Window Acknowledgement Size,0x06表示 Set Peer Bandwith等等,就不一一列举了。

还有最后一个Stream ID,Stream ID通常用以完成某些特定的工作,如使用ID为0的Stream来完成客户端和服务器的连接和控制,使用ID为1的Stream来完成视频流的控制和播放等工作。

8字节的RTMP Header

还是直观点,上一个真实的抓包文件,来分析:

第一个字节,高2位为01,所以RTMP Header的长度为8字节,接下来是时间戳的delta,简单讲就是时间戳的变化量,BodySize不多说,后面6个字节也比较赤裸裸。TypeID此处为0x04,也就是用户控制信息(本条消息实际上是rtmp客户端和服务器之间的Ping Response)。

4字节的RTMP Header

4字节的就比较简单了,除了第一个字节之外,只有一个关于时间戳的增量,占用3个字节。

上一张抓包图:

可以看到,第一个字节为0xa2,所以高2位的值为10,所以,RTMP Header占用4个字节,后面跟着的时间戳的增量。

1字节的RTMP Header

抓个包,好奇的看一下。

一个字节,就是第一个字节,后面啥也没有喽,高2位为11,所以,RTMP Header占用1个字节,只包含Format 和chunk stream ID。

好了,关于RTMP Header格式的介绍就到这里了,下一篇我们来看一下RtmpBody的数据组织格式,下一篇不见不散。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-05-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 视界音你而不同 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档