一、摘要(Abstract)
本备忘录描述了Adobe的实时消息协议( Real Time Messaging Protocol)(RTMP),这是一种应用程序级协议,旨在通过适当的传输协议(如TCP)对多媒体传输流(如音频、视频和交互式内容[interactive content])进行多路复用和打包(multiplexing and packetizing)。
二、导论(Introduction)
??
三、术语(Terminology)
关键词“必须”、“不得”、“必须”、“应”、“不得”,“应该”、“不应该”、“推荐”、“不推荐”、“可以”和本备忘录中的“可选”应解释为[RFC2119]。
四、定义(Definitions)
???
(1)有效载荷:数据包中包含的数据,例如音频样本或压缩视频数据。有效载荷格式和解释超出了本文件的范围。
(2)数据包:数据包由固定报头和有效负载数据组成。一些底层协议可能需要定义数据包的封装。
五、字节顺序、对齐方式和时间格式(Byte Order, Alignment, and Time Format)
???
1)所有整数字段均按网络字节顺序进行,字节0是显示的第一个字节,位0是字或字段中的最高有效位。这种字节顺序通常称为big-endian。互联网协议[RFC0791]中详细描述了传输顺序。除非另有说明,本文件中的数值常量为十进制(以10为基数)。
2)除非另有规定,RTMP中的所有数据都是字节对齐的;例如,16位字段可能处于奇数字节偏移。在指示填充的位置,填充字节的值应为零。
3)RTMP中的时间戳是相对于未指定历元的整数毫秒数。通常,每个流将以0的时间戳开始,但这不是必需的,只要两个端点在历元上一致。请注意,这意味着跨多个流(特别是来自不同主机的流)的任何同步都需要RTMP之外的其他机制。
4)因为时间戳是32位长,所以它们每49天17小时2分钟47.296秒滚动一次。由于允许流连续运行,可能会连续运行数年,因此RTMP应用程序在处理时间戳时应该使用序列号算法[RFC1982],并且应该能够处理环绕。例如,应用程序假定所有相邻的时间戳彼此之间的间隔在2^31-1毫秒之内,因此10000在4000000000之后,30000000000在4000000000之前。
5)时间戳增量也指定为相对于上一个时间戳的无符号整数毫秒数。时间戳增量可以是24位或32位长。
六、消息交换示例(Message Exchange Examples)
???
下面是几个例子来解释使用RTMP进行消息交换。
(1)发布录制的视频【Publish Recorded Video】
此示例说明了发布者如何发布流,然后将视频流传输到服务器。其他客户端可以订阅此已发布流并播放视频。
名词 | 解释 |
---|---|
Publisher Client | 发布(至服务器的)客户端 |
Server | 服务器 |
Handshaking Done | **【阶段1】**握手完毕 |
Connect | **【阶段2】**连接 |
Command Message(connect) | 命令消息(连接) |
Window Acknowledge Size | 窗口确认大小 |
Set Peer BandWidth | 设置对等带宽 |
Window Acknowledge Size | 窗口确认大小 |
User Control(StreamBegin) | 用户控制(StreamBegin) |
Command Message _result- connect response | 命令消息 _结果-连接响应 |
CreateStream | **【阶段3】**CreateStream |
Command Message(createStream) | 命令消息(createStream) |
Command Message (_result- createStream response) | 命令消息 (_结果-createStream响应) |
Publishing Content | **【阶段4】**发布内容 |
Command Message(publish) | 命令消息(发布) |
User Control(StreamBegin) | 用户控制(StreamBegin) |
Data Message (Metadata) | 数据消息(元数据) |
Audio Data | 音频数据 |
SetChunkSize | 设置块大小 |
Command Message (_result- publish result) | 命令消息 (_结果-发布结果) |
Video Data | 视频数据 |
Until the stream is complete | 直到流完成 |
Message flow in publishing a video stream | 发布视频流中的消息流 |
(2)广播共享对象消息【Broadcast a Shared Object Message】
此示例演示了在创建和更改共享对象期间交换的消息。它还说明了共享对象消息广播的过程。
(3)Publish Metadata from Recorded Stream【Publish Metadata from Recorded Stream】
此示例描述了发布元数据的消息交换。