5.4 协议控制消息
RTMP块流用消息类型ID 1,2,3,5和6来作为协议控制消息,这些消息包含RTMP块流协议所需要的信息。
这些协议控制消息必须用 0
作为消息流ID(控制流ID),并在ID为2的块流中发送。协议控制消息收到后立即生效,它们的时间戳信息是被忽略的。
5.4.1 设置块大小(1
)
协议控制消息 1
,设置块大小,用于通知另一端新的最大块大小。
最大块大小默认为128字节,客户端或服务端可以修改此值,并用该消息通知另一端。例如,假设一个客户端想要发送131字节的音频数据,而最大块大小为128。在这种情况下,客户端可以向服务端发送该消息,通知它最大块大小被设置为了131字节。这样客户端只用一个块就可以发送这些音频数据。
最大块大小不能小于1字节,通常应该不低于128字节。每个方向上的最大块大小是独立的。
0: 该位必须为0 chunk size(31位): 该字段以字节形式保存新的最大块大小,该值将用于后续的所有块的发送,知道收到新的通知。该值可取值范围为1-2147483647(0x7FFFFFFF),但是所有大于1677215(0xFFFFFF)的值都是等同的,因为任何块不可能比消息大,而消息长度不能大于16777215字节。
5.4.2 终止消息(2
)
协议控制消息2
,终止消息,通知正在等待消息后续块的另一端,可以丢弃通过指定块流接收到的部分数据,块流ID为该消息有效负载。应用可能在关闭的时候发送该消息,用来表明后面的消息没有必要继续处理了。
chunk stream id(32字节): 该字段承载可以丢弃当前消息的块流ID。
5.4.3 确认消息(3
)
客户端或服务器在收到数据后必须向对端发送与视窗大小相等的确认消息。视窗大小是发送端发送的最大字节数,无论有没有收到接收端发送的确认消息。该消息代表序列号,是到当前时间为止接收到的字节总数。
sequence number(32字节): 到当前时间位置接收到的字节总数
5.4.4 视窗大小确认(5
)
客户端或服务端发送该消息来通知对端发送确认消息所使用的视窗大小,并等待接收端发送确认消息。接收端在接收到视窗大小后必须发送确认消息(5.4.3)。
5.4.5 设置对等带宽(6
)
客户端或服务端发送该消息来限制对端的输出带宽。接收端收到消息后,通过将已发送但尚未被确认的数据总数限制为该消息指定的视窗大小,来实现限制输出带宽的目的。如果视窗大小与上一个视窗大小不同,则该消息的接收端应该向该消息的发送端发送视窗大小确认消息。
Limit Type(限制类型)有以下可选值:
- 0 - Hard: 消息接收端应该将输出带宽限制为指定视窗大小
- 1 - Soft: 消息接收端应该将输出贷款限制为指定视窗大小和当前视窗大小中较小的值
- 2 - Dynamic: 如果上一个消息的限制类型为Hard,则该消息同样为Hard,否则抛弃该消息。