RTMP 消息格式
本节指定使用较低级别的传输层(如RTMP区块流)在网络上的实体之间传输的RTMP消息的格式。
虽然RTMP设计用于处理RTMP区块流,但它可以使用任何其他传输协议发送消息。RTMP块流 和 RTMP 一起适用于各种音频视频应用,从一对一和一对多直播到视频点播服务再到交互式会议应用。
RTMP 消息格式
服务器和客户端通过网络发送RTMP消息以相互通信。这些消息可以包括音频、视频、数据或任何其他消息。
RTMP消息有两部分,一个头部和它的有效负载。
消息头部(Message Header)
消息头包含以下内容:
- Message Type : 表示消息类型的单字节字段。为协议控制消息(protocol control messages)保留了一系列类型ID(1-6)。
- Length : 以字节为单位表示有效负载大小的三字节字段。它是以大端格式设置的。
- Timestamp : 包含消息时间戳的四字节字段。4个字节按大端顺序打包。
- Message Stream Id : 标识消息流的三字节字段。这些字节以大端格式设置。
0 1 2 3
0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Message Type | Payload length |
| (1 byte) | (3 bytes) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Timestamp |
| (4 bytes) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Stream ID |
| (3 bytes) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Message Header
消息负载(Message Payload)
消息的另一部分是有效负载,它是消息中包含的实际数据。例如,它可能是一些音频样本或压缩视频数据。有效载荷格式和解释超出了本文件的范围。
用户控制信息(User Control Messages 4)
RTMP将消息类型ID 4用于用户控制消息(User Control messages)。这些消息包含RTMP流媒体层使用的信息。RTMP区块流协议使用ID为1、2、3、5和6的协议消息。
用户控制消息应使用消息流(message stream)ID 0(称为控制流),当通过RTMP块流(Chunk Stream)发送时,应在块流ID 2上发送。用户控制消息在流中接收时有效;它们的时间戳被忽略。
客户端或服务器发送此消息以通知对等方用户控制事件。此消息包含事件类型和事件数据。
+------------------------------+-------------------------
| Event Type (16 bits) | Event Data
+------------------------------+-------------------------
Payload for the ‘User Control’ protocol message
消息数据的前2个字节用于标识事件类型。事件类型后跟事件数据。事件数据字段的大小是可变的。但是,在消息必须通过RTMP块流层的情况下,最大块的大小应足够大,以允许这些消息适合单个块。