go语言解决rtsp协议只播放部分的问题(业务问题)

背景

之前不是写过一个项目嘛,就之前有更改过存储对接的项目
go语言对接S3存储的SDK(支持minio和OSS)
这个项目主要的业务是就一个,点播rtsp协议的码流,视频来源在存储服务器上。
这次的问题是rtsp协议只播放部分,需要我们进行排查和修复

分析

先看取存储数据的地方是否存在问题

在options交互的时候 会创建2个队列
在这里插入图片描述

在DESCRIBE的时候会去取存储的数据放到队列中
在这里插入图片描述
在另外一个携程中会去消费队列
在这里插入图片描述
从代码来看,没什么大的问题。

使用ffplay 点播并抓包分析

ffplay -rtsp_transport tcp  -i rtsp://xx.xx.x.1xx:554/xxx/8f8c42954992/5_5

抓包看信令也没什么问题(这块信令交互,后续等有时间我在写)

在这里插入图片描述

在这里插入图片描述
TEARDOWN 是客户端请求断开连接,停止媒体流。服务端没实现,这个问题也比较小,不会存在着只播放部分的问题。

那问题点出现在哪里?

我们注意到一个事情,当没有进行拉流之后,客户端一直在给服务端发ack

在这里插入图片描述
在这里插入图片描述
每隔一段时间会发一个ack相关的

我们在初始化的时候会重新实例化这个队列消息

在这里插入图片描述

会不会是因为这个原因,把队列给清空了。

为了证明我们的猜想,我们只需要在NewQueue方法上打一个日志就可以了。
在这里插入图片描述
我们就初始化了二个队列,但打印了四次,理论上来说只会打印2次的。

也就是说ffplay在拉服务端发完流之后会继续尝试请求进行拉流,就会导致这个问题。

也就是我们我们的Options方法调用了多次,那如果解决这个问题呢?

我们只需要在这加一个空判断,如果是空的我们在去实例化。这样就不会存在初始化队列的问题。

在这里插入图片描述

重启在进行点播测试,没有只播放部分的问题了,说明我们已成功解决。

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

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

相关文章

移位寄存器设计—FDRE、SRL16E及原语约束

信号处理中,实现数据对齐时,常常对单bit或多bit信号进行打拍操作,这个可以通过移位寄存器实现,SLICEM中的SRL即为移位寄存器。 这里主要记录下不同写法的效果。 1 //同步复位2 module static_multi_bit_sreg_poor #(3 parame…

Linux学习笔记之虚拟机操作

Linux简介 Linux是一种开源、免费的操作系统,其稳定性、安全性、处理多并发得到业界认可。Linux在服务器领域可以说是最强的,并且具有可定制,可裁剪,适用于嵌入式领域的特点。对于linux系统,它最大的的特点就是一切皆…

middleware中间件概述

中间件定义 中间件(middleware)是基础软件的一大类,属于可复用软件的范畴。顾名思义,中间件处在操作系统、网络和数据库之上,应用软件的下层(如图 15-1 所示)​,也有人认为它应该属…

《清宫辞Ⅱ》开机:陈欣予旗装惊艳回归 重新演绎宫闱传奇

演员陈欣予,1993年11月24日出生,多年来在影视剧方面取得了不错的成绩,在演戏的道路上,陈欣予不断挑战自我,凭借对不同角色的塑造,收获好评无数。 11月6日,由北京七耀文化传媒有限公司出品制作&a…

Linux sed命令详解-结构(清楚结构便于理解记忆)-选项-模式空间与暂存区(多示例、多图)

