音视频推流中使用wireshark进行抓包分析RTMP

一、前期工作

        最近使用开发板采集音视频数据合成FLV流后进行推流到PC端(RTMP协议),PC端需要安装对应的nginx以及支持rtmp的nginx,在网上找了教程后安装成功,现在使用wireshark工具对开发板于pc端之间的通信协议进行解析。

二、wireshark配置

        安装wireshark后选择正确的接口(我这里是以太网2,如果不清楚的可以把开发板的电源线拔掉,看那个端口有流量变化)。

        然后需要进行过滤器的配置否则会有很多乱七八糟的数据,看不懂

        这里由于我们使用的是RTMP协议,其是基于tcp协议的,因此我们新增一个过滤器名字随便设置,然后设置其功能为:

        意思就是我们只捕获tcp协议的 port 1935的端口的(RTMP协议默认端口1935),而且是192.168.1.22(开发板)于192.168.1.20(PC)之间通信的数据:

tcp port 1935 and host 192.168.1.22 and host 192.168.1.20

        这里我建议提前排查一下开发板与pc端口之间是否能ping的通。

        然后对以太网2端口开始捕获数据,并把配置好的过滤器选中

三、数据解析

下图为我的部分捕获结果:

从上面的一栏可以看到,其中包括包次序、时间、源、目的、协议、长度、信息

从源地址和目的地址来看我们可以初步判断,我们没有抓错包,因为数据是开发板与pc端之间的通信,protocol可以看出有tcp与rtmp两种,其不同之处如下:

TCP数据包:在TCP连接建立或传输控制(如三次握手、窗口大小调整)时,Wireshark会识别出TCP协议,并显示为TCP。这些数据包主要用于维护可靠的连接,确认数据的传输顺序和状态。

RTMP数据包:当实际的音视频流数据被封装在TCP数据包中进行传输时,Wireshark会进一步解析这个数据包,发现其中包含了RTMP协议的数据,并在Protocol字段中显示为RTMP

3.1TCP3次握手

第一行:

        源192.168.1.22(开发板)    目的192.168.1.20(PC)    协议TCP    

40494 → 1935 [SYN] Seq=0 Win=64240 Len=0 MSS=1460 SACK_PERM TSval=2033509860 TSecr=0 WS=128;

        表示开发板向PC端进行传输数据,端口是40494到1935,其中40494是开发板使用的临时端口,而1935则是RTMP中默认的端口

        SYN是TCP的标志,在这里的作用是告诉PC请求建立tcp连接

        Seq=0表示是第1个消息

第二行:

        源192.168.1.20(PC) 目的192.168.1.22(开发板) 协议TCP

1935 → 40494 [SYN, ACK] Seq=0 Ack=1 Win=65535 Len=0 MSS=1460 WS=256 SACK_PERM TSval=1142957703 TSecr=2033509860

        表示PC端应答开发板的TCP请求信号,因此为SYN,ACK且Ack=1

第三行:

        这行与第二行的内容是一样的,大概率是网络问题导致重新传输Retransmission

第四行:        

        源:192.168.1.22(开发板) 目的:192.168.1.20(PC)协议TCP

40494 → 1935 [ACK] Seq=1 Ack=1 Win=64256 Len=0 TSval=2033509860 TSecr=1142957703

        这里表示开发板收到了PC的应答信号因此再发送一个应答信号。

        【这里我自己的理解是,可能由于网络的原因,PC收到开发板请求的时间和PC应答的时间较长,在这段时间内,开发板可能等太久后超过一个时间阈值后不再等待PC,因此为了确保PC端应答的时候开发板还在等待,因此开发板等待到应答信号后再次给PC发送一个应答信号,就好像再说:我还在等你】

        至此,TCP的三次握手完成。

第五行:

        这里又对整体的配置进行了一次发送,包含在是有数据长度的,前面几次数据长度都是0;

3.2RTMP握手

RTMP协议建立在TCP之上,因此与TCP类似,也需要三次握手:

第六行:

        开发板发送C0与C1给PC端

        C0:一个1字节的协议版本号;C1:1536字节的随机数据,包含客户端发送的时间戳和其他信息。

