rtmp协议分析(三次握手)

RTMP详细分析(Message 消息,Chunk分块)
librtmp分析(发送数据包处理)
librtmp分析(接收数据包处理)

RTMP协议是Real Time Message Protocol(实时信息传输协议)的缩写,它是由Adobe公司提出的一种应
用层的协议,用来解决多媒体数据传输流的多路复用(Multiplexing)和分包(packetizing)的问题。随
着VR技术的发展,视频直播等领域逐渐活跃起来,RTMP作为业内广泛使用的协议也重新被相关开发者重
视起来。

目录

    • 1、介绍:
    • 2.1、握手:
    • 2.2、握手过程:
    • 3.1 、C0和S0格式(简单握手):
    • 3.2 、C1和S1格式(简单握手):
    • 3.3 、C2和S2格式(简单握手):
    • 4、复杂握手:

1、介绍:

RTMP协议是应用层协议,是要靠底层可靠的传输层协议(通常是TCP)来保证信息传输的可靠性的。在
基于传输层协议的链接建立完成后,RTMP协议也要客户端和服务器通过“握手”来建立基于传输层链接之
上的RTMP Connection链接,在Connection链接上会传输一些控制信息,如
SetChunkSize,SetACKWindowSize。其中CreateStream命令会创建一个Stream链接,用于传输具体的
音视频数据和控制这些信息传输的命令信息。RTMP协议传输时会对数据做自己的格式化,这种格式的消
息我们称之为RTMP Message,而实际传输的时候为了更好地实现多路复用、分包和信息的公平性,发送
端会把Message划分为带有Message ID的Chunk,每个Chunk可能是一个单独的Message,也可能是
Message的一部分,在接受端会根据chunk中包含的data的长度,message id和message的长度把
chunk还原成完整的Message,从而实现信息的收发。

2.1、握手:

一个 RTMP 连接以握手开始。RTMP 的握手不同于其他协议˗ RTMP 握手由三个固定
长度的块组成,而不是像其他协议一样的带有报头的可变长度的块。
客户端 (发起连接请求的终端) 和服务器端各自发送相同的三块。
客户端发送的这些块称为C0、 C1 和 C2,服务器端发送的这些块称为 S0、
S1 和 S2。

2.2、握手过程:

本身并没有规定这6个Message的具体传输顺序,但RTMP协议的实现者需要保证这几点:
客户端要等收到S1之后才能发送C2
客户端要等收到S2之后才能发送其他信息(控制信息和真实音视频等数据)
服务端要等到收到C0之后发送S1
服务端必须等到收到C1之后才能发送S2
服务端必须等到收到C2之后才能发送其他信息(控制信息和真实音视频等数据)

理论上来讲只要满足以上条件,如何安排6个Message的顺序都是可以的,但实际实现中为了在保证握手
的身份验证功能的基础上尽量减少通信的次数,一般的发送顺序是这样的,这一点可以通过wireshark抓推流包进行验证:
在这里插入图片描述
在这里插入图片描述
握手流程图:在这里插入图片描述
Uninitialized (未初始化):协议的版本号在这个阶段被发送。客户端和服务器都是。
uninitialized (未初始化)状态。之后客户端在数据包 C0 中将协议版本号发出。如果服务器
支持这个版本,它将在回应中发送S0 和 S1。如果不支持,服务器会才去适当的行为进
行响应。在 RTMP 协议中,这个行为就是终止连接。
Version Sent (版本已发送):在未初始化状态之后,客户端和服务器都进入 Version Sent
(版本已发送) 状态。客户端会等待接收数据包 S1 而服务器在等待 C1。一旦拿到期待的包,
客户端会发送数据包 C2 而服务器发送数据包 S2。 (客户端和服务器各自的)状态随即变为
Ack Sent (确认已发送 )。
Ack Sent (确认已发送):客户端和服务器分别等待 S2 和 C2。
Handshake Done (握手结束):客户端和服务器可以开始交换消息了。

3.1 、C0和S0格式(简单握手):

C0 和 S0 包都是一个单一的八位字节,以一个单独的八位整型域进行处理:
在这里插入图片描述
版本( 八位):在 C0 中,这一字段指示出客户端要求的 RTMP 版本号。
在 S0 中,这一字段指示出服务器端选择的 RTMP 版本号。版本号基本都是3。
0、1、2 这三个值是由早期其他产品使用的,是废弃值。
4 - 31 被保留为RTMP 协议的未来实现版本使用。
32 - 255 不允许使用 (以区分开 RTMP 和其他常以一个可打印字符开始的文本协议)。
无法识别客户端所请求版本号的服务器应该以版本 3 响应, (收到响应的) 客户端可以选择降低到版本 3,或者放弃握手。

