当前位置: 首页 > news >正文

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.mrgr.cn/news/68215.html

相关文章:

  • ubuntu 22.04 硬件配置 查看 显卡
  • ubuntu 22.04 server 安装 mysql 5.7.40 LTS
  • 文件IO的使用
  • Java基础——反射
  • 【笔记】自动驾驶预测与决策规划_Part6_不确定性感知的决策过程
  • 阿里云多端低代码开发平台魔笔使用测评
  • Android 读取内部文件
  • C++ 标准模板库 (STL)- 高效学习推荐
  • React 中 `key` 属性的警告及其解决方案
  • 初三数学,最优解问题
  • [241108] AMD 开源首批 10 亿参数语言模型:AMD OLMo | Xfce 4.20 Pre1发布
  • 【Linux系列】字符串操作的艺术:删除前缀的 Shell 脚本技巧
  • AI 浅探,揭秘【AI开发流程】的奥秘
  • Java | Leetcode Java题解之第546题移除盒子
  • 高级java每日一道面试题-2024年10月30日-JVM篇-新生代垃圾回收器和老生代垃圾回收器有哪些?有什么区别?
  • 如何实现低代码接口?低代码平台接口开发详解
  • 解决警告:Boxed value is unboxed and then immediately reboxed
  • C++:模拟实现STL的list
  • 鸿蒙NEXT开发笔记(十二)仿微信聊天App的图片转BASE64串
  • Nginx 配置文件详解
  • 【最高分数与最低分数 】
  • 理解Web登录机制:会话管理与跟踪技术解析(三)-过滤器Filter
  • 【系统设计】数据库压缩技术详解:从基础到实践(附Redis内存优化实战案例)
  • 软件测试基础十四(python 类与对象)
  • 问:SpringFramwork都有哪些模块?
  • 论文1—《基于卷积神经网络的手术机器人控制系统设计》文献阅读分析报告