第14行:

        PC端回应开发板

        S0 + S1 + S2:服务器(如PC)收到C0和C1后,回应三个数据包:S0:1字节的协议版本号;S1:1536字节的随机数据,包含服务器发送的时间戳;S2:返回C1中接收的时间戳,作为对客户端数据的回应。

第20行:

        开发板再次回应PC端

        C2:客户端最后发送一个C2包,回应服务器的S1和S2中的时间戳,握手完成。

3.3RTMP建立连接

在23行建立连接,connect命令建立,这里的live是在推流时候设置的,我当时设置的命令是:

这里rtmp://为协议 192.168.1.20为服务器地址 live为应用名称 stream是流名称

rtmp://192.168.1.20/live/stream

        然后这里的33行是准备发布流,23行配置了应用名称,33行配置了流名称并发送准备发送流的信号,然后34行是PC对开发板的回应说,我已经准备好了。

3.4RTMP正式发布

这里的39 行表示正式向stream推流,然后40 表示成功接收

第45行表示服务器发送数据包并标记为setDataFrame

3.5停止

客户端发送FIN,ACK信号作为停止信号

服务器恢复FIN,ACK信号即表示应答

最后客户端再次发送ACK作为总体的停止信号

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

计算架构模式之负载均衡技巧

通用负载均衡算法 负载均衡算法 -轮询 & 随机 如果服务器挂掉了,那么负载均衡器还是可以感知到的,因为连接已经断掉了。 负载均衡算法-加权轮询 假设你有4核的和8核的,由于你的程序没有办法跑完CPU,那么有可能出现4核的和8核…

计算机网络30——Linux-gdb调试命令makefile

1、开始调试 编译时带-g为调试,带调试信息编译后的可执行文件更大 2、进入调试 使用gdb 可执行文件名——进入调试 失败版: 成功版: 3、l命令 l什么都不加——列出10行代码 l 行号——行号的行在中间,向上向下展示10行 4、st…

Modbus协议03:Modbus功能码和协议分类

视频链接:【3】Modbus协议功能码说明_哔哩哔哩_bilibili【3】Modbus协议功能码说明是【直播回放】小白也可以听懂的Modbus协议讲解的第3集视频,该合集共计4集,视频收藏或关注UP主,及时了解更多相关视频内容。https://www.bilibili…

关于使用Mybatis-Plus 自动填充功能失效问题

关于使用Mybatis-Plus 自动填充功能失效问题 关于使用Mybatis-Plus 自动填充功能失效 首先遇到的第一个问题 自动填充失败 或被填充为NULL 原因:字段类型 与 填充类型 不一致导致 解决方法:将类型替换成一致的类型 全部为Date 或 LocalDateTime 即可解…

Flutter Web首次加载时添加动画

前言 现在web上线后首次加载会很慢&#xff0c;要5秒以上&#xff0c;并且在加载的过程中界面是白屏。因此想在白屏的时候放一个加载动画 实现步骤 1.添加以下<style>标签内容到<head>标签中 <style>.loading {display: flex;justify-content: center;ali…

python容器四之字典

文章目录 1. 字典介绍2. 使用字典3. 字典的常见操作3.1 添加元素3.2 删除元素3.3 修改元素3.4 查找元素 4. 字典遍历方法4.1 遍历字典元素 5. 公共运算符6. 公共方法 1. 字典介绍 先来看看现实生活中的字典。我们知道&#xff0c;可以应用字典来查找汉字。 在这里插入图片描述…

openstack之cinder介绍

概念 cinder 为虚拟机提供管理块存储服务。支持的文件系统&#xff1a;lvm、iscsi、nfs、san、RBD 组件构成及功能介绍 cinder api&#xff1a;在控制节点运行&#xff0c;管理服务的接口&#xff0c;被命令行、其他组件调用&#xff1b; cinder scheduler&#xff1a;类似n…

HTML标签优先级

HTML&#xff08;HyperText Markup Language&#xff09;标签的位置对于页面的结构、性能以及可维护性至关重要。合理安排标签的位置不仅有助于提高网页的加载速度&#xff0c;还能使得代码更加清晰易懂。以下是一些关于HTML标签放置的基本规则和建议&#xff1a; 1. 文档类型…

【查看谷歌浏览器的个人文件路径】

查看谷歌浏览器的个人文件路径 chrome://version/

