RTMP协议


一、RTMP是什么?

RTMP是Real Time Messaging Protocol(实时消息传输协议)的首字母缩写。该协议基于TCP,是一个协议族,包括RTMP基本协议及RTMPT/RTMPS/RTMPE等多种变种。RTMP是一种设计用来进行实时数据通信的网络协议,主要用来在Flash/AIR平台和支持RTMP协议的流媒体/交互服务器之间进行音视频和数据通信。RTMP与HTTP一样,都属于TCP/IP四层模型的应用层。

二、RTMP与HLS比较

HLS
HLS 的基本原理就是当采集推流端将视频流推送到流媒体服务器时,服务器将收到的流信息每缓存一段时间就封包成一个新的 ts 文件,同时服务器会建立一个 m3u8 的索引文件来维护最新几个 ts 片段的索引。当播放端获取直播时,它是从 m3u8 索引文件获取最新的 ts 视频文件片段来播放,从而保证用户在任何时候连接进来时都会看到较新的内容,实现近似直播的体验。相对于常见的流媒体直播协议,例如 RTMP 协议、RTSP 协议等,HLS 最大的不同在于直播客户端获取到的并不是一个完整的数据流,而是连续的、短时长的媒体文件,客户端不断的下载并播放这些小文件。这种方式的理论最小延时为一个 ts 文件的时长,一般情况为 2-3 个 ts 文件的时长。HLS 的分段策略,基本上推荐是 10 秒一个分片,这就看出了 HLS 的缺点:
1.通常 HLS 直播延时会达到 20-30s,而高延时对于需要实时互动体验的直播来说是不可接受的。
2.HLS 基于短连接 HTTP,HTTP 是基于 TCP 的,这就意味着 HLS 需要不断地与服务器建立连接,TCP 每次建立连接时的三次握手、慢启动过程、断开连接时的四次挥手都会产生消耗。
不过 HLS 也有它的优点:
1.数据通过 HTTP 协议传输,所以采用 HLS 时不用考虑防火墙或者代理的问题。
2.使用短时长的分片文件来播放,客户端可以平滑的切换码率,以适应不同带宽条件下的播放。
3.HLS 是苹果推出的流媒体协议,在 iOS 平台上可以获得天然的支持,采用系统提供的 AVPlayer 就能直接播放,不用自己开发播放器。

RTMP
相对于 HLS 来说,采用 RTMP 协议时,从采集推流端到流媒体服务器再到播放端是一条数据流,因此在服务器不会有落地文件。这样 RTMP 相对来说就有这些优点:
1.延时较小,通常为 1-3s,参考播放器 如ijkplayer、毫秒级的播放器,可以参考大牛直播SDK的RTMP播放器。
2.基于 TCP 长连接,不需要多次建连。
因此业界大部分直播业务都会选择用 RTMP 作为流媒体协议。通常会将数据流封装成 FLV 通过 HTTP 提供出去。但是这样也有一些问题需要解决:
1.iOS 平台没有提供原生支持 RTMP 或 HTTP-FLV 的播放器,这就需要开发支持相关协议的播放器。

三、RTMP创建流的基本流程

基本流程:
1.socket建立连接
2.RTMP握手
3.建立RTMP连接
4.创建RTMP流

1. RTMP握手

RFC文档握手流程:
在这里插入图片描述
实际握手流程
在这里插入图片描述

2. 建立RTMP连接

交互滑动窗口大小;设置带宽
RFC文档连接流程:
在这里插入图片描述
实际连接流程
在这里插入图片描述

3. 创建RTMP流

在这里插入图片描述
如果有流要先释放掉
无实际作用flash communication
创建流
返回状态
在这里插入图片描述
推流过程
metadata中包含音视频的基本信息,如分辨率,采样大小等
在这里插入图片描述
拉流过程
在这里插入图片描述
RTMP处理流程:

  1. 首先,我们在RTMP连接之前,要创建 socket,通过socket建立tcp连接
  2. 在 tcp 上,创建 rtmp connection
  3. 然后rtmp 握手协议
  4. 握手结束,创建连接
  5. 创建结束,创建流
  6. 创建流结束,主播端,推送流,公众端,接受流 /拉流

四、RTMP消息结构

basic header(2bit fmt + 6bit data(2~63))必填,message header与extended timestamp可选
data = 0时 basic header为2字节,CSID范围为64到64+2的8次方;data = 1时,basic header为4字节,CSID范围为64+2的8次方到64+2的8次方+2的24次方;data为2~63时,basic header为1字节,data此时为chunk stream ID即CSID
Message header
当数据量大,需要拆分多个块传输时,第一个块的message header四个部分都是存在的,后面的块如果与前面块的streamID,TypeID等相同,则可以省略
Extended timestamp
三字节时间辍无法表示时,置为FFFFFF,则扩展时间辍存在
在这里插入图片描述
在这里插入图片描述
2:结束当前流,3:设置ack,从哪个ack开始确认,4:设置滑动窗口大小,5:设置传输带宽
15,18:AMF为flash的编码格式,data message一般为meta数据
17,20:创建流,推流,拉流都属于命令消息

RTMP的握手没有header和body

RTMP消息详解:https://www.jianshu.com/p/df987acf1246

五、RTMP与FLV协议关系

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值