RTMP协议详解及Wiresahrk抓包分析(三)

简介: RTMP协议详解及Wiresahrk抓包分析

RTMP协议详解及Wiresahrk抓包分析(二)https://developer.aliyun.com/article/1472345


四、RTMP 流媒体播放过程

1、简介

下面分析打开一个 RTMP 流媒体到视音频数据开始播放的全过程。

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

  • 第一步, 建立一个网络连接( NetConnection);
  • 第二步, 建立一个网络流( NetStream)。

其中,网络连接代表服务器端应用程序和客户端之间基础的连通关系。网络流代表了发送多媒体数据的通道。服务器和客户端之间只能建立一个网络连接,但是基于该连接可以创建很多网络流。他们的关系如图所示:

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

我们分析上面 wireshark 抓到的报文。

2、握手(HandShake)

rtmp 连接从握手开始。它包含三个固定大小的块。客户端发送的三个块命名为 C0,C1,C2;服务端发送的三个块命名为 S0,S1,S2。

握手序列如下:

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

握手示意图如下图所示:

结合上面理论对比我们抓到的报文:

①、客户端向服务器发送握手 C0+C1

②、服务器向客户端回应握手 S0+S1+S2

③、客户端向服务器发送握手 C2

抓包总结:

  • 第一步:客户端发送 C0+C1
  • 第二步:服务端发送 S0+S1+S2
  • 第三步:客户端发送 C2

疑问: C2 和 S2, 到底哪个先发送? ? ? 【协议没有具体规定】

3、建立网络连接(NetConnection)

包括以下步骤:

  • ①、客户端发起连接请求
  • ②、服务器设置客户端的应答窗口大小
  • ③、服务器设置客户端的发送带宽大小
  • ④、服务器设置客户端的接收块大小
  • ⑤、服务器响应连接结果
  • ⑥、客户端设置服务器的接收块大小

①、客户端发起连接请求

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

②、服务器设置客户端的应答窗口大小、发送带宽大小、接收块大小

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

③、服务器响应创建流结果

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

④、客户端设置服务器的接收块大小

客户端发送确认窗口大小(Window Acknowledgement Size)协议消息到服务器端。

4、建立网络流(NetStream)

包括以下步骤:

  • 客户端发送命令消息中的“创建流” (createStream) 命令到服务器端。
  • 服务器端接收到“创建流” 命令后, 发送命令消息中的“结果” (_result), 通知客户端流的状态
  • 客户端向服务器获取指定流的长度

①、客户端发起创建流请求

②、服务器响应创建流结果

③、客户端向服务器获取指定流的长度

5、播放(Play)

  • 客户端发送命令消息中的“播放” (play) 命令到服务器。
  • 服务器发送用户控制消息中的 “stream begin” ,告知客户端流 ID
  • 服务器发送客户端要播放的音频和视频数据

①、客户端发送播放请求

②、服务器发送 stream begin

③、服务器发送音视频数据给客户端

目录
相关文章
|
存储 网络协议 网络安全
RTSP协议抓包及讲解(三)
RTSP协议抓包及讲解
260 1
|
网络协议 应用服务中间件 Linux
|
2月前
|
设计模式 算法 Java
设计模式篇
设计模式篇
61 0
|
数据采集 存储 运维
DAMA数据管理知识体系指南(3):数据治理
DAMA:国际数据管理协会,是一个全球性数据管理和业务专业志愿人士组成的非营利协会,是当前国际上在数据治理领域最权威的机构。 DMBOK2则是DAMA组织众多数据管理领域的国际级资深专家编著,深入阐述数据管理各领域的完整知识体系。它是市场上唯一综合了数据管理方方面面的一部权威性著作。 本系列文章,将针对DMBOK中的核心内容进行解读。
DAMA数据管理知识体系指南(3):数据治理
|
11月前
|
应用服务中间件 Linux nginx
FFmpeg学习笔记(一):实现rtsp推流rtmp以及ffplay完成拉流操作
这篇博客介绍了如何使用FFmpeg实现RTSP推流到RTMP服务器,并使用ffplay进行拉流操作,包括在Windows和Linux系统下的命令示例,以及如何通过HTML页面显示视频流。
2350 0
|
存储 编解码 内存技术
RTMP协议详解及Wiresahrk抓包分析(二)
RTMP协议详解及Wiresahrk抓包分析
341 0
|
存储 网络协议 网络安全
RTMP协议详解及Wiresahrk抓包分析(一)
RTMP协议详解及Wiresahrk抓包分析
1002 2
|
10月前
|
API 定位技术
天气预报1天-中国气象局-IP查询版免费API接口教程
此接口基于IP地址自动判断并提供该地区当日的天气信息,数据源自中国气象局。支持POST/GET请求,需提供用户ID和KEY,可选输入IP地址,默认返回北京天气。返回参数包括天气详情、地理位置及IP等。示例请求与响应详见文档。
|
存储 并行计算 算法
R语言性能优化:提升代码运行速度的技巧
【8月更文挑战第28天】R语言的性能优化是一个复杂而细致的过程,需要综合考虑数据结构、算法、并行计算、编译以及内存管理等多个方面。通过应用上述技巧,你可以在不牺牲代码可读性和灵活性的前提下,显著提高R代码的执行效率。记住,优化是一个迭代的过程,需要不断地测试、分析和调整你的代码。
|
Ubuntu Linux 开发工具
U-Boot 中使用 nfs 命令加载文件报错指南
U-Boot 中使用 nfs 命令加载文件报错指南
559 0