第307题|快速掌握 反常积分敛散性判定的方法|武忠祥老师每日一题

解题思路&#xff1a;先判断这个反常积分的敛散性&#xff0c;再讨论a的取值范围; 判断反常积分的敛散性&#xff0c;我们通常有三个方法&#xff1a; &#xff08;1&#xff09;根据定义&#xff0c;通常在原函数比较好求的情况下&#xff0c;可以根据定义 &#xff08;2&am…

Windows上指定盘符-安装WSL虚拟机(机械硬盘)

参考来自于教程1&#xff1a;史上最全的WSL安装教程 - 知乎 (zhihu.com)https://zhuanlan.zhihu.com/p/386590591#%E4%B8%80%E3%80%81%E5%AE%89%E8%A3%85WSL2.0 教程2&#xff1a;Windows 10: 将 WSL Linux 实例安装到 D 盘&#xff0c;做成移动硬盘绿色版也不在话下 - 知乎 (z…

React源码学习(一):如何学习React源码

本系列源码学习&#xff0c;是基于 v16.13.1&#xff0c;v17.x与v16.x区别并不太大&#xff01; 一、如何正确的学习React源码&#xff1f; 找到Github&#xff0c;转到React仓库&#xff0c;fork / clone源码&#xff1a;React 查看Readme&#xff0c;在Documentation中有Cont…

昇思MindSpore AI框架MindFormers实践3:ChatGLM3-6B对一段文字进行提取

MindSpore和MindFormers安装参见&#xff1a;昇思AI框架实践1:安装MindSpoe和MindFormers_miniconda 安装mindspore-CSDN博客 使用了MindSpore2.2和MindFormers1.0 支持的模型&#xff1a; KeyError: "model must be in odict_keys([gpt2, gpt2_lora, gpt2_xl, gpt2_xl…

2024.9.14 Python与图像处理新国大EE5731课程大作业,马尔可夫随机场和二值图割,校正立体图像的深度

1.马尔科夫随机场和二值图割 马尔可夫随机场&#xff08;MRF, Markov Random Field&#xff09;&#xff1a; MRF 是一种用来描述图像像素之间空间关系的概率模型。它假设图像中的像素不仅取决于自身的值&#xff0c;还与周围像素有关。这种模型经常用于图像分割、去噪等任务。…

51单片机 - DS18B20实验1-读取温度

上来一张图&#xff0c;明确思路&#xff0c;程序整体裤架如下&#xff0c;通过单总线&#xff0c;单独封装一个.c文件用于单总线的操作&#xff0c;其实&#xff0c;我们可以把点c文件看成一个类操作&#xff0c;其属性就是我们面向对象的函数&#xff0c;也叫方法&#xff0c…

iPhone 16预售已开,沙漠金色最抢手,喜提新机后别忘了这件事!

9月13日20点&#xff0c;iPhone 16系列正式开启官方预购。今年全新的iphone16不仅新增相机按钮和AI功能&#xff0c;还增加了沙漠金配色。“加量不加价”的iPhone 16系列开售依旧火爆&#xff0c;iPhone 16系列开售1分钟内&#xff0c;苹果官方网站一度被消费者买到崩&#xff…

(Python+selenium)UI自动化测试

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 前言 我们在进行UI自动化测试时&#xff0c;一般采用javaselenium或者pythonselenium的方式。由于python比较简单&#xff0c;上手快&#xff0c;因此建议大家采…

【第34章】Spring Cloud之SkyWalking分布式日志

文章目录 前言一、准备1. 引入依赖 二、日志配置1. 打印追踪ID2. gRPC 导出 三、完整日志配置四、日志展示1. 前端2. 后端 总结 前言 前面已经完成了请求的链路追踪&#xff0c;这里我们通过SkyWalking来处理分布式日志&#xff1b; 场景描述&#xff1a;我们有三个服务消费者…

Vue安装及环境配置【图解版】

欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 Facts speak louder than words&#xff01; 目录 一.node.js的安装…

2024/9/14 408大题专项训练之存储系统

组相联映射怎么算组号&#xff1f; 有cache总大小/路数xcache大小 物理地址与虚拟地址位数不一定相等&#xff0c;但是她们页内地址和块内地址位数是一样的&#xff01;