既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上物联网嵌入式知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新
| S0 | |
|<-------------------| |
| S1 | |
|<-------------------| Version sent
| | C1 |
| |-------------------->|
| C2 | |
|------------------->| S2 |
| |<--------------------|
Ack sent | Ack Sent
| S2 | |
|<-------------------| |
| | C2 |
| |-------------------->|
Handshake Done | Handshake Done
| | |
Pictorial Representation of Handshake
握手开始于客户端发送`C0`、`C1`块。服务器收到`C0`或`C1`后发送`S0`和`S1`。
当客户端收齐`S0`和`S1`后,开始发送`C2`。当服务器收齐`C0`和`C1`后,开始发送`S2`。
当客户端和服务器分别收到`S2`和`C2`后,握手完成。
**注意事项:** 在实际工程应用中,一般是客户端先将`C0`, `C1`块同时发出,服务器在收到`C1` 之后同时将`S0`, `S1`, `S2`发给客户端。`S2`的内容就是收到的`C1`块的内容。之后客户端收到`S1`块,并原样返回给服务器,简单握手完成。按照RTMP协议个要求,客户端需要校验`C1`块的内容和`S2`块的内容是否相同,相同的话才彻底完成握手过程,实际编写程序用一般都不去做校验。
RTMP握手的这个过程就是完成了两件事:
校验客户端和服务器端RTMP协议版本号
是发了一堆随机数据,校验网络状况。
#### **3**. RTMP 消息
RTMP消息格式:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±+
| Message Type | Payload length |
| (1 byte) | (3 bytes) |
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±+
| Timestamp |
| (4 bytes) |
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±+
| Stream ID |
| (3 bytes) |
±±±±±±±±±±±±±±±±±±±±±±±±+
Message Header
• 1字节消息类型
• 3字节负载消息长度
• 4字节时间戳
• 3字节 `Stream ID`,区分消息流
**注意事项:** 实际RTMP通信中并未按照上述格式去发送RTMP消息,而是将RTMP 消息分块发送,之后将介绍RTMP消息分块。
#### **3.1**. RTMP 消息分块(chunking)
而对于基于`TCP`的`RTMP`协议而言,协议显得特别繁琐,但是有没有更好的替代方案。同时创建`RTMP`消息分块是比较复杂的地方,涉及到了`AFM`(也是`Adobe`家的东西)格式数据的数据。
#### **RTMP消息