文章目录 sed基本结构选项-n(静默模式)-e、;(多点编辑,多条命令)-f(指定脚本文件)-i(直接修改文件与备份)-E(扩展正则表达式) 常用动作p(print,打印)i(插入内容)与a(追加内容)c、y(替换)d(delete,删除)s(替换) 其他动作l(小写L,打印特殊字符)r(在匹配行后插入指定文件内容)w(将…

开箱即用!265种windows渗透工具合集--灵兔宝盒

【渗透工具箱】灵兔宝盒-Rabbit_Treasure_Box_V1.0.1 介绍 Rabbit_Treasure_Box_V1.0.1是一款Windows渗透工具箱,集成Dawn Launcher管理,便捷备份更新。内含脚本工具及在线安全工具,覆盖信息收集、漏洞利用、逆向破解、蓝队防御等多领域&am…

对标 Windows Copilot 的 UOS AI,升级后更能打了

进入 2024 年,AI 应用迎来大爆发,不仅各类应用纷纷宣称“AI 赋能”,操作系统也不例外。前有 Windows Copilot,后有 Apple Intelligent,手机行业更是积极,各种 AI 手机纷纷发布。国产信创系统自然也不甘落后…

【LeetCode】每日一题 2024_11_2 使两个整数相等的位更改次数(位运算/模拟)

前言 每天和你一起刷 LeetCode 每日一题~ LeetCode 启动! 题目:使两个整数相等的位更改次数 代码与解题思路 先读题: 题目要我们把 n 这个数字转换成 k 这个数字,但是只能是二进制位 1 转换成 0 纯模拟的解法: f…

2024 开源社年度评选

开源社(英文名称为“KAIYUANSHE”)成立于2014年,是由志愿贡献于开源事业的个人志愿者,依 “贡献、共识、共治” 原则所组成的开源社区。开源社始终维持 “厂商中立、公益、非营利” 的理念,以 “立足中国、贡献全球&am…

【MATLAB源码-第204期】基于matlab的语音降噪算法对比仿真,谱减法、维纳滤波法、自适应滤波法;参数可调。

操作环境: MATLAB 2022a 1、算法描述 语音降噪技术的目的是改善语音信号的质量,通过减少或消除背景噪声,使得语音更清晰,便于听者理解或进一步的语音处理任务,如语音识别和语音通讯。在许多实际应用中,如…

C语言 | Leetcode C语言题解之第542题01矩阵

题目: 题解: /*** Return an array of arrays of size *returnSize.* The sizes of the arrays are returned as *returnColumnSizes array.* Note: Both returned array and *columnSizes array must be malloced, assume caller calls free().*/ type…

[SWPUCTF 2022 新生赛]Power! 反序列化详细题解

知识点: PHP反序列化(执行顺序) 构造POP链 代码审计 题目主页: 输入框可以输入内容,习惯性先查看一下页面的源代码,收集信息 发现源码中有提示参数source 先不急,再看一下其他信息 是apache服务器,php版本为7.4.30 url传参 ?sourceindex.php 回显了index.php的源码 …

docker下迁移elasticsearch的问题与解决方案

欢迎来到我的博客,代码的世界里,每一行都是一个故事 🎏:你只管努力,剩下的交给时间 🏠 :小破站 docker下迁移elasticsearch的问题与解决方案 数据挂载报错解决权限问题节点故障 直接上图&#x…

Spark 的介绍与搭建:从理论到实践

目录 一、分布式的思想 (一)存储 (二)计算 二、Spark 简介 (一)发展历程 (二)Spark 能做什么? (三)spark 的组成部分 (四&…

Python GUI 编程:tkinter 初学者入门指南——微调框

在本教程中,将介绍如何创建 Tkinter Spinbox 微调框小部件。 Python 中 Tkinter 中的 Spinbox 小部件用于从指定的给定值范围内选择一个值。 此外,可以直接在 Spinbox 小组件中输入值,就像使用单行文本框小组件一样。 要创建 Spinbox 小部件…

人保财险(外包)面试分享

前言: 这是本月面的第三家公司,太难了兄弟们,外包都不好找了,临近年底,金九银十已经错过了,金三银四虽然存在,但按照这几年的行情,金九银十和金三银四其实已经是不复存在了&#xf…

Redis - 数据库管理

Redis 提供了⼏个⾯向Redis数据库的操作,分别是dbsize、select、flushdb、flushall命令, 本机将通过具体的使⽤常⻅介绍这些命令。 一、切换数据库 select dbIndex 许多关系型数据库,例如MySQL⽀持在⼀个实例下有多个数据库存在的&#…

大数据挖掘有哪些技术要点?

大数据挖掘的主要方法和技术有:分类、聚类、关联规则、回归分析、时间序列分析、文本挖掘、社交网络分析、可视化技术等。通过大数据挖掘,企业和研究机构能够从海量数据中提取有价值的信息和知识,促进决策优化和业务创新。 一、分类 分类是大…

Python小游戏23——捕鱼达人

首先,你需要安装Pygame库。如果你还没有安装,可以使用以下命令进行安装: 【bash】 pip install pygame 运行效果展示 接下来是示例代码: 【python】 import pygame import random # 初始化Pygame pygame.init() # 屏幕尺寸 SCREEN…

项目模块十七:HttpServer模块

一、项目模块设计思路 目的:实现HTTP服务器搭建 思想:设计请求路由表,记录请求方法与对应业务的处理函数映射关系。用户实现请求方法和处理函数添加到路由表,服务器只接受请求并调用用户的处理函数即可。 处理流程: …