RTMP协议学习总结

概述

 实时消息传送协议,它是应用层协议,通过底层TCP协议来保证信息传输的可靠性。基本数据单元称为消息(Message),当在互联网中传输数据的时候,消息会被拆分成更小的单元,称为消息块(Chunk)。

消息

基本的数据单元;
通过Message Type ID区分不同的种类,代表不同的功能;具体分类如下:
1-7:协议控制,一般是RTMP协议自身管理要使用的消息,用户一般情况下无需操作其中的数据。
8:传输音频数据
9:传输视频数据
15-20:用于发送AMF编码的命令,负责用户和服务器之间的交互,比如播放,暂停等等。
消息首部分为四部分
Message Type ID
Payload Length
Timestamp
Stream ID(消息所属媒体流)
 

块(Chunk)

块首部分为三部分
用于标识本块的Chunk Basic Header
用于标识本块负载所属消息的Chunk Message Header
时间戳溢出时才出现的Extended Timestamp
 

消息分块

消息负责部分(Message Body)被分割成大小固定的数据块(默认是128字节)
在首部加上消息块首部(Chunk Header)
 

传输过程

SenderSenderReceiverReceiver1媒体数据封装成消息2消息分割为消息块3基于TCP协议发送4通过TCP协议收取数据,且消息块重组为消息5解封装消息6得到原始媒体数据播放

播放流程

RTMP逻辑结构

只能有一个网络连接(NetConnection),可以有多个网络流(NetStream)
 

播放一个RTMP协议的流媒体步骤:

握手
握手作为开始,分别发送大小固定的三个数据块:
握手开始于客户端发送C0,C1块。服务器收到C0或C1发送S0和S1。
当客户端收齐S0和S1后,开始发送C2。当服务器收齐C0和C1后,开始发送S2。
当客户端和服务器分别收到S2和C2后,握手完成。 如下图所示:

 

建立连接
建立客户端和服务器之间的"网络连接"
客户端发送命令消息中的"连接"到服务器,请求与一个服务应用实例建立连接。
服务器接收到连接命令消息后,发送确认窗口大小(Window Acknowledgement Size)协议消息到客户端,同时连接到连接命令中提到的应用程序
服务器发送设置带宽协议消息到客户端
客户端处理设置带宽协议消息后,发送确认窗口大小(Window Acknowledgement Size)协议消息到服务器端
服务器发送用户控制消息中的"流开始"(Stream Begin)消息到客户端。
服务器发送命令消息中的"结果"(_result),通知客户端连接的状态。
 

建立流
建立客户端与服务器之间的"网络流"
客户端发送"创建流"命令到服务器端
服务器端接收到"创建流"命令后,发送命令消息中的"结果(_result)",通知客户端的状态。
 

播放
用于传输音视频数据
客户端发送命令消息中的"播放"命令到服务器。
接受到播放命令后,服务器发送设置块大小(ChunkSize)协议消息。
服务器发送用户控制消息中的"streambegin",告知客户端流ID
播放命令成功的画,服务器发送命令消息中的"相应状态"NetStream.Play.Start & NetStream.Play.reset,告知客户端"播放"命令执行成功。
在此之后服务器发送客户端要播放的音频和视频数据。
 

抓包分析

待更新

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值