6 RTMP消息格式
本章描述RTMP消息遵循底层协议(比如RTMP块流)在网络中断之间传输时的消息格式。
虽然RTMP被设计成使用RTMP块流传输,但是它也可以使用其他传输协议来发送消息。RTMP块流协议和RTMP协议配合时,非常适合音视频应用,包括单播、一对多实时直播、视频点播和视频会议等。
6.1 RTMP消息格式
服务端和客户端通过在网络上发送RTMP消息实现之间的交互,消息包括但不限于音频、视频、数据。
RTMP消息包含两部分,1个消息头和有效负载
6.1.1 消息头
消息头包含以下信息:
- Message Type: 消息类型,占用1个字节。1-6的消息类型ID是为协议控制消息保留的。
- Length: 有效负载的字节数,占用3个字节。该字段是用大字节序表示的。
- Timestamp: 时间戳,占用4个字节,用大字节序表示。
- Message Stream Id: 消息流ID,标识消息所使用的流,用大字节序表示。
6.1.2 消息有效负载
消息的另一部分就是有效负载,也是消息包含的实际数据,可以是音频样本或者压缩的视频数据。负载的格式不再本文档的讨论范围之内。
6.2 用户控制消息(4
)
RTMP协议将消息类型4
作为用户控制消息ID,这些消息包含RTMP流所需的必要信息。消息类型1,2,3,5和6由RTMP块流协议使用。
用户控制消息应该使用ID为0的消息流(控制流),并且通过RTMP块流传输时使用ID为2的块流。用户控制消息收到后立即生效,它们的时间戳信息会被忽略。
客户端或服务端通过发送该消息告知对方用户控制事件。该消息携带事件类型和事件数据两部分。
开头的2个字节用于指定事件类型,紧跟着是事件数据。事件数据字段长度可变,但是如果用RTMP块流传输,则消息总长度不能超过最大块大小,以使消息可以使用一个单独的块进行传输。
事件类型和对应的事件数据格式,在7.1.7章节详细介绍。