RTMP协议01 ---- 握手

简介

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之后才能发送其他信息(控制信息和真实⾳视频等数据) 

理论上是安装如下所图发送:

 实际上,为了减少发送次数,一般是这样的,如下图:

从以上可看出握手的实际流程为三个步骤:

  1. Client -> Server:C0+C1
  2. Server -> Client:S0+S1+S2
  3. Client -> Server:C2

第一次握手:

 

C0: 就一个字节,表示客户端的版本号

C1:1536个字节,结构如下

 

 第二次握手:

 

S0:一个字节,表示服务端的版本号

S1:1536个字节,可以看出,S1和C1相同

S2:1536个字节,结构如下:

 

  第三次握手:

 

C2:1536个字节,可以看出C2和S2相同

 

posted @ 2020-12-15 23:32  Vzf  阅读(213)  评论(0编辑  收藏  举报