从资料理解rtmp是一个实时通讯协议,紧张的变种功能如下:
1)RTMP事情在TCP之上,默认利用端口1935,这个是基本形态;
2)RTMPE在RTMP的根本上增加了加密功能;

3)RTMPT封装在HTTP要求之上,可穿透防火墙;
4)RTMPS类似RTMPT,增加了TLS/SSL的安全功能;
5)RTMFP利用UDP进行传输的RTMP;
虽然rtmp有很多变种,但实际在我们的直播运用中,常见的是原始的rtmp。rtmp协议中基本的数据单元称为(Message)。当rtmp协议在互联网中传输数据的时候,会被拆分成更小的单元,称为块(Chunk)。Rtmp的交互过程可以理解成独占的握手过程、掌握命令传输、音视频数据传输。
二、握手过程一个 RTMP 连接以握手开始。RTMP 的握手不同于其他协议;RTMP 握手由三个固定长度的块组成,而不是像其他协议一样的带有报头的可变长度的块。客户端 (发起连接要求的终端) 和做事器端各自发送相同的三块。便于演示,当发送自客户端时这些块被指定为 C0、C1 和 C2;当发送自做事器端时这些块分别被指定为 S0、S1 和 S2。以下是握手过程中通报的包格式先容:
RTMP握手以客户端发送 C0 和 C1 块开始,客户端必须吸收到 S1 才能发送 C2,客户端必须吸收到 S2 才能发送任何其他数据,做事器端必须吸收到 C0 才能发送 S0 和 S1,也可以等待吸收到 C1 再发送 S0 和 S1,做事器端必须吸收到 C1 才能发送 S2,做事器端必须吸收到 C2 才能发送任何其他数据。以下为RTMP的握手过程图先容:
规范哀求RTMP须要一个一个的发送握手包,但是实际上客户端发送C0+C1,做事端发送S0+S1+S2,再客户端在发送C2结束握手。
【文章福利】
三、数据包格式
RTMP协议中基本的数据单元称为(Message)。当RTMP协议在互联网中传输数据的时候,会被拆分成更小的单元,称为块(Chunk)。
3.1格式
头包含以下信息:
Message Type: 类型,占用1个字节。
Length: 有效负载的字节数,占用3个字节。该字段是用大字节序表示的。
Timestamp: 韶光戳,占用4个字节,用大字节序表示。
Message Stream Id: 流ID,标识所利用的流,用大字节序表示。
以下是类型的取值先容,没有描述的取值解释未利用:
以下是类型中的命令的类型先容:
3.2分块格式
握手之后,连接开始对一个或多个块流进行合并。创建的每个块都有一个唯一 ID 对其进行关联,这个 ID 叫做 chunk stream ID (块流 ID)。这些块通过网络进行传输。通报时,每个块必须被完备发送才可以发送下一块。在吸收端,这些块被根据块流 ID 被组装成。
分块许可上层协议将大的分解为更小的,例如,防止体历年夜的但优先级小的 (比如视频) 阻碍体积较小但优先级高的 (比如音频或者掌握命令)。分块还能降落发送的开销,它在块头中包含了压缩的原来须要在中所包含的信息。
块由块头和数据组成,块头包含3部分:基本头、头和扩展韶光戳,以下是各部分的先容:
块的基本头包含块流ID和块类型(下面的fmt字段)。块类型代表了编码过的头的格式。此字段根据块流ID的不同,长度可能为1,2或3字节。在实现协议时,此字段该当利用可以容纳ID的最小长度。此协议支持最多65597个流,ID从3到65599。0,1,2这三个为保留ID。当块的基本头长度为2字节时,第3-8比特取值为0。当长度为3字节时,第3-8比特取值为1。块流ID为2时保留作为低级协议的掌握和命令。以下是基本头的每个占位先容:
3.3分块例子
四、交互过程4.1推流!
4.2拉流五、实践不雅观察5.1rtmp推拉流环境搭建参考视频协议学习--HLS的环境支配
5.2rtmp推拉流抓包5.2.1紧张的推流包先容
5.2.2紧张的拉流包先容
拉流的其他流程与推流类似:
六、总结展望
RTMP的粗略整理基本完毕,对自己来说的有了一定的认识,再细一点的研究须要真正做个demo可能会有深的理解。