RTMP协议解析

RTMP(Real Time Message Protocol)是一种由Adobe公司提出的应用层协议,主要用于实时音视频数据的传输。RTMP协议的主要有以下特点:

1. 多路复用:RTMP允许多个音视频数据流在单个TCP连接上进行传输。
2. 分包传输:数据被分割成小的数据包进行传输,以优化网络传输效率。
3. 时间信息:RTMP传输的数据包含时间戳,确保数据可以按正确的顺序和时间播放。
4. 优先级设置:不同类型的消息可以被赋予不同的优先级,以在带宽受限时合理分配传输资源。
5. 低延迟:RTMP设计上注重低延迟,适合实时通讯和直播应用。
6. 音视频同步:RTMP支持音视频数据的同步传输,保证播放时的音视频同步性。
7. 常用于直播:由于其对实时性和同步性的支持,RTMP成为直播领域中推流上行链路的常用协议。

RTMP协议在实时音视频传输领域,尤其是直播推流方面,因其高效和低延迟的特性而被广泛采用。

在发送端:把数据封装成消息,消息分割成块,再把块通过TCP协议发送到网络传输出去

设计原则

1. 分块

把大的消息分割成小的块,通过网络来传输,这是rtmp能降低延迟的核心原因。

2. 多路复用

把数据分割成块之后,传输通道就不需要区分是音频数据还是视频数据,这样音视频数据就能在同一个流中进行传输,实现了多路复用。

3.优先级

块没有优先级,但是消息由优先级。网络传输能力受限制时,优先级用来控制消息在网络底层的排队顺序。控制消息包括用户控制消息和协议控制消息。分块时将大的消息分割成小块,避免大的低优先级消息堵塞了发送缓冲从而阻塞了小的高优先级消息。

4. 块大小协商

RTMP 发送端,在将消息(Message)切割成块(Chunk)的过程中,是以 Chunk Size(默认值 128 字节)为基准进行切割的。块越大发送越慢CPU负载越小,块越小,发送越快CPU负载越大。Chunk Size 是可以根据实际情况进行改变的,即通过发送控制命令 Set Chunk Size 的方式进行更新。

消息类型

1. 协议控制消息

设置块大小消息:Message Type为 1。块大小范围是1~128字节。

中止消息:Message Type为 2。该消息用来通知对端中止接收块流数据。对于接收了部分的消息会被立刻丢弃

确认消息:Message Type为 3。客户端或服务器必须(MUST)在收到字节数等于窗口大小(window size)后向对方向发送确认消息。窗口大小是发送者 在收到确认消息前能发送出去的最大字节数。

窗口大小消息:Message Type为 5。客户端或服务器发送这个消息来告诉对方自己的窗口大小。

设置对端带宽消息:Message Type为 6。客户端或服务器发送这个消息去限制对端的输出带宽。

2. 用户控制消息

接收方从流中接收到用户控制消息时,应该立刻生效,无视时间戳。

流开始:当RTMP客户端连接到服务器并准备好接收数据时,服务器可能会发送此消息

流结束:当服务器停止发送数据或客户端请求断开连接时,可能会发送此消息

流枯竭:这个消息通常用于通知客户端当前流没有更多数据可发送,但流并未结束

设置缓冲区大小:告诉客户端应该预留多少字节的空间作为缓冲区,以便在数据到达之前存储数据。

ping请求:测量延迟,以及客户端或者服务器是否在线

ping响应:作为ping请求的相应

这是一条吃饭博客,由挨踢零声赞助。学C/C++就找挨踢零声,加入挨踢零声,面试不挨踢!

  • 9
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值