理解RTMP协议——chunk格式

本文梳理了理解RTMP协议的基本概念
访问我的博客了解更多

RTMP 的 message 与 chunk

message 是 RTMP 中的 M,是消息的单位

RTMP Message Header
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  
    | Message Type| Payload length|  
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  
    |       Timestamp             |  
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  
    |       Stream ID       |  
    +-+-+-+-+-+-+-+-+-+-+-+-+
  • Message Type(1 byte),消息类型很重要,它代表了这个消息是什么类型,当写程序的时候需要根据不同的消息,做不同的处理。
  • Payload length(3 bytes),表示负载的长度(big-endian 格式)
  • Timestamp (4 bytes),时间戳(big-endian 格式),超过最大值后会翻转
  • Stream ID (3 bytes) ,消息流ID(big-endian 格式),用于区分不同流的消息。
  • Message Payload,真实的数据

message 的类型

消息主要分为三类: 协议控制消息、数据消息、命令消息等

  • 协议控制消息

    • Message Type ID = 1~6,主要用于协议内的控制
  • 数据消息

    • Message Type ID = 8 9 18
      • 8: Audio 音频数据
      • 9: Video 视频数据
      • 18: Metadata 包括音视频编码、视频宽高等信息。
  • 命令消息 Command Message (20, 17)

    • 此类型消息主要有 NetConnection 和 NetStream 两个类,两个类分别有多个函数,该消息的调用,可理解为远程函数调用。

更多的了解见 Adobe’s Real Time Messaging Protocol 的 5.4 章节

Chunk —— 网络中实际发送的内容

rtmp 的 message 会切分为 n 个 chunk,再通过 tcp 协议传输

为什么 rtmp 基于 tcp 协议,tcp 协议已经有化整为零的方式, rtmp 还需要将 message 划分更小的单元 chunk 呢?

分析原因:

  • tcp 协议划分一个个 tcp 报文,是为了在网络传输层上保障数据连续性,丢包重发等特性
  • rtmp 划分 chunk 消息快,是为了在网络应用层上实现低延迟的特性,防止大的数据块(如视频数据)阻塞小的数据块(如音频数据或控制信息)
RTMP 的 chunk 设计思想

在互联网中传输数据时, 消息(Message)会被拆分成更小的单元, 称为消息块(Chunk)。RTMP Chunk Stream 层级允许在Message stream 层次,将大消息切割成小消息,这样可以避免大的低优先级的消息(如视频消息)阻塞小的高优先级的消息(如音频消息或控制消息)。

重复强调,RTMP 是设计用来多路复用的特点,传输内容有视频、音频、控制命令。其中一个非常重要的概念是 multiplexing (复用)

不同类型的消息会被分配不同的优先级,当网络传输能力受限时,优先级用来控制消息在网络底层的排队顺序。

比如当客户端网络不佳时,流媒体服务器可能会选择丢弃视频消息,以保证音频消息可及时送达客户端。

Chunk 的大小设置,通过 Message Type = 1 的控制消息声明

如果 message length 大于 max chunk size,则需要将这个message切分为多个 chunk 。前面几个 chunk size 必须是 max size,最后一个就是剩余的大小。

以上图为例,Message大小为 300 bytes,默认Chunk size 为 128 bytes,进行拆分成chunk的过程。

接下来,探寻 chunk 的结构

RTMP Chunk Header
    +-------------+----------------+-------------------+-----------+  
    | Basic header|Chunk Msg Header|Extended Time Stamp|Chunk Data |  
  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值