3.2 、C1和S1格式(简单握手):

C1 和 S1 数据包的长度都是 1536 字节,分布如下:
在这里插入图片描述
Time (四个字节):这个字段包含一个 timestamp,用于本终端发送的所有后续块的时间
起点。这个值可以是 0。

Zero (四个字节):这个字段必须都是 0。
Random data (1528 个字节):这个字段可以包含任意值。终端需要区分出响应来自它发
起的握手还是对端发起的握手,这个数据应该发送一些足够随机的数。这个不需要对随机数进行加密保护,也不需要动态值。

3.3 、C2和S2格式(简单握手):

C2 和 S2 数据包长度都是 1536 个节,基本就是 S1 和 C1 的副本。分布如下:
在这里插入图片描述
Time (四个字节):这个字段必须包含终端在 S1 (给 C2) 或者 C1 (给 S2) 发的
timestamp。
Time2 (四个个节):这个字段必须包含终端先前发出数据包 (s1 或者 c1) timestamp。
Random echo (1528 个字节):这个字段必须包含终端发的 S1 (给 C2) 或者 S2 (给 C1)
的随机数。
在这里插入图片描述

4、复杂握手:

复杂握手主要是增加了更严格的验证。
主要是将简单握手中1528Bytes随机数的部分平均分成两部分,
一部分764Bytes存储public key(公共密钥),另一部分
764Bytes存储digest(密文, 32字节)。
另外, 复杂握手还有一个明显的特征就是: Version部分不为0,
服务器端可根据这个来判断是否简单握手或复杂握手。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/378982.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

合并文件夹中子目录_01 Linux之统计文件夹中文件个数以及目录个数

案例分析:今天遇到了一个需要统计路径下目录个数的问题如果一个一个的去数会很麻烦,找到了一篇文章刚好提到这个,于是我将方法整理了一下。该方法的链接:Linux统计文件夹中文件个数以及目录个数_SG匚hang的博客-CSDN博客_linux统计…

关于Makefile,Makefile.in,Makefile.am,Configure功能及相互关系的问题

目录makefile写法1. 简介2. 上路之前3. 一个简单的例子4.说明:4.1、autoscan4.2、 configure.scan4.3、aclocal4.4、autoconf4.5、Makefile.am4.6、 automake4.7、Makefilemakefile写法 在 Unix 上写程式的人大概都碰过 Makefile,尤其是用 C 来开发程式…

西安理工大学863(转载)

原创:https://blog.csdn.net/mzj15101229871/article/details/107613162 (博主总结的很完整,很厉害,本人为了查看方便,才转载的。本人只是个小白~) 第一章 绪论 考试大纲 1)了解数据元素、数…

原理简介_消息通信的利器MQTT协议简介及协议原理

- 没用过但是必须得知道系列 -前言:相比于 XMPP, MQTT 的简单轻量受到了不少工程师的喜爱,从物联网到传统的消息服务,简单可依赖的 MQTT 到底为何让人如此着迷呢?MQTT 协议-MQTT 协议简介及协议原理MQTT(Me…

rtmp协议分析(Message 消息,Chunk分块)

RTMP详细分析(三次握手) librtmp分析(发送数据包处理) librtmp分析(接收数据包处理) 目录1、Message(消息)2、Chunking(Message 分块)2.1、 Basic Header(基本的头信息)2.1.1、Basic Header为1个字节时2.1.…

将Sharepoint Server 2010部署到WINDOWS 7

首先祝CNBLOGS上的筒子们新年快乐。Sharepoint 2010 BETA版发布已经有段时间了,总是感觉MS的步伐要比我们这些追逐他的人快很多,不过确实他的每一次革新总给我们带来了惊喜。 前几天报名参加了SHAREPOINT 2010 DAY 活动(详情),等待着1月16日体…

嵌入式实训-day1

完全复制一个文件的内容到另外一个文件 思路解析: 首先我这里使用了三个.c文件,分别是:yanyu.c、yanyu_old.c、yanyu_now.c 其中yanyu.c负责将yanyu_old.c中的内容读入到buff缓冲区中,然后再从buff缓冲区中将数据写入到yanyu_no…

计量经济学建模_浅谈统计学模型(兼计量经济学模型)

计量经济学模型是从统计学模型中衍生出来的,故将它们一并放在此处进行说明。实际上,很多人在很久之前就督促我写一篇统计学和计量经济学模型的文章,但我太懒惰,一直拖到现在,也是十分汗颜。先讲一些统计学上的基础故事…

linux文件存储、inode、硬链接、软链接

目录介绍inode的内容inode的大小inode号码目录文件硬链接软链接介绍 文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector)。每个扇区储存512字节(相当于0.5KB)。操作系统读取硬盘的时候,不会…

