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

播放器缓存队列bug解决方案

背景

我在开发一个播放器的缓存队列时,遇到一个bug,导致包和帧无法被下一个模块读取

找了半天,原来是队列中的包和帧数据要进行内容的刷新暂存

包数据和帧数据不能直接放入队列

//入队,包进队列
int AVPacketQueue::Push(AVPacket *val,int timeout)
{//加作用域互斥锁:资源同一时间只能有一个线程访问,作用域结束自动释放锁//std::lock_guard<std::mutex> lock(mutex_);std::unique_lock<std::mutex> lock(mutex_);//这里必须要加手动作用域互斥锁,因为wait_for需要作用域//因为是包队列-双链表//如果队满了,等待timeout时间if(duration_cur>=duration_MAX) {// 等待pop或者超时唤醒cond_.wait_for(lock, std::chrono::milliseconds(timeout), [this] {return duration_cur<duration_MAX;});}//如果依然队满,就直接返回-1if(duration_cur>=duration_MAX){return -1;}//入队:出现问题的代码,这里是直接把包指针存放到队列中了,但是在ffmpeg中不能直接存放,必须要先搞一个新包,然后刷新暂存数据queue_.push(val);//增加队列缓存时间,强转成mslong ms = static_cast<long>(av_rescale(val->duration, 1000, AV_TIME_BASE));this->duration_cur+=ms;cond_.notify_one();//条件变量:通知其他线程可以继续执行return 0;
}

解决方案

//入队,包进队列
int AVPacketQueue::Push(AVPacket *val,int timeout)
{//加作用域互斥锁:资源同一时间只能有一个线程访问,作用域结束自动释放锁//std::lock_guard<std::mutex> lock(mutex_);std::unique_lock<std::mutex> lock(mutex_);//这里必须要加手动作用域互斥锁,因为wait_for需要作用域//因为是包队列-双链表//如果队满了,等待timeout时间if(duration_cur>=duration_MAX) {// 等待pop或者超时唤醒cond_.wait_for(lock, std::chrono::milliseconds(timeout), [this] {return duration_cur<duration_MAX;});}//如果依然队满,就直接返回-1if(duration_cur>=duration_MAX){return -1;}//入队:一定注意,必须要重新申请空间,不然会指向同一段地址,而且后面要释放对应的数据包av_packet_freeAVPacket *tmp_packet = av_packet_alloc();av_packet_move_ref(tmp_packet, val);queue_.push(tmp_packet);//增加队列缓存时间,强转成mslong ms = static_cast<long>(av_rescale(val->duration, 1000, AV_TIME_BASE));this->duration_cur+=ms;cond_.notify_one();//条件变量:通知其他线程可以继续执行return 0;
}

相关文章:

播放器缓存队列bug解决方案

背景 我在开发一个播放器的缓存队列时&#xff0c;遇到一个bug,导致包和帧无法被下一个模块读取 找了半天&#xff0c;原来是队列中的包和帧数据要进行内容的刷新暂存 包数据和帧数据不能直接放入队列 //入队&#xff0c;包进队列 int AVPacketQueue::Push(AVPacket *val,i…...

React拖拽实践

当涉及到前端开发中的用户体验时&#xff0c;拖拽功能是一个常见而重要的需求。在React中&#xff0c;实现拖拽功能可以通过多种方式完成&#xff0c;但通常需要深刻理解React的状态管理、事件处理和DOM操作。本文将探讨React中拖拽的实践&#xff0c;包括基本原理、拖拽库的使…...

Stable Diffusion绘图,lora选择

best quality, ultra high res, (photorealistic:1.4), 1girl, off-shoulder white shirt, black tight skirt, black choker, (faded ash gray hair:1), looking at viewer, closeup <lora:koreandolllikeness_v20:0.66> 最佳品质&#xff0c;超高分辨率&#xff0c;&am…...

kube-controller-manager和kube-scheduler不能正常启动

kube-controller-manager-k8s-worker01和kube-scheduler-k8s-worker01没有启动起来 原因&#xff1a; 解决&#xff1a;进入/etc/kubernetes/manifests 编辑 将镜像地址修改为 然后重启kubelet&#xff1a;systemctl restart kubelet.service...

Mac OS m1 下安装Gradle5.1

1. 下载、解压 1.1 下载地址 https://gradle.org 往下翻 选择 5.1 或者选择 任何 你想要的版本 ,点击 binary-only 即可下载 . 1.2 解压到指定目录 2. 配置环境变量 2.1 编辑环境文件 vi ~/.bash_profile #GRADLE相关配置 GRADLE_HOME/Users/zxj/Documents/devSoft/grad…...

JUC并发编程面试题(自用)

线程池 1 线程池的作用&#xff1a;提高线程的利用率&#xff0c;线程复用&#xff0c;频繁的创建和销毁线程非常浪费资源 线程池的七大参数&#xff1a; corePoolSize&#xff08;核心线程数&#xff09;&#xff1a;线程池中始终保持的活动线程数&#xff0c;即使它们处于空…...

