RTMP协议分析及推流过程

1.RTMP(实时消息传输协议)是Adobe 公司开发的一个基于TCP的应用层协议。服务器

2.RTMP协议中基本的数据单元称为消息(Message)。网络

3.当RTMP协议在互联网中传输数据的时候,消息会被拆分红更小的单元,称为消息块(Chunk)。.net

 

RTMP 握手(Handshake):视频

 

 

1.握手开始于客户端发送C0、C1块。服务器收到C0或C1后发送S0和S1。
2.当客户端收齐S0和S1后,开始发送C2。当服务器收齐C0和C1后,开始发送S2。
3.当客户端和服务器分别收到S2和C2后,握手完成。blog

 

在实际工程应用中,通常是客户端先将C0, C1块同时发出,服务器在收到C1 以后同时将S0, S1, S2发给客户端。以后客户端向服务器端发送C2块,简单握手完成。开发

 

创建网络链接(NetConnection):io

 

1. 客户端发送命令消息中的“链接”(connect)到服务器,请求与一个服务应用实例创建链接。stream


2. 服务器接收到链接命令消息后,发送确认窗口大小(Window Acknowledgement Size)协议消息到客户端,同时链接到链接命令中提到的应用程序。音频


3. 服务器发送设置带宽协议消息到客户端。服务器端


4. 客户端处理设置带宽协议消息后,发送确认窗口大小(Window Acknowledgement Size)
协议消息到服务器端。


5. 服务端向客户端发送“流开始”(Stream Begin)。


6. 服务器发送命令消息中的“结果”(_result),通知客户端链接的状态。

 

创建网络流(Create Stream):

 

1. 客户端发送命令消息中的“建立流”(CreateStream)命令到服务器端。
2. 服务器端接收到“建立流”命令后,发送命令消息中的“结果”(_result),通知客户端流的状态。

 

播放(Play):

 

 

1. 客户端发送命令“播放”给服务器
2. 接收到播放命令后,服务器发送设置块大小(ChunkSize)协议消息给客户端
3. 服务器发送“stream begin”给客户端,告诉客户端流的id
4. 播放命令成功的话,服务器发送命令消息中的“响应状态” NetStream.Play.Start & NetStream.Play.Reset,告知客户端“播放”命令执行成功
5. 服务器发送客户端要播放的音频和视频数据

 

小结:

     关系图:

 

播放一个RTMP协议的流媒体须要通过如下几个步骤:

 

下面用wireshark 抓包来分析一下过程:

 

 

 

RTMP 消息结构:

 

RTMP消息块:

在网络上传输数据时,消息须要被拆分红较小的数据块,才适合在相应的网络环境上传输。RTMP协议中规定,消息在网络上传输时被拆分红消息块(Chunk)。

 

RTMP 消息分块:

相关文章
相关标签/搜索