RTMP协议

2021-04-22  本文已影响0人  waiwaaa

一、概念与摘要

RTMP协议从属于应用层,被设计用来在适合的传输协议(如TCP)上复用和打包多媒体传输流(如音
频、视频和互动内容)。RTMP提供了一套全双工的可靠的多路复用消息服务,类似于TCP协议
[RFC0793],用来在一对结点之间并行传输带时间戳的音频流,视频流,数据流。通常情况下,不同类
型的消息会被分配不同的优先级,当网络传输能力受限时,优先级用来控制消息在网络底层的排队顺
序。

二、RTMP块流

实时消息传递协议块流(RTMP块流)。它作为一款高级多媒体流协议提供了流的多路复用和打包服务。
RTMP块流被设计用来传输实时消息协议,它可以使用任何协议来发送消息流。每个消息都包含时间戳和有效类型标识。RTMP块流和RTMP适用于各种视听传播的应用程序,包括一对一的,和一对多的视频直播、点播服务、互动会议应用程序。
当使用一个可靠的传输协议如TCP[RFC0793]时,RTMP块流提供了一种可以在多个流中,基于时间戳的端到端交付所有消息的方法。RTMP块流不提供任何优先级或类似形式的控制,但可以使用更高级别的协议来提供这样的优先级。例如,一个视频服务器可以根据发送的时间或确认每个消息的时间,来决定为一个网络差的用户丢弃视频信息,以确保音频信息的及时接收。RTMP块流不仅包含了自己的协议控制信息,同时也提供了一个更高级别的协议机制,用来嵌入用户控
制信息。

消息格式

消息格式可以被分割成多个块,用来在更高的协议中支持多路复用。在创建块消息格式时,应该包含以下字段:

握手

RTMP连接从握手开始。它包含三个固定大小的块,不像其他的协议,是由头部大小可变的块组成的。
客户端(初始化连接的一端)和服务端发送同样的三个块。为了方便描述,客户端发送的三个块命名为C0,C1,C2;服务端发送的三个块命名为S0,S1,S2。

握手序列

客户端通过发送C0和C1消息来启动握手过程。客户端必须接收到S1消息,然后发送C2消息。客户端必须接收到S2消息,然后发送其他数据。
服务端必须接收到C0或者C1消息,然后发送S0和S1消息。服务端必须接收到C1消息,然后发送S2消息。服务端必须接收到C2消息,然后发送其他数据。

C0和S0格式

C0和S0包由一个字节组成,下面是C0/S0包内的字段:

    +-+-+-+-+-+-+-+-+-+-+-+
    |  version (1 bytes)  |
    +-+-+-+-+-+-+-+-+-+-+-+

C1和S1格式

C1和S1包长度为1536字节,包含以下字段:

    +-+-+-+-+-+-+-+-+-+-+
    |   time (4 bytes)  |
    +-+-+-+-+-+-+-+-+-+-+
    |   zero (4 bytes)  |
    +-+-+-+-+-+-+-+-+-+-+
    |   random bytes    |
    +-+-+-+-+-+-+-+-+-+-+
    |   random bytes    |
    |      (cont)       |
    |       ....        |
    +-+-+-+-+-+-+-+-+-+-+

C2和S2格式

C2和S2包长度为1536字节,作为C1和S1的回应,包含以下字段:

    +-+-+-+-+-+-+-+-+-+-+
    |   time (4 bytes)  |
    +-+-+-+-+-+-+-+-+-+-+
    |  time2 (4 bytes)  |
    +-+-+-+-+-+-+-+-+-+-+
    |   random bytes    |
    +-+-+-+-+-+-+-+-+-+-+
    |   random bytes    |
    |      (cont)       |
    |       ....        |
    +-+-+-+-+-+-+-+-+-+-+

三、RMTP握手

+-------------+                           +-------------+
|    Client   |       TCP/IP Network      |    Server   |
+-------------+            |              +-------------+
     |                    |                     |
Uninitialized              |               Uninitialized
     |          C0        |                     |
     |------------------->|         C0          |
     |                    |-------------------->|
     |          C1        |                     |
     |------------------->|         S0          |
     |                    |<--------------------|
     |                    |         S1          |
Version Sent              |<--------------------|
     |          S0        |                     |
     |<-------------------|                     |
     |          S1        |                     |
     |<-------------------|                Version Sent
     |                    |         C1          |
     |                    |-------------------->|
     |          C2        |                     |
     |------------------->|         S2          |
     |                    |<--------------------|
  AckSSent                |                  Ack Sent
     |          S2        |                     |
     |<-------------------|                     |
     |                    |         C2          |
     |                    |-------------------->|
Handshake Done            |               Handshake Done
     |                    |                     |
         Pictorial Representation Of Handshake

下面是握手示意图中提到的状态:

图形结构来源RTMP协议(二)握手流程

上一篇 下一篇

猜你喜欢

热点阅读