RTMP(Real-Time Messaging Protocol,即实时消息传输协议)

1.RTMP,默认使用TCP端口1935的明文协议。

3.RTMPE,使用Adobe私有安全机制加密的RTMP。

5.RTMPFP,使用UDP的RTMP,允许用户进行P2P连接。

将音视频及其他数据封装为RTMP Message发送,而在实际传输时会进一步将Message划分为带有Message ID的Chunk。每个Chunk可以携带一个Message。但更多情况下,一个Message将由多个Chunk承载,直到客户端接收后将其还原。Chunk Stream是基于RTMP Chunk的逻辑抽象,客户端将据此区分不同类型的数据并组织接收以及还原。

BasicHeader可被扩展一到两个字节[stream id(c)],Chunk Header则含有如Message长度等信息。

建立TCP连接后,RTMP协议会要求进行3个包的握手代表连接的建立,客户端发送一个代表协议版本号的0x03初始化连接,随后发送1536个字节(包括4个字节的时间戳消息、4个值为0的字节以及1528个随机生成的字节),服务器亦将发送0x03的版本消息、1536字节消息,客户端和服务器随后发送回声字节(本方及对方的时间戳对以及1528个随机字节),并在收到后确认连接的建立

实践中,由于只要满足了接收条件,即可建立RTMP连接,为减少交互次数,缩短连接建立时间,可以采用以下顺序:客户端发送C0和C1,服务端回复S0、S1和S2,客户端发送C2。

RTMP协议定义了一些特殊的值来表示控制消息

RTMP还定义了Command、Data、Audio、Video、Aggregate、Shared Object等多类消息,其中Command Message如下

RTMP协议支持Push和Pull两种模式,Pull即是普遍的客户端根据URL进行播放的方式,而Push基于RTMP的视频直播,其握手顺序和createStream步骤类似,由客户端使用Publish命令而非Play命令,发起自客户端到服务端的推送。