工具栏的打印图标不见了_显示屏下方的工具栏里的小图标不见了怎么弄回来

优质回答 回答者:昂天大笑出门去一般右下角那些小图标都是与系统同步启动的一些功能,有的是没必要让它们同步启动的,启动的东西越多,系统反应就越慢。你说的工具栏里的小图标没了,可能是那些工具不能和系统同步启动了&…

使用sshfs挂载linux远程服务器目录到windows

目录下载winfsp 和 sshfs-win使用方式1、添加连接2、连接3、其他操作修改:删除:下载winfsp 和 sshfs-win 前往 github 对应项目的 release 中下载最新版本: sshfs-win:https://github.com/billziss-gh/sshfs-win/releases winfs…

法学学士学位的完整形式是什么?

LL.B:拉丁文的Legum Baccalaureus(俗称法学学士) (LL.B: Legum Baccalaureus in Latin (commonly known as Bachelor of Laws)) LL.B is an abbreviation of Legum Baccalaureus in Latin which is generally known as Bachelor of Laws. It is a bachelors degree …

Qt创建工程及导入资源图片

一、打开软件 二、 三、 四、 五、 六、 七、 导入其他文件资源,比如图片资源: 一、 二、 三、 四、 五、 六、导入图片 七、 八、 该图片导入项目里面了

protect 继承_(转)public、protect、private继承方式 C++

C里面的结构体内的成员不受任何机制保护,直接能用,比如StructtypeA.x;StructtypeA.y;StructtypeA.fun();而c则不同,c的类像强化型的结构体public公有继承protected保护继承private私有继承我们知道类的private和protected成员,在类外是不可以…

原型模型| 软件工程

A prototype means a preliminary model of anything which gives us a rough idea about the basic functionalities that the real model would have. The prototyping model follows the same strategy. 原型意味着任何事物的初步模型,这使我们对真实模型具有的基…

librtmp分析(发送数据包处理)

RTMP详细分析(三次握手) RTMP详细分析(Message 消息,Chunk分块) librtmp分析(接收数据包处理) rtmp协议中的message的发送涉及有message 分chunk、base header长度的变化、message header长度的变化,只查看…

tomcat没有错,但是还是一闪而过(端口被占用)

首先&#xff0c;看tomcat日志文件&#xff0c;在tomcat目录下有个logs文件夹&#xff0c;进去找到刚才运行时的日志文件。 然后&#xff0c;我的是Address already in use: JVM_Bind <null>:8080&#xff0c;8080端口被占用了。 此时需要将该端口给kill掉 cmd netsta…

librtmp分析(接收数据包处理)

RTMP详细分析&#xff08;三次握手&#xff09; RTMP详细分析(Message 消息&#xff0c;Chunk分块) librtmp分析&#xff08;发送数据包处理&#xff09; rtmp协议中的message的接收涉及有message 组合多个chunk、相对时间戳计算绝对值。 分析一下librtmp库中的int RTMP_ReadP…

动态可缓存的内容管理系统(CMS)(转)

摘要&#xff1a;内容管理系统(CMS)在各大商业站点和门户站点中扮演着重要的角色&#xff0c;是内容有效组织和快速发布极为重要的基础平台。目前主流的内容发布系统都使用静态页面进行内容发布&#xff0c;在我们的实际使用过程中我们深切的感受到静态内容发布存在着很多弊端&…

mysql 自动化 安装_mysql自动化安装

MySQL安装一般使用RPM或者源码安装的方式。RPM安装的优点是快速,方便.缺点是不能自定义安装目录.如果需要调整数据文件和日志文件的存放位置,还需要进行一些手动调整。源码安装的优点是可以自定义安装目录,缺点是编译时间长,过程复杂其实还有一种方式,定制RPM包.它相当于用源码…