流媒体:RTMP 协议完全解析

  • 背景

RTMP(Real Time Messaging Protocol) 是由 Adobe 公司基于 Flash Player 播放器对应的音视频 flv 封装格式提出的一种,基于TCP 的数据传输协议。本身具有稳定、兼容性强、高穿透的特点。常被应用于流媒体直播、点播等场景。常用于推推流方(主播)的稳定传输需求。

1、RTMP 的传输:消息块 & 消息封包传输

RTMP 协议为了维持稳定连续传递,避免单次传输数据量问题,采用了传输层封包,数据流切片的实现形式。被用来对当前带宽进行划分和复用的最小传输单位,被称为 Chunk 即消息块。通常情况下,一个有效的消息,如果数据量超出当前 Chunk Size 的话,则会被拆分成多个分块来分批传输。通过指定首个 Chunk 和后续 Chunk 类型,以及 Chunk Header 其他标志性数据,来使当前被切割的消息,能够在对端得到有效的还原和执行。我们以 MetaData 类型消息(Data AFM3 16)举例:

图1-1 一则有效消息拆分发送示意图

例子 中用来作为演示的 MetaData 高达 400 Bytes(不会吧?不会吧?不会吧?),而我们用 RTMP 的默认 Chunk Size 为 128 bytes。因此,当我们使用 Message Type 为 16 的 Data AFM3 类型的数据消息,通知对端当前元数据信息的时候,就需要切片了。即如图1-1 所示。

2、RTMP 的传输:消息块的组成

想要了解 RTMP 则必须对其使用的网络传输数据封装格式有一定的了解。RTMP 协议是以分组形式传送数据包。一个完整的数据块包含两个部分:Chunk Header 和 Chunk Data,这两者组合在一起,构成了一个有效的消息类型,结构如下:

图2-1 完整消息块

基础数据头(Basic Header):保存 CS ID、Chunk Type(决定 Msg Header 类型) 消息数据头(Message Header):包含被发送消息的相关信息,类型Chunk Type决定 扩展时间戳(Extended Timestamp)(32-bits):消息头携带的时间戳扩展位

2.1基础数据头

基础数据头,Chunk stream ID 可以配置为3~65599 这 65597 个不同标志中的其中一种。根据持有 Chunk stream ID 的长度,RTMP 规格将基础数据头分为3种:ID 在 2~63 范围内的 1-Byte 版;ID 在 64~319 范围内的 2-Byte 版;ID 在 64~65599 范围内的 3-Byte 版。基础数据头组成,也包含三个部分。

图3-1 Basic Header 0~3 Byte

format message type 标志位 fmt(2-bits):用来标志消息类型,也被称为 Chunk Type cs id 字段(6-bits):用来表示 63 以内的ID的标志位,0、1两个标记被占用做扩展标记cs id - 64字段(8 or 16-bits):用来根据扩展标志扩充的,广范围标志位

需要注意的是,Chunk stream

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值