-
C0,C1,C2,S0,S1,S2 的数据格式
-
C0 和 S0 的格式
C0 和 S0 包都是一个字节(8bit),表示版本号
Paste_Image.png在 C0 中,这一字段指示出客户端要求的 RTMP 版本号。在 S0 中,这一字段指示出服务器端选择的 RTMP 版本号。默认为 3。0、1、2 三个值是由早期其他产品使用的,是废弃值;4 - 31 被保留为 RTMP 协议的未来实现版本使用;32 - 255 不允许使用 (以区分开 RTMP 和其他常以一个可打印字符开始的文本协议)。无法识别客户端所请求版本号的服务器应该以版本 3 响应,(收到响应的) 客户端可以选择降低到版本 3,或者放弃握手。
-
C1 和 S1 的格式
C1 和 S1 数据包的长度都是 1536 字节,包含以下字段:
Paste_Image.pngTime (前四个字节):这个字段包含一个 timestamp,用于本终端发送的所有后续块的时间起点。这个值可以是 0,或者一些任意值。要同步多个块流,终端可以发送其他块流当前的 timestamp 的值。
Zero (紧跟着的四个字节):这个字段必须都是 0。
Random data (剩下的1528 个字节):这个字段可以包含任意值。终端需要区分出响应来自它发起的握手还是对端发起的握手,这个数据应该发送一些足够随机的数。简单点,就是随机数. -
C2 和 S2 的格式
C2 和 S2 数据包长度都是 1536 字节,基本就是 S1 和 C1 的副本 (分别),包含有以下字段:
Paste_Image.png- Time (前四个字节):这个字段必须包含终端在 S1 (给 C2) 或者 C1 (给 S2) 发的 timestamp.例如:C1的前四个字节为0,那么S2的前四个字节也是0.
- Time2 (紧跟着的四个字节):这个字段必须包含终端先前发出数据包 (s1 或者 c1) timestamp,例如,S1的前四个字节为 0x00 00 00 01,那么S2的第4~8字节就是0x 00 00 00 01
- Random echo (剩下1528 个字节):这个字段必须包含终端发的 S1 (给 C2) 或者 S2 (给 C1) 的随机数。两端都可以一起使用 time 和 time2 字段再加当前 timestamp 以快速估算带宽和/或者连接延迟,但这不太可能是有多大用处。
-
-
-
如果握手失败,服务器会终止响应,并断开socket连接
- 如果握手成功,则可以进入到下一个环节,可以开始交换消息了.
- 实际测试(用的SRS测的)发现,服务器端根本不鸟你,只要收到C1,后面就可能先发一部分,再发一部分(长度不定,不一定是上文所说的1536),也可能一次性全部给你,但是S0+S1+S2的总字节数(也就是3073个字节)是对的
文/iOSSinger(简书作者)
原文链接:http://www.jianshu.com/p/dc4884bd7908
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
rtmp simple handshake
最新推荐文章于 2024-06-12 08:24:32 发布