音视频推流中使用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.rhkb.cn/news/424182.html

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

相关文章

【安全系列--处理挖矿】

现象:我们云上waf提示有台服务器存在挖矿行为 解决思路: 1、查看服务器的进程情况 top发现服务的CPU使用率非常高 2、使用性能分析工具perf查看占用的cpu进程 sudo apt install linux-tools-common发现一些kernel进程存在异常 3、使用find查一下这…

Java多线程——模拟接力赛跑

题目: 多人参加1000米接力跑 每人跑100米,换下个选手 每跑10米显示信息 解题思路: 1.必须要用到多线程的锁,否则就会出现三个选手乱跑的情况,我们需要一个一个跑 2.使用给oneRunner上锁的方式更细的控制资源比直接给…

助力汽车半导体产业发展,2025 广州国际新能源汽车功率半导体技术展览会与您相约“羊城”广州

助力汽车半导体产业发展,2025 广州国际新能源汽车功率半导体技术展览会与您相约“羊城”广州 随着半导体技术的升级与发展,功率半导体已经成为推动新能源汽车和智能汽车产业升级的关键因素。汽车不再只是单纯的交通工具,而是逐渐演变为一个智…

【H2O2|全栈】关于CSS(4)CSS基础(四)

目录 CSS基础知识 前言 准备工作 精灵图 概念 属性 案例 浮动 基础属性 清除浮动 案例 预告和回顾 后话 CSS基础知识 前言 本系列博客将分享层叠样式表(CSS)有关的知识点。 接下来的几期内容相对比较少,主要是对前面的内容进…

[数据集][目标检测]车油口挡板开关闭合检测数据集VOC+YOLO格式138张2类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):138 标注数量(xml文件个数):138 标注数量(txt文件个数):138 标注类别…

Linux相关:在阿里云下载centos系统镜像

文章目录 1、镜像站2、下载方式一2.1、第一步打开镜像站地址2.2 下载地址: https://mirrors.aliyun.com/centos/2.3、选择7版本2.4、镜像文件在isos文件夹中2.5、选择合适的版本 3、下载镜像快捷方式 1、镜像站 阿里云镜像站地址 2、下载方式一 2.1、第一步打开镜像站地址 2…

modbus调试助手/mqtt调试工具/超轻巧物联网组件/多线程实时采集/各种协议支持

一、前言说明 搞物联网开发很多年,用的最多的当属modbus协议,一个稳定好用的物联网组件是物联网平台持续运行多年的基石,所以这个物联网组件从一开始就定位于自研,为了满足各种场景的需求,当然最重要的一点就是大大提…

【程序分享】express 程序:可扩展的高级工作流程,用于更快速的从头算材料建模

分享一个 express 程序:可扩展的高级工作流程,用于更快速的从头算材料建模。 感谢论文的原作者! 主要内容 “在这项工作中,我们介绍了一个开源的Julia项目express,这是一个可扩展的、轻量级的、高通量的高级工作流框…

数据驱动型营销与开源 AI 智能名片 O2O 商城系统的融合发展

摘要:本文探讨了数据驱动型营销在现代商业中的重要性,阐述了其在消费者管理和产品管理方面的作用。同时,引入“开源 AI 智能名片 O2O 商城系统”,分析其如何与数据驱动型营销相结合,为企业提供更精准的营销决策和更高效…

Kafka+PostgreSql,构建一个总线服务

之前开发的系统,用到了RabbitMQ和SQL Server作为总线服务的传输层和存储层,最近一直在看Kafka和PostgreSql相关的知识,想着是不是可以把服务总线的技术栈切换到这个上面。今天花了点时间试了试,过程还是比较顺利的,后续…

LineageOS源码下载和编译(Xiaomi Mi 6X,wayne)

版权归作者所有,如有转发,请注明文章出处:https://cyrus-studio.github.io/blog/ 源码下载 LineageOS官网:https://lineageos.org/ LineageOS源码 github 地址:https://github.com/LineageOS/android LineageOS源码…

创建dataSource错误

说明:记录一次启动项目时的异常,如下: Error starting ApplicationContext. To display the conditions report re-run your application with debug enabled. 2024-09-14 23:27:27.338 ERROR 42260 --- [ main] o.s.boot.SpringA…

leetcode hot100_part4_子串

2024/4/20—4/21 560.和为K的子数组 前缀和哈希表,做二叉树的时候也有这个套路。注意细节,遍历到当前前缀和的时候是先找结果个数还是先加入哈希?应该先找结果个数,不然的话,当前位置也算上了(因为是前缀和…

架构师备考的一些思考(四)

前言 对于数学,我们之前学的是对的,但不是真的,所以我们没有数学思维。 对于计算机,我们学校教的是对的,但不是真的,所以仅仅从学校学习知识的应届毕业生,不论985,211,本科&#xff…

中国初创公司数量下降了98%

近年来,中国风险投资市场的风云变幻,通过IT Juzi(IT桔子)等权威数据服务提供商的透镜,得以清晰展现。数据显示,自2018年的鼎盛时期——拥有51,302家初创公司以来,这一数字在短短五年内急剧下降至…

如何通过网络找到自己想要的LabVIEW知识?

学习LabVIEW或其他编程技术时,无法依赖某一篇文章解决所有问题。重要的是通过多种途径获取灵感,并学会归纳总结,从而逐渐形成系统性的理解。这种持续学习和总结的过程是技术提升的基础。通过网络找到所需的LabVIEW知识可以通过以下几个步骤进…

编写注册接口与登录认证

编写注册接口 在UserController添加方法 PostMapping("/login")public Result login(Pattern(regexp "^\\S{5,16}$") String username,Pattern(regexp "^\\S{5,16}$") String password){ // 根据用户名查询用户User loginUser userS…

第二期: 第二节 , 裸机编程 , gpio

1 首先就是 看原理图: 这里有两个 LED 核心板的原理图。 可以看到 是这个脚。 2 然后就是 查看数据手册。 从 数据手册可以看出 ,一共有这么多的 gpio 组, 但是这些 组 是有复用的&#xf…

跨平台开发新视角:利用Android WebView实现Web内容的原生体验

在移动应用开发领域,跨平台解决方案一直是一个热门话题。开发者们不断寻求能够同时在iOS和Android平台上提供一致用户体验的方法。而Android的WebView组件,作为一个强大的工具,允许开发者在Android应用中嵌入Web内容,为用户提供接…

瑞芯微Android6 内核编译报错解决方案

1、报错内容如下图所示 错误内容: Kernel: arch/arm/boot/zImage is ready make: *** [kernel.img] Error 127 2、分析与解决方法 由于之前在ubuntu环境下编译没问题,现在是在centos环境下重新编译的时候报错,所以经过分析对比两个环境的…