RTMP Handshake(握手协议)

RTMP流播放的流程首先要进行握手操作,才能进行后续的connect和createStream等操作, 本文简单阐述握手基础知识.

Handshake Diagram

**Handshake Diagram in Adobe’s Real Time Messaging Protocol**

wireshark分析握手基本流程

用wireshark对rtmp的包进行抓包分析:


rtmp点播流程

可以看到前三个报文是握手协议:

握手协议

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

  1. Client -> Server
    C0+C1
  2. Server -> Client
    S0+S1+S2
  3. Client -> Server
    C2
    可以看出握手的起点是Client(RMTP播放器)发送C0+C1, 结束是Server收到Client的C2.
    其中C0 C1 C2 S0 S1 S2的大小都是固定的.
    C2 S2属于用于确认(Ack)的包
Step 1: C0 + C1

C0 + C1一起发送.
其中C0一个字节, 固定为03.
C11536个字节.
数据包总长度为:
1 + 1536 = 1537

In C0, this field identifies the RTMP version requested by the client.
In S0, this field identifies the RTMP version selected by the server.
The version defined by this specification is 3.
0-2 are deprecated values used by earlier proprietary products;
4-31 are reserved for future implementations;
32-255 are not allowed (to allow distinguishing RTMP from text-based protocols, which always start with a printable character).

C0
C1
Step 2: S0+S1+S2

S0+S1+S2一起发送.
S0为1个字节,固定为03.
S1S2都为1536个字节.
整个数据包总长度为:
1 + 1536 + 1536 = 3073

S0
S1
S2
Step 3: C2

C2为1536个字节.
RTMP Server接收到C2意味着握手成功结束.

C2

References:

rtmp_specification_1.0.pdf

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 作者原创,转载请联系作者 RTMP简介 Real Time Messaging Protocol(实时消息传送协议...
    Alfie20阅读 1,405评论 0 4
  • 实时消息协议---流的分块 版权声明: 版权(c)2009 Adobe系统有限公司。全权所有。 摘要: 本备忘录描...
    一个人zy阅读 1,951评论 0 9
  • 个人翻译,转载请注明出处,谢谢! Adobe's Real Time Messaging Protocol 摘要 ...
    SniperPan阅读 2,801评论 1 17
  • 很多初学者就是看了恶心的握手就再也没有研究的兴趣了,不过,弄懂了就感觉没什么了.socket建立连接以后,就需要认...
    youngyunxing阅读 3,033评论 0 5
  • 讲真,虽然是日本著名作家川端康成的最高代表作,但于我看来也没有太大的吸引力。书中对雪国的自然描写却真是美妙不可言...
    庭深几许阅读 450评论 0 0