简介
RTMP协议是Real Time Message Protocol(实时信息传输协议)的缩写,它是由Adobe公司提出的一种应用层的协议,用来解决多媒体数据传输流的多路复用(Multiplexing)和分包(packetizing)的问题。
RTMP消息块流和RTMP一起适用于多样性音视频应用程序,从一对一和一对 多向视频点播服务器直接广播到交互式会议应用程序。
RTMP协议是应用层协议,是要靠底层可靠的传输层协议(通常是TCP)来保证信息传输的可靠性的。在基于传输层协议的链接建立完成后,RTMP协议也要客户端和服务器通过“握手”来建立基于传输层链接之上的RTMP Connection链接。
握手
要建⽴⼀个有效的RTMP Connection链接,⾸先要“握⼿”:客户端要向服务器发送C0,C1,C2(按序)三个chunk,服务器向客户端发送S0,S1,S2(按序)三个chunk,然后才能进⾏有效的信息传输。RTMP协议
本身并没有规定这6个Message的具体传输顺序,但RTMP协议的实现者需要保证这⼏点:
- 客户端要等收到S1之后才能发送C2
- 客户端要等收到S2之后才能发送其他信息(控制信息和真实⾳视频等数据)
- 服务端要等到收到C0之后发送S1
- 服务端必须等到收到C1之后才能发送S2
- 服务端必须等到收到C2之后才能发送其他信息(控制信息和真实⾳视频等数据)
理论上是安装如下所图发送:
实际上,为了减少发送次数,一般是这样的,如下图:
从以上可看出握手的实际流程为三个步骤:
- Client -> Server:C0+C1
- Server -> Client:S0+S1+S2
- Client -> Server:C2
第一次握手:
C0: 就一个字节,表示客户端的版本号
C1:1536个字节,结构如下
第二次握手:
S0:一个字节,表示服务端的版本号
S1:1536个字节,可以看出,S1和C1相同
S2:1536个字节,结构如下:
第三次握手:
C2:1536个字节,可以看出C2和S2相同