1、简介
Real Time Messaging Protocol(实时消息传输协议)。该协议基于TCP,是一个协议族,包括RTMP基本协议及RTMPT/RTMPS/RTMPE等多种变种。RTMP是一种设计用来进行实时数据通信的网络协议,主要用来在Flash/AIR平台和支持RTMP协议的流媒体/交互服务器之间进行音视频和数据通信。
2、多种变种
- a、RTMP工作在TCP之上,默认使用端口1935;
- b、RTMPE在RTMP的基础上增加了加密功能;
- c、RTMPT封装在HTTP请求之上,可穿透防火墙;
- d、RTMPS类似RTMPT,增加了TLS/SSL的安全功能;
3、流媒体播放的前提
- a、建立一个网络连接(NetConnection):服务器和客户端之间只能建立一个网络连接,但是基于该连接可以创建很多网络流。
- b、建立一个网络流(NetStream):网络流就是发送多媒体数据的通道。
4、流程
播放一个RTMP协议的流媒体需要经过以下几个步骤:握手,建立连接,建立流,播放。RTMP连接都是以握手作为开始的。建立连接阶段用于建立客户端与服务器之间的“网络连接”;建立流阶段用于建立客户端与服务器之间的“网络流”;播放阶段用于传输视音频数据。
(1)握手(HandShake)
一个RTMP连接以握手开始,双方分别发送大小固定的三个数据块。
- a、 握手开始于客户端发送C0、C1块。服务器收到C0或C1后发送S0和S1。
- b、当客户端收齐S0和S1后,开始发送C2。当服务器收齐C0和C1后,开始发送S2。
- c、当客户端和服务器分别收到S2和C2后,握手完成。
(2)建立网络连接(NetConnection)
- a、客户端发送命令消息中的“连接”(connect)到服务器,请求与一个服务应用实例建立连接。
- b、服务器接收到连接命令消息后,发送确认窗口大小(Window Acknowledgement Size)协议消息到客户端,同时连接到连接命令中提到的应用程序。、
- c、服务器发送设置带宽协议消息到客户端。
- d、客户端处理设置带宽协议消息后,发送确认窗口大小(Window Acknowledgement Size)协议消息到服务器端。
- e、服务器发送用户控制消息中的“流开始”(Stream Begin)消息到客户端。
- f、服务器发送命令消息中的“结果”(_result),通知客户端连接的状态。
(3)建立网络流(NetStream)
- a、客户端发送命令消息中的“创建流”(createStream)命令到服务器端。
- b、服务器端接收到“创建流”命令后,发送命令消息中的“结果”(_result),通知客户端流的状态。
(4)播放(Play)
- a、客户端发送命令消息中的“播放”(play)命令到服务器。
- b、接收到播放命令后,服务器发送设置块大小(ChunkSize)协议消息。
- c、服务器发送用户控制消息中的“streambegin”,告知客户端流ID。
- d、 播放命令成功的话,服务器发送命令消息中的“响应状态” NetStream.Play.Start & NetStream.Play.reset,告知客户端“播放”命令执行成功。
- e、在此之后服务器发送客户端要播放的音频和视频数据。