一、背景
实时消息传输协议(Real-Time Messaging Protocol)是目前直播的主要协议,是Adobe公司为Flash播放器和服务器之间提供音视频数据传输服务而设计的应用层私有协议。RTMP协议是目前各大云厂商直线直播业务所公用的基本直播推拉流协议,随着国内直播行业的发展和5G时代的到来,对RTMP协议有基本的了解,也是我们程序员必须要掌握的基本技能。
二、RTMP协议特点
RTMP协议主要的特点有:多路复用,分包和应用层协议。
三、协议结构
- basic header记录了该包属于哪个流以及包类型,其中拥有两个字段fmt与csid
- message header携带了当前包中的唯一id与消息长度、消息类型、发送时间等信息
- extended timestamp是拓展时间戳,由于message header的发送时间占3个字节,存在时间大到无法用3个字节来表示,需要借助扩展时间戳
- chunk data里装载了真正有业务含义的数据
四、握手
- 未初始化:客户端和服务端无任何交流阶段;
- 发送版本号:发送了 C0 或者 S0;
- 发送 ACK:发送了 C2 或者 S2;
- 握手完成:接收到了 S2 或者 C2。
五、连接
- 客户端告诉服务端,我想要设置 chunk size 的大小为多大;
- 客户端告诉服务端,我想要连接什么应用;
- 服务端响应客户端的连接请求,确定窗口大小,带宽大小和 chunk size,以及返回 “_result” 表示响应成功。这些都是通过一个 TCP 包来完成的。
建立连接之后就可以进行推拉流了