Redis分布式会话

当探讨Redis分布式会话管理时&#xff0c;以下是更加详细的知识点&#xff1a; 1. 会话管理的挑战&#xff1a; 在分布式应用程序中&#xff0c;每个用户请求可能由不同的服务器处理。这导致了会话数据的分散性&#xff0c;需要一种方法来维护一致性的用户会话状态。 2. Redi…...

程序员大厂之鹅厂探秘

...

【Java 进阶篇】深入理解 JavaScript DOM Node 对象

在前端开发中&#xff0c;与HTML文档进行交互是一项基本任务。文档对象模型&#xff08;Document Object Model&#xff0c;简称DOM&#xff09;为开发者提供了一种以编程方式访问和操作HTML文档的方式。DOM的核心是节点&#xff08;Node&#xff09;对象&#xff0c;它代表了文…...

测试用例基础

测试用例的基本要素 测试环境, 操作步骤, 测试数据, 预期结果 测试用例的设计方法 基于需求的设计方法 需求文档 -> 梳理需求(掌握需求) -> 针对文档设计测试用例 只是针对需求进行大概的测试 具体的设计方法 等价类 等价类: 依据需求将输入&#xff08;特殊情况…...

“Flex弹性布局、轮播图mock遍历数据和首页布局解析与实践“

目录 引言1. Flex弹性布局介绍及使用什么是Flex弹性布局&#xff1f;Flex容器与Flex项目Flex属性详解 2. 轮播图mock遍历数据简述轮播图的作用和意义处理mock数据的重要性使用Mock模拟数据遍历 3. 首页布局总结 引言 在现代网页开发中&#xff0c;灵活性和响应式布局是至关重要…...

自动化办公篇之python

1、如果没有安装xlwings库&#xff0c;先在控制台pip install xlwings,然后点击运行&#xff0c;创建四个空excel表 。 import xlwings as xw app xw.App(visibleTrue,add_bookFalse) for dept in ["技术部","销售部","运营部","财务部&q…...

华为云云耀云服务器L实例评测|使用sysbench对云耀云服务器mysql的性能测试

目录 引言 1 在centos上安装mysql 1.1 在云服务器上安装 Docker 1.2 在 Docker 中运行 MySQL 容器 2 安装sysbench并进行性能测试 2.1 安装和配置 sysbench 2.2 运行 sysbench 性能测试 3 分析测试结果 3.1 运行结果 3.2 对运行结果进行翻译 3.3 性能分析 4 清理…...

【译】快速开始 Compose 跨平台项目

原文&#xff1a; Compose Multiplatform application 作者&#xff1a;JetBrains 注意 Compose Multiplatform 中的 iOS 部分目前处于 Alpha 状态。以后可能会有不兼容的更改&#xff0c;届时也许需要手动进行迁移。 你可以使用这个模板来开发同时支持桌面、安卓和 iOS 的跨平…...

高性能服务器之mysql数据库连接池设计与实现

高性能服务器之mysql数据库连接池设计与实现 链接&#xff1a;https://pan.baidu.com/s/1ISZ1Sy087GUeaekW3sV_oA?pwd0t9q 内存泄漏 链接&#xff1a;https://pan.baidu.com/s/1AWPnbuzVSpoP-CnEgJk5hg?pwdaieq 提取码&#xff1a;aieq 线程池 链接&#xff1a;https://pan…...

黑客技术(自学)——网络安全

前言 前几天发布了一篇 网络安全&#xff08;黑客&#xff09;自学 没想到收到了许多人的私信想要学习网安黑客技术&#xff01;却不知道从哪里开始学起&#xff01;怎么学&#xff1f;如何学&#xff1f; 今天给大家分享一下&#xff0c;很多人上来就说想学习黑客&#xff0c…...

day06-前后端项目上传到gitee、后端多方式登录接口、发送短信功能、发送短信封装、短信验证码接口、短信登录接口

1 前后端项目上传到gitee 2 后端多方式登录接口 2.1 序列化类 2.2 视图类 2.3 路由 3 发送短信功能 4 发送短信封装 4.0 目录结构 4.1 settings.py 4.2 sms.py 5 短信验证码接口 6 短信登录接口 6.1 视图类 6.2 序列化类 1 前后端项目上传到gitee # 我们看到好多开源项目…...

【SA8295P 源码分析 (一)】83 - SA8295P HQNX + Android 完整源代码下载方法介绍

【SA8295P 源码分析 一】83 - SA8295P HQNX + Android 完整源代码下载方法介绍 一、高通官网 Chipcode 下载步骤介绍1.1 高通Chipcode 下载步骤1.2 高通 ReleaseNote 下载方法二、高通 HQX 代码介绍2.1 完整的 HQX 代码结构:sa8295p-hqx-4-2-4-0_hlos_dev_qnx.tar.gz2.2 sa829…...

文献阅读快速法-ChatPDF

