消息
- 消息 (Message) 是 Rtmp 协议中的基本数据单元,但在实际传输过程中消息会以更小的消息块(Message Stream Chunk)单元进行传输
- Rtmp 协议规定了多种消息类型,每种消息类型对应一个类型编号 (Message Type ID),其中 1-6 用于协议控制,8-9 用于音视频数据,15-20 用于发送AMF编码的命令,负责用户与服务器之间的交互,比如 Connect, Play, Pause 等消息
消息格式
- 消息由消息首部和消息内容两部分组成
- 消息首部又由四部分组成:标识消息类型的 Message Type ID,标识消息长度的 Payload Length,标识时间戳的 Timestamp,标识消息所属媒体流的 Stream ID。消息的报文结构如下图所示。
Message Type ID |
Payload Length |
Timestamp |
Stream ID |
1 byte |
3 bytes |
4 bytes |
3 bytes |
消息块格式
- 消息块也是由消息块首部和消息块内容两部分组成
- 消息块首部由三部分组成:Chunk Basice Header, Chunk Message Header, Extended Timestamp
Chunk Basic Header |
Chunk Message Header |
Extended Timestamp |
1-3 byte |
0 or 3 or 5 or 11 bytes |
0 or 4 bytes |
- Rtmp 协议这样设计的目的是为了减少实际传输的数据大小,具体情况需要查看 Rtmp 协议文档
客户端播放过程
- 客户端播放过程主要包括 Dial(tcp 的三次握手),Handshake(客户端与服务端的三次握手),Connect(发送 Connect 命令), CreateStream(建立网络流),Play(在网络流上传输数据)
参考