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

【音视频】ffplay源码解析-PacketQueue队列

包队列架构位置

在这里插入图片描述


对应结构体源码

MyAVPacketList

typedef struct MyAVPacketList {AVPacket		pkt;    //解封装后的数据struct MyAVPacketList	*next;  //下一个节点int			serial;     //播放序列
} MyAVPacketList;

PacketQueue

typedef struct PacketQueue {MyAVPacketList	*first_pkt, *last_pkt;  // 队首,队尾指针int		nb_packets;   // 包数量,也就是队列元素数量int		size;         // 队列所有元素的数据大小总和int64_t		duration; // 队列所有元素的数据播放持续时间int		abort_request; // 用户退出请求标志int		serial;         // 播放序列号,和MyAVPacketList的serial作用相同,但改变的时序稍微有点不同SDL_mutex	*mutex;     // 用于维持PacketQueue的多线程安全(SDL_mutex可以按pthread_mutex_t理解)SDL_cond	*cond;      // 用于读、写线程相互通知(SDL_cond可以按pthread_cond_t理解)
} PacketQueue;

内存管理

  • 内部是一个链表队列MyAVPacketList,存放数据包
    • 链表队列适用于不确定缓存区具体大小的情形
  • 完全由PacketQueue维护管理
    • 放节点 put时malloc
    • 取节点 get时free
  • 锁机制——线程安全
    • put前后,加锁解锁
    • get前后,加锁解锁
  • 写端位于解复用线程,读端位于解码线程

serial字段

  • 为了区分seek前后的连续帧

  • 做法:seek之后,后一段的put节点serial+1

  • 场景

    用户拖动进度条,seek操作,之前缓存的帧不能播放了,要播放seek操作之后新缓存的帧,
    为了区别2段帧,加入serial字段
    

队列大小设置

PacketQueue 是一种链表式的队列

  • 内存充足情况下:可以不限制将数据包放入队列中,不需要考虑队列的大小。
  • 控制队列大小:如果我们需要控制队列的大小,我们可以使用以下三个变量来限制队列节点的数量:
    • size:控制队列中数据包的总大小。
    • duration:控制队列中数据包的总播放时间。
    • nb_packets:控制队列中数据包的数量。

http://www.lryc.cn/news/170104.html

相关文章:

  • C++ 霍夫变换圆形检测
  • ​南阳师范学院图书馆藏《​乡村振兴战略下传统村落文化旅游设计》许少辉八一新著——2023学生开学季辉少许
  • 如何将你在树莓派上部署的 IoT 物联网 MQTT 服务发布到公网?
  • 系统架构设计师(第二版)学习笔记----软件工程
  • C与C++字符串分割方法示例汇总
  • HTTP代理与VPN:网络代理技术的比较
  • 免费低代码平台,助企业高效管理任务
  • 基于conda的相关命令
  • 【微信小程序】swiper的使用
  • iText实战--PDF和iText 简介
  • 「大数据-0.1」虚拟机VMware安装、配置、使用、创建大数据集群教程
  • 【HTTP】GET 和 POST 的区别
  • Unity Asset Bundle Browser 工具
  • 使用Linkerd实现流量管理:学习如何使用Linkerd的路由规则来实现流量的动态控制
  • 1462. 课程表 IV
  • QTday2
  • thrift的简单使用
  • Python实现猎人猎物优化算法(HPO)优化随机森林分类模型(RandomForestClassifier算法)项目实战
  • 2023年7月京东平板电脑行业品牌销售排行榜(京东销售数据分析)
  • HTML显示中文空格字符,emsp;一个中文字符,ensp;半个中文字符
  • Python基础指令(上)
  • Python之FastAPI返回音视频流
  • 文件名批量重命名与翻译的实用指南
  • 上海长宁来福士P2.5直径4米无边圆形屏圆饼屏圆面屏圆盘屏平面圆屏异形创意LED显示屏案例
  • Linux 企业级夜莺监控分析工具远程访问
  • react使用内联css样式的注意点
  • 优先队列PriorityQueue源码解析
  • 前端开发中常见的跨域问题及解决方案
  • (超详解)堆排序+(图解)
  • Hadoop的YARN高可用