RTMP协议播放流程实现分析

前言

实时流协议(Real-TimeMessaging Protocol,RTMP)是用于互联网上传输视音频数据的网络协议。本API提供了支持RTMP, RTMPT,RTMPE, RTMP RTMPS以及以上几种协议的变种(RTMPTE, RTMPTS)协议所需的大部分客户端功能以及少量的服务器功能。RTMP是目前各种网络直播应用最核心的传输协议,也是互动直播采用最广泛的协议。

RTMP协议规定:播放流媒体有两个前提步骤:

1、建立网络连接(NetConnection)

2、建立网络流(NetStream)

注:其中,网络连接代表服务器端应用程序和客户端直接的基础的联通关系。网络流代表了发送多媒体数据的通道。

服务器和客户端之间只能建立一个网络连接,但是基于该连接可以创建很多网络流。播放一个RTMP协议的流媒体需要经过以下几个步骤:握手,建立连接,建立流,播放。RTMP连接都是以握手作为开始的。建立连接阶段用于建立客户端与服务器之间的“网络连接”;建立流阶段用于建立客户端与服务器之间的“网络流”;播放阶段用于传输视音频数据。

一、RTMP

使用librtmp接收RTMP流的函数执行流程图

 

二、RTMP协议播放流程抓包分析

1tcpdumpRTMP

 

 

2、握手(Handshake)

一个RTMP连接以握手开始

 

1、RTMP协议是TCP协议的上层协议,所以必须建立TCP连接,即有TCP的三次握手

2、客户端向服务器发送C0(chunks)+C1块,告诉服务器发送的版本

3、服务器发送S0+S1+S2

4、客户端接收到后,发送C2,握手完成

 

 

3、建立网络连接

网络连接代表服务器应用程序和客户端直接基础的联通关系

 

RTMP握手完成后,要建立网络连接。大家都知道一个普通的标准的rtmp流是什么样子的?

rtmp://IP:PORT/APP/Stream 是不是这样?

 

1.客户端在发送C2的时候,顺带还发了一个请求连接的命令,要求与服务器应用建立网络连接,这就是RTMP URL中的的Application。

2.服务器在收到客户端发送的连接请求后发送如下信息:

主要是告诉客户端确认窗口大小,设置节点带宽,然后服务器把“连接”连接到指定的应用并返回结果,“网络连接成功”。并且返回流开始的的消息(Stream Begin 0)。

3.客户端在收到服务器发来的消息后,返回确认窗口大小,此时网络连接创建完成。

协议流程图

4、建立一个网络流

提示:网络流代表发送多媒体数据的通道。服务器和客户端之间只能建立一个网络连接,且多个网络流可以复用一个网络连接。抓包:

 

1、客户端向服务端发送请求创建流(createStream)

2、服务器收到请求后向客户端发送_result(),对创建流的消息进行响应。此时NetStream创建完成。

流程图如下:

5、播放

主要功能:传送音视频

抓包:

1.客户端向服务器发送播放命令,请求播放stream。

2.服务器收到请求后,向客户端发送设置块大小的协议消息,并且还附加了一堆其他的消息一起发送;

3. 服务器向客户端发送推流通知,并附带元数据信息(分辨率、帧率、音频采样率、音频码率等等)和视频、音频数据。此时客户端就可以开始正常播放rtmp流了。 协议流程图:

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值