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

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

目录
相关文章
|
存储 缓存 编解码
AVFormatContext封装层:理论与实战(一)
AVFormatContext封装层:理论与实战(一)
388 1
|
3月前
|
存储 机器学习/深度学习 缓存
KV Cache管理架构演进:从连续分配到统一混合内存架构
本文系统梳理KV Cache管理演进的5个时代(从无到统一内存架构),剖析vLLM、SGLang、TensorRT-LLM等框架在各阶段的技术取舍与实践效果,涵盖连续缓存、PagedAttention、异构/分布式/统一混合架构等关键突破,助你为不同场景(文本、多模态、长上下文、混合模型)选择最优方案。
974 8
|
4月前
|
存储 机器学习/深度学习 人工智能
阿里云服务器第九代计算型c9i实例解析:至强6处理器,AI加速40%,安全升级
阿里云服务器计算型c9i实例,搭载英特尔®至强®6处理器,单核算力提升20%,采用CIPU架构降低网络延迟、提升存储IOPS,实现高性能与高能效的平衡,适用于在线游戏、视频编解码等场景。c9i实例在计算、网络、存储性能上全方位提升。目前,c9i实例2核4G、4核8G、8核16G配置有优惠,用户还可领取额外优惠券享受减免。
|
11月前
|
Web App开发 编解码 网络协议
直播推流技术底层逻辑详解与私有化实现方案-以rmtp rtc hls为例-优雅草卓伊凡
直播推流技术底层逻辑详解与私有化实现方案-以rmtp rtc hls为例-优雅草卓伊凡
623 5
直播推流技术底层逻辑详解与私有化实现方案-以rmtp rtc hls为例-优雅草卓伊凡
|
10月前
|
Ubuntu 开发工具
Ubuntu 22.04 aarch64版本操作系统下编译ZLMediaKit教程
通过上述步骤,你可以在Ubuntu 22.04 aarch64版本上成功编译ZLMediaKit,这是一个相对简单而直接的过程,但可能会遇到一些需要根据具体系统环境和要求调整的地方。
1204 0
|
JSON JavaScript 定位技术
Echarts 绘制地图(中国、省市、区县),保姆级教程!
Echarts 绘制地图(中国、省市、区县),保姆级教程!
27987 154
|
存储 网络协议 网络安全
RTMP协议详解及Wiresahrk抓包分析(一)
RTMP协议详解及Wiresahrk抓包分析
2033 2
|
存储 编解码 内存技术
RTMP协议详解及Wiresahrk抓包分析(二)
RTMP协议详解及Wiresahrk抓包分析
691 0
|
编解码 移动开发 C++
RTMP协议深度解析:从原理到实践,掌握实时流媒体传输技术
RTMP协议深度解析:从原理到实践,掌握实时流媒体传输技术
3425 0
RTMP协议深度解析:从原理到实践,掌握实时流媒体传输技术
|
API 开发工具 Android开发
简述大疆无人机对接
【2月更文挑战第7天】本文介绍了对接大疆无人机的主要目的,包括实时画面获取、飞行数据监测、操控飞行、媒体管理和业务功能开发等,并列举了多种开发接口如MobileSDK、UXSDK、云开发API等。重点讨论了MobileSDK在Android平台的应用,包括SDK集成步骤、直播推流和获取飞机实时数据的细节。另外,UXSDK用于加速应用开发,提供预设UI组件。上云API则简化了无人机与第三方云平台的集成,支持MQTT、HTTPS和WebSocket协议,适用于行业级无人机。对接流程涉及Pilot2和Dock的配置,以及数据传输和业务功能处理。文章还提及了如何对接多个飞机的方法。
14525 0
简述大疆无人机对接

热门文章

最新文章