ffplay简介
本文为相关课程的学习记录,相关分析均来源于课程的讲解,主要学习音视频相关的操作,对字幕的处理不做分析
ffplay播放器的意义
ffplay.c是FFmpeg源码⾃带的播放器,调⽤FFmpeg和SDL API实现⼀个⾮常有⽤的播放器。
ffplay实现了播放器的主体功能,掌握其原理对于我们独⽴开发播放器⾮常有帮助。
ffplay大致框架
播放初始化
- 初始化packet queue
- 初始化frame queue
- 初始化外部时钟clock
- 创建数据读取线程read frame
线程的划分
- 数据读取线程
- 打开媒体⽂件
- 开对应码流的decoder以及初始化对应的audio、video、subtitle输出队列
- 创建decoder线程,audio、video和subtitle的解码线程独⽴
- 调⽤av_read_frame读取packet,并根据steam_index放⼊不同stream对应的packet队列
- ⾳频解码
- 从packet queue读取packet,解出frame后放⼊frame queue
- 视频解码
- 从packet queue读取packet,解出frame后放⼊frame queue
- 字幕解码
- 从packet queue读取packet,解出frame后放⼊frame queue
- ⾳频播放(或者回调函数)
- 从frame queue读取frame进⾏播放
- 视频播放(ffplay⽬前是在main主线程进⾏视频播放)
- 从frame queue读取frame进⾏播放
- 字幕播放
- ffplay⽬前是在main主线程进⾏字幕播放) 从frame queue读取frame进⾏播放
- 控制响应(播放/暂停/快进/快退等)(ffplay⽬前是在main主线程进⾏播放控制 event loop)
packet队列的设计
- 线程安全,⽀持互斥、等待、唤醒
- 缓存数据⼤⼩
- 缓存包数
- 队列播放可持续时间
- 进队列/出队列等
frame队列的设计
- 线程安全,⽀持互斥、等待、唤醒
- 缓存帧数
- ⽀持读取数据⽽不出队列
- 进队列/出队列等
⾳视频同步
- ⾳频同步
- 视频同步
- 外部时钟同步
相关文章:
![](https://img-blog.csdnimg.cn/c41c23e7b1574a658ac2b9b4c697a100.png#pic_center)
ffplay简介
本文为相关课程的学习记录,相关分析均来源于课程的讲解,主要学习音视频相关的操作,对字幕的处理不做分析 ffplay播放器的意义 ffplay.c是FFmpeg源码⾃带的播放器,调⽤FFmpeg和SDL API实现⼀个⾮常有⽤的播放器。 ffplay实现了播…...
![](https://www.ngui.cc/images/no-images.jpg)
mysql之limit语句详解
一、介绍 LIMIT是MySQL内置函数,其作用是用于限制查询结果的条数。 二、使用 1. 语法格式 LIMIT [位置偏移量,] 行数 其中,中括号里面的参数是可选参数,位置偏移量是指MySQL查询分析器要从哪一行开始显示,索引值从0开始ÿ…...
![](https://www.ngui.cc/images/no-images.jpg)
4.while循环
1、while语句的语法结构如下: while语句可以在条件表达式为真的前提下,循环执行指定的一段代码,直到表达式不为真时结束循环。 1.1while语法结构 while(条件表达式){// 循环体} 执行思路: 1、执行思路 当条件表达式结果为tru…...
![](https://img-blog.csdnimg.cn/c73d0b0c92c94b4ebee235112127ed68.jpeg#pic_center)
【雕爷学编程】 MicroPython动手做(35)——体验小游戏2
知识点:什么是掌控板? 掌控板是一块普及STEAM创客教育、人工智能教育、机器人编程教育的开源智能硬件。它集成ESP-32高性能双核芯片,支持WiFi和蓝牙双模通信,可作为物联网节点,实现物联网应用。同时掌控板上集成了OLED…...
![](https://www.ngui.cc/images/no-images.jpg)
mouseover 和 mouseenter
mouseover 和 mouseenter 事件是 JavaScript 中常用的两个鼠标事件,它们有一些区别: 触发条件: mouseover 事件在鼠标指针从元素外部进入元素内部时触发,包括子元素。换句话说,只要鼠标进入元素或其子元素,就会触发 mo…...
![](https://img-blog.csdnimg.cn/72eb640e48414ad1b229141284bc3d43.png)
[JavaScript游戏开发] 绘制Q版地图、键盘上下左右地图场景切换
系列文章目录 第一章 2D二维地图绘制、人物移动、障碍检测 第二章 跟随人物二维动态地图绘制、自动寻径、小地图显示(人物红点显示) 第三章 绘制冰宫宝藏地图、人物鼠标点击移动、障碍检测 第四章 绘制Q版地图、键盘上下左右地图场景切换 文章目录 系列文章目录前言一、本章节…...
![](https://img-blog.csdnimg.cn/b58aa9fd984b4e8cb43438529e2c20ff.png)
CI/CD持续集成持续发布(jenkins)
1.背景 在实际开发中,我们经常要一边开发一边测试,当然这里说的测试并不是程序员对自己代码的单元测试,而是同组程序员将代码提交后,由测试人员测试; 或者前后端分离后,经常会修改接口,然后重新…...
![](https://img-blog.csdnimg.cn/19f7e8e515cd4eada3d3c67fbeddce92.png)
Qt5.14.2+QtCreator+PDB 查看源码
1. 在Creator添加源码 2. 安装PDB文件 Qt下载时没有整合最新的PDB文件下载,如果没有安装PDB文件,即使安装了src也无法调试。 双击MaintenanceTool.exe->设置->资料档案库->临时资料档案库->添加按钮,添加如下下载源:…...
![](https://img-blog.csdnimg.cn/d2372fdafe1a4d6399bb9a8fe0549d31.png)
DOM基础获取元素+事件基础+操作元素
一.DOM简介 DOM,全称“Document Object Model(文档对象模型)”,它是由W3C定义的一个标准。 在实际开发中,我们有时候需要实现鼠标移到某个元素上面时就改变颜色,或者动态添加元素或者删除元素等。其实这些效…...
![](https://www.ngui.cc/images/no-images.jpg)
MATLAB——感知神经网络学习程序
学习目标:从学习第一个最简单的神经网络案例开启学习之路 感知器神经网络 用于点的分类 clear all; close all; P[0 0 1 1;0 1 0 1]; %输入向量 T[0 1 1 1]; %目标向量 netnewp(minmax(P),1,hardlim,lea…...
![](https://img-blog.csdnimg.cn/51a3aceb2ba84aa5a5a2d7b8ce28a09f.png#pic_center)
SpringBoot中事务失效的原因
SpringBoot中事务失效的原因 文章目录 SpringBoot中事务失效的原因一、事务方法非public修饰二、非事务方法调用事务方法三、事务方法的异常被捕获四、事务异常类型不对五、事务传播行为不对六、没有被Spring管理6.1、暴漏代理对象6.2、使用代理对象 常见的事务失效原因包括如下…...
![](https://www.ngui.cc/images/no-images.jpg)
Webstorm的一些常用快捷键
下面是Webstorm的一些常用快捷键: ctrl shift n: 打开工程中的文件,目的是打开当前工程下任意目录的文件。ctrl j: 输出模板ctrl b: 跳到变量申明处ctrl alt T: 围绕包裹代码(包括zencoding的Wrap with Abbreviation)ctrl []: 匹配 {}[]ctrl F1…...
![](https://img-blog.csdnimg.cn/547c02267e3e4411947290f0c10864dd.jpeg)
系统集成项目成本管理
在项目中,成本是指项目活动或其组成部分的货币价值或价格,包括为实施、完成或创造该活动或其组成部分所需资源的货币价值。具体的成本一般包括直接工时、其他百接费用、间接工时、其他间接费用以及采购价格。 项目全过程所耗用的各种成本的总和为项目成本…...
![](https://img-blog.csdnimg.cn/03beeccc97234ae99c47ca9287760dab.png)
Spring Boot整合ES的两种方式
使用Spring Data Elasticsearch Starter 在Spring Boot中整合Elasticsearch的方式之一是使用Elasticsearch的官方Spring Data Elasticsearch Starter。该Starter提供了对Elasticsearch的高级集成,简化了配置和管理Elasticsearch客户端。 下面是使用Spring Data E…...
![](https://www.ngui.cc/images/no-images.jpg)
Ajax_3 Ajax原理+ (XMLHttpRequest + Promise )+ 封装一个axios插件库,实现功能。
Ajax_3 Ajax原理 01-Ajax原理-XMLHttpRequest 使用XMLHttpRequest 步骤: 创建XMLHttpRequest对象配置请求方法请求url网址监听loadend事件,接受响应结果发起请求 需求:使用XMLHttpRequest对象与服务器通信 代码示例 // 1. 创建 XMLHttpReq…...
![](https://img-blog.csdnimg.cn/1bffefe58547429992b0386b1e740f50.png)
计算机网络(7) --- UDP协议和TCP协议
计算机网络(6) --- https协议_哈里沃克的博客-CSDN博客https协议https://blog.csdn.net/m0_63488627/article/details/132112683?spm1001.2014.3001.5501 目录 1.补充知识 1.PORT端口号 2.端口号范围划分 3.知名端口号 2.UDP协议 1.UDP报头 2.U…...
![](https://img-blog.csdnimg.cn/13984f16c7c54aa0bad94dcb729b9ae4.png)
Jenkins 修改默认管理员帐号
1、新增一个新的超级管理员用户,并验证能正常登录 2、进入 Jenkins 用户管理目录: /data/software/jenkins/users 3、修改超级管理文件夹的名称为其他名称,如:mv admin_*** ifadm_*** 4、重启Jenkins容器...
![](https://img-blog.csdnimg.cn/c609f049d96e42a6aa5ffa2bf0e90494.png)
FK-坦克大战制作(一)菜单制作
1、Cocos Creator新建2d项目 2.在资源管理器中新建场景menu 新建scences文件夹》新建场景》改名为menu 3.在层级管理器的Canvas下新建Layout节点,并在此节点下新建Label标签 4.双击Label,在属性检查器中进行编辑 5. 添加动画:(对文本进行放大…...
![](https://img-blog.csdnimg.cn/94ffea19f34a4013b4ae367bd8e989cd.png)
39.利用matlab寻找素数(matlab程序)
1.简述 MATLAB嵌套循环允许使用一个循环在另一循环内,下面用一个嵌套循环来把所有从1到100的素数显示出来。 2.代码 %% 学习目标:寻找素数 clear sum5; %求0~100素数之和 ss0; %用来标定是否是素数,0表示不是 p…...
![](https://img-blog.csdnimg.cn/1286229ece4249cc940a2afb69b874a4.gif)
卡尔曼滤波算法demo
代码 learn_kalman.py #codingutf-8 import numpy as np import time from kinematic_model import freedrop from controller import kalman_filterimport matplotlib.pyplot as plt # 支持中文 import matplotlib as mpl mpl.rcParams[font.family]SimHei plt.rcParams[a…...
![](https://img-blog.csdnimg.cn/img_convert/2215419bc9485f8ea30cdf128d711227.png)
MySQL游标(二十九)
二八佳人体似酥,腰悬利剑斩愚夫,虽然不见人头落,暗里教君骨髓枯。 上一章简单介绍了MySQL流程控制(二十八) ,如果没有看过,请观看上一章 一. 游标 一.一 什么是游标 虽然我们也可以通过筛选条件 WHERE 和 HAVING,或者是限定返回记录的关键…...
![](https://img-blog.csdnimg.cn/img_convert/2340f93052f59d776cbd65f813d09b5a.png)
内生安全构建数据存储
一、数据安全成为防护核心,存储安全防护不容有失 1、数据作为企业的核心资产亟需重点保护,数据安全已成网络空间防护核心 2、国家高度重视关键信息基础设施的数据安全,存储安全已成为审核重点 二、存储安全是数据安全的关键一环,应…...
![](https://img-blog.csdnimg.cn/072b4e2a1bb045d091c83d0e2b41baaa.png)
Docker+Consul+Registrator 实现服务注册与发现
第四阶段 时 间:2023年8月8日 参加人:全班人员 内 容: DockerConsulRegistrator 实现服务注册与发现 目录 一、服务注册中心引言 CAP理论是分布式架构中重要理论: 二、服务注册中心软件 (一)Zoo…...
![](https://img-blog.csdnimg.cn/e5bb0674cdb44ce79fe77d99e3632e33.png)
深入学习JVM —— GC垃圾回收机制
前言 前面荔枝已经梳理了有关JVM的体系结构和类加载机制,也详细地介绍了JVM在类加载时的双亲委派模型,而在这篇文章中荔枝将会比较详细地梳理有关JVM学习的另一大重点——GC垃圾回收机制的相关知识,重点了解的比如对象可达性的判断、四种回收…...
![](https://www.ngui.cc/images/no-images.jpg)
Centos7.6 + Apache Ranger 2.4.0编译(docker方式)
目录 一、Ranger简介 1、组件列表 2、支持的数据引擎服务 二、主机环境准备 1、关闭防火墙 2、关闭SELINUX 3、安装docker 4、下载Ranger源码包 5、下载Maven安装包 三、编译Ranger源码 1、修改官方包中的build_ranger_using_docker.sh 2、运行脚本编译 3、编译检…...
![](https://www.ngui.cc/images/no-images.jpg)
LVS-DR模式集群配置
四台虚拟机 node1:128 node2:135 RS端: node3:130 node4:132 [rootnode2 ~]# yum install -y ipvsadm #配置LVS虚拟IP,没有ifconfig命令则先安装 [rootnode2 ~]# yum install net-tools -y #配置VIP [root…...
![](https://www.ngui.cc/images/no-images.jpg)
【数据分析】pandas( 二)
目录 简介: 一,1.1来自Series字典或字典 1.2 来自ndarray或者列表的字典: 1.3来自结构化或记录数组; 1.4来自字典列表: 1.4来自元组的字典: 1.5 来自Series 二,代替构造函数: 2.1DataFram…...
![](https://img-blog.csdnimg.cn/8c128999df5f48f59cb456d204b265cb.png)
ffmpeg工具实用命令
说明:ffmpeg是一款非常好用的媒体操作工具,包含了许多对于视频、音频的操作,有些视频播放器里面实际上就是使用了ffmpeg。本文介绍ffmpeg的使用以及一些较为实用的命令。 安装 ffmpeg是命令行操作的,不需要安装,可在…...
![](https://www.ngui.cc/images/no-images.jpg)
zabbix API笔记
博客园原文 python简单demo 输出id为111主机的主机群组信息 import requests import json request_headers {"Content-Type": "application/json"} zabbix_url "http://xxx.xxx.xxx.xxx:8080/zabbix/api_jsonrpc.php" get_hostgroup_from_h…...
![](https://www.ngui.cc/images/no-images.jpg)
[HDLBits] Mt2015 q4a
Module A is supposed to implement the function z (x^y) & x. Implement this module. module top_module (input x, input y, output z);assign z(x^y)&x; endmodule...
![](https://img-blog.csdnimg.cn/20210105103242606.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzMyMjAxMDE1,size_16,color_FFFFFF,t_70)
腾讯网站开发规范/站长网站提交
EEG 基础 脑电图(Electroencephalogram,EEG)是通过精密的电子仪器,从头皮上将脑部的自发性生物电位加以放大记录而获得的图形,是通过电极记录下来的脑细胞群的自发性、节律性电活动。有常规脑电图、动态脑电图监测、视频脑电图监…...
![](https://img-blog.csdnimg.cn/img_convert/7e43c44b2b18bdf6ccfc67393358440f.png)
机械网站案例/百度搜索网页
大家好,我是煎鱼。最近我有一个朋友公司踩了不少消息队列(MQ)的坑,让人无奈不已。因此计划写 MQ 系列的技术文章,来科普更多这块的知识。目前 MQ 也是互联网应用中非常常用的基础组件了,面试特爱问。基本有…...
![](https://www.oschina.net/img/hot3.png)
私人做网站可靠吗/李江seo
2019独角兽企业重金招聘Python工程师标准>>> dim name dim fs, sname Inputbox("姓名") msgbox(name)set fs wscript.createobject("scripting.filesystemobject") fs为FSO实例if (fs.folderexists("c:\temp")) then 判断c:\te…...
![](https://static.oschina.net/uploads/user/1124/2248293_100.jpg?t=1416124120000)
南平住房和城乡建设部网站/新品牌推广策划方案
ASP.NET MVC 中 WebGrid 的 6 个重要技巧 https://www.oschina.net/translate/webgrid-in-asp-net-mvc-important-tips 介绍 当一个 Webform 开发者转做 MVC 开发的时候, 他会发现, 许多自己喜欢的东东不见了. 没有代码隐藏模型(behind code), 没有 view state, 没有页面生命周…...
![](https://images2017.cnblogs.com/blog/793034/201801/793034-20180122174826022-1145524321.jpg)
wordpress 登录后查看/网站关键词优化wang
一、控制面板中安装Telnet相关组件 单击“开始”菜单,单击“控制面板”在控制面板中单击打开“程序和功能”项目在左侧的蓝色区域界面单击“打开或关闭 Windows 功能”弹出“Windows 功能”对话框,在列表中勾选“Telnet客户端”,单击“确定”…...
![](/images/no-images.jpg)
wordpress 主题banner/seo批量建站
• 命令用法 – rsync [选项...] 源目录 目标目录 • 同步与复制的差异 – 复制:完全拷贝源到目标 – 同步:增量拷贝,只传输变化过的数据 • rsync操作选项– -n:测试同步过程,不做实际修改– --delete:删除目标文件夹内多余的文档– -a:归档模式,相当于-rlptgoD– -v:显示详细…...