如题&#xff0c;直接提供给大家一款能够快速阅读文档的好工具——iTextMaster。 iTextMaster是一款免费的pdf阅读浏览器&#xff0c;上传pdf文档后等待几秒钟&#xff0c;AI就会自动反馈给用户关于文档的摘要总结。十分的方便且实用。 ChatPDF为您提供简洁的文档摘要。对于那…...

Jenkins 内存占用

查看内存占用 # ps aux | grep 9090 root 130854 0.0 0.0 8900 708 pts/1 S 16:23 0:00 grep --colorauto 9090 root 4010748 0.2 30.7 5826500 2502884 ? Ssl Oct13 8:55 /usr/bin/java -Djava.awt.headlesstrue -jar /usr/share/java/jenkins…...

Go Routine 调度策略与公平性控制

Go Routine调度策略与公平性控制 在Go语言中&#xff0c;Goroutine作为轻量级线程&#xff0c;是并发编程的核心。其高效的调度机制和公平性控制保证了高并发场景下的性能与稳定性。本文将深入探讨Goroutine的调度策略及其公平性控制机制&#xff0c;帮助开发者理解其底层原理…...

数据仓库实战:数据分层设计全面解析——如何大幅提升数据可用性与性能

数据仓库实战&#xff1a;数据分层设计全面解析——如何大幅提升数据可用性与性能摘要一、基础认知&#xff1a;数据仓库为什么必须做数据分层&#xff1f;1.1 核心定义1.2 不做分层的严重问题1.3 数据分层核心目标二、标准架构&#xff1a;数据仓库经典 5 层设计&#xff08;企…...

差动保护:电力系统的核心安全保障技术

差动保护电流差动保护是电力系统的"铁闸门"&#xff0c;核心思想简单粗暴&#xff1a;比较设备两端的电流是否对得上账。就像两个会计同时记账&#xff0c;如果两边数据差太多&#xff0c;肯定有人搞鬼——要么线路漏电&#xff0c;要么设备内部短路。举个接地气的例…...

从零到一:OpenObserve云原生可观测性平台容器化部署实战指南

从零到一&#xff1a;OpenObserve云原生可观测性平台容器化部署实战指南 【免费下载链接】openobserve OpenObserve is an open-source observability platform for logs, metrics, traces, and frontend monitoring. A cost-effective alternative to Datadog, Splunk, and El…...

炉石传说脚本完整教程:3步实现自动化游戏,解放双手提升效率

炉石传说脚本完整教程&#xff1a;3步实现自动化游戏&#xff0c;解放双手提升效率 【免费下载链接】Hearthstone-Script Hearthstone script&#xff08;炉石传说脚本&#xff09; 项目地址: https://gitcode.com/gh_mirrors/he/Hearthstone-Script 还在为炉石传说每日…...

S2-Pro卷积神经网络(CNN)可视化教学:原理详解与模型部署

S2-Pro卷积神经网络&#xff08;CNN&#xff09;可视化教学&#xff1a;原理详解与模型部署 1. 当AI遇见深度学习教学 想象一下&#xff0c;当你第一次接触卷积神经网络时&#xff0c;是不是被那些抽象的概念和复杂的数学公式搞得晕头转向&#xff1f;传统的学习方式往往需要…...

3步解决Windows视频播放难题:LAV Filters开源解码器终极方案

3步解决Windows视频播放难题&#xff1a;LAV Filters开源解码器终极方案 【免费下载链接】LAVFilters LAV Filters - Open-Source DirectShow Media Splitter and Decoders 项目地址: https://gitcode.com/gh_mirrors/la/LAVFilters 你是否曾经遇到过这样的尴尬场景&…...

LLaMA-Factory SFT微调避坑指南:你的checkpoint真的能用吗?

LLaMA-Factory SFT微调避坑指南&#xff1a;你的checkpoint真的能用吗&#xff1f; 当你沉浸在LLaMA-Factory的SFT微调过程中&#xff0c;突然遇到GPU宕机或进程卡死&#xff0c;那种感觉就像跑马拉松时被人绊了一跤。更糟的是&#xff0c;日志里没有任何报错信息&#xff0c;只…...

DYOR 中梁控股 02772.HK

文章目录1. 公司概况&#xff1a;已暴雷的百强房企1.1 简介1.2 股权结构2.3 核心资质与定位2. 财务表现&#xff1a;深度亏损&#xff0c;收入腰斩2.1 2025年核心财务数据2.2 偿债能力与流动性2.3 估值与市场表现2.4 成长性对比3. 销售情况&#xff1a;持续萎缩&#xff0c;未见…...

双通道并用:OpenClaw同时接入gemma-3-12b-it与本地知识库

双通道并用&#xff1a;OpenClaw同时接入gemma-3-12b-it与本地知识库 1. 为什么需要混合架构 在个人自动化场景中&#xff0c;我发现纯粹依赖大模型存在两个痛点&#xff1a;一是高频重复问题消耗大量Token&#xff0c;二是模型对专业领域知识的掌握有限。上个月整理技术文档…...