ffplay分析(从启动到读取数据线程插入到字幕、音频、视频解码前的队列操作)

《ffplay的数据结构分析》
《ffplay分析(视频解码线程的操作)》
《ffplay分析(音频解码线程的操作)》
《ffplay 分析(音频从Frame(解码后)队列取数据到SDL输出)》
《ffplay分析 (视频从Frame(解码后)队列取数据到SDL输出)》
《ffplay分析 (音视频同步:主时钟为音频)》
《ffplay分析 (暂停 / 播放处理)》
《ffplay分析 (seek操作处理)》

ffplay从启动到读取线程的操作分析(版本:ffmpeg-4.2.1)

  • 一、分析:
    • 1、main():初始化ffmpeg
    • 2、main():ffplay 命令行参数的解析处理
    • 3、main():SDL初始化
    • 4、main():解码器的冲刷Packet初始化
    • 5、main():SDL创建窗口
    • 6、main():打开各种流并且启动读取数据线程
    • 7、stream_open():分配VideoState保存文件名
    • 8、stream_open():初始化Frame队列(解码后)/Packet队列(解码前),初始化用于控制读取线程休眠的条件变量
    • 9、stream_open():初始化时钟、初始化音量
    • 10:stream_open():启动读取数据线程
    • 11:read_thread():初始化各个流的默认索引值、初始化ffmpeg读取中断回调函数
    • 12、read_thread():打开文件操作(avformat_open_input()、avformat_find_stream_info())
    • 13、read_thread():处理是否指定播放的起始时间和是否是实时流数据
    • 14、read_thread():设置各个流的流索引
    • 15、read_thread():设置显示窗口宽高
    • 16、read_thread():打开各个流操作
    • 17、read_thread():实时流判断设置缓冲区不限制
    • 18、read_thread():循环读取数据(判断是否请求退出、是否暂停网络流操作)
    • 19、read_thread():循环读取数据(判断是否有seek操作)
    • 20、read_thread():循环读取数据(判断video是不是attachments_pic)
    • 21、read_thread():循环读取数据(判断队列是否已经有足够的数据)
    • 22、read_thread():循环读取数据(判断是否已经播放完毕)
    • 23、read_thread():循环读取数据(执行av_read_frame()读取帧数据)
    • 24、read_thread():循环读取数据(判断帧是否在播放范围内,插入到相应的Packet(解码前)队列)
    • 25、read_thread():循环读取数据(线程退出处理)

一、分析:

1、main():初始化ffmpeg

在这里插入图片描述

2、main():ffplay 命令行参数的解析处理

在这里插入图片描述

3、main():SDL初始化

在这里插入图片描述

4、main():解码器的冲刷Packet初始化

在这里插入图片描述

5、main():SDL创建窗口

在这里插入图片描述

6、main():打开各种流并且启动读取数据线程

在这里插入图片描述

7、stream_open():分配VideoState保存文件名

在这里插入图片描述

8、stream_open():初始化Frame队列(解码后)/Packet队列(解码前),初始化用于控制读取线程休眠的条件变量

在这里插入图片描述

9、stream_open():初始化时钟、初始化音量

在这里插入图片描述

10:stream_open():启动读取数据线程

在这里插入图片描述

11:read_thread():初始化各个流的默认索引值、初始化ffmpeg读取中断回调函数

在这里插入图片描述

12、read_thread():打开文件操作(avformat_open_input()、avformat_find_stream_info())

在这里插入图片描述
在这里插入图片描述

13、read_thread():处理是否指定播放的起始时间和是否是实时流数据

在这里插入图片描述

14、read_thread():设置各个流的流索引

在这里插入图片描述

15、read_thread():设置显示窗口宽高

在这里插入图片描述

16、read_thread():打开各个流操作

在这里插入图片描述

17、read_thread():实时流判断设置缓冲区不限制

在这里插入图片描述

18、read_thread():循环读取数据(判断是否请求退出、是否暂停网络流操作)

在这里插入图片描述

19、read_thread():循环读取数据(判断是否有seek操作)

在这里插入图片描述

20、read_thread():循环读取数据(判断video是不是attachments_pic)

在这里插入图片描述

21、read_thread():循环读取数据(判断队列是否已经有足够的数据)

在这里插入图片描述

22、read_thread():循环读取数据(判断是否已经播放完毕)

在这里插入图片描述

23、read_thread():循环读取数据(执行av_read_frame()读取帧数据)

在这里插入图片描述

24、read_thread():循环读取数据(判断帧是否在播放范围内,插入到相应的Packet(解码前)队列)

在这里插入图片描述

25、read_thread():循环读取数据(线程退出处理)

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python3和python2 优势_python3和python2的区别

1.性能Py3.0运行 pystone benchmark的速度比Py2.5慢30%。Guido认为Py3.0有极大的优化空间,在字符串和整形操作上可以取得很好的优化结果。Py3.1性能比Py2.5慢15%,还有很大的提升空间。2.编码Py3.X源码文件默认使用utf-8编码,这就使得以下代码…

并发进程同步

P是荷兰语Proberen(测试)的首字母。为阻塞原语,负责把当前进程由运行状态转换为阻塞状态,直到另外一个进程唤醒它。也就是不好的一方面。 V是荷兰语Verhogen(增加)的首字母。为唤醒原语,负责把一…

寄存器和pin_16x2 LCD的PIN图和寄存器

寄存器和pinIn these years the LCD is finding widespread use. It has replaced the LEDs or other multi-segment LEDs.This is due to the following reasons: 近年来, LCD正在广泛使用。 它已替换LED或其他多段LED,原因如下: The decli…

【Java IO知识】读取中文乱码问题解决

读取文件主要是要设置读取的输入流如InputStreamReader时要设置读取的解码格式,要和文件本身的编码格式相同,这样读取出来的才不会乱码。 InputStreamReader reader new InputStreamInputReader(input, "编码格式"); ANSI是"gbk" 注:必须是在读取的时候就…

ffplay分析(视频解码线程的操作)

《ffplay的数据结构分析》 《ffplay分析(从启动到读取线程的操作)》 《ffplay分析(音频解码线程的操作)》 《ffplay 分析(音频从Frame(解码后)队列取数据到SDL输出)》 《ffplay分析 (视频从Fram…

【转】.NET深入学习笔记(4):深拷贝与浅拷贝(Deep Copy and Shallow Copy)

今天继续利用准备WSE安全开发文章的空闲时间,完善《.NET深入学习笔记》系列(基本都是.Net重要的知识点,我都做了详细的总结,是什么、为什么、和怎么实现)。想必很多人也接触过这两个概念。做过C的人对深浅拷贝的概念一…

c语言数组-1_C数组-智能问题与解答

c语言数组-1C programming Arrays (One-D Array, Two-D Array) Aptitude Questions and Answers : In this section you will find C Aptitude Questions and Answers on One Dimensional (1D) and Two Dimensional (2D) array. C编程数组(一维数组,二维数组)能力问…

abap 添加alv上的工具栏的按钮_Excel里的置顶功能——快速访问工具栏

100万职场人都在看后台回复礼包领199元职场干货大家好,我是小可~今天跟大家分享一个提高Excel操作效率的小技巧自定义你的快速访问工具栏设置后的效果▼▼▼也就是把你最经常用到的两三个功能放到快速访问工具栏可以一眼就找到这些功能不需要靠快捷键或者功能选项卡…

用递归法求1²+2²+...+n²的值

思路分析: 谈到递归,我个人会联想到数学里面的通式。因为递归调用的函数的对应法则是相同的。例如这道题:f(x)=x。这个就是函数通式,只不过把每个求得的结果进行累加求和即可。用户输入5的时候,会出现f(5)=5,之后再进行x减一操作,执行f(4)=4,最后将每个进行累加即可。…

机器学习资料推荐

机器学习资料推荐 机器学习的资料 1:斯坦福大学视频(作为入门教程,网易有中文字幕,而且讲义也有翻译版本)20集200左右讲义 2:机器学习 Tom M.Mitchell(虽然出版10多年,但是通俗易懂的内容,让读者对机器学习…

ffplay源码(版本:ffmpeg-4.2.1)

ffplay源码(版本:ffmpeg-4.2.1) /** Copyright (c) 2003 Fabrice Bellard** This file is part of FFmpeg.** FFmpeg is free software; you can redistribute it and/or* modify it under the terms of the GNU Lesser General Public* Lic…

stringwriter_Java StringWriter toString()方法与示例

stringwriterStringWriter类的toString()方法 (StringWriter Class toString() method) toString() method is available in java.io package. toString()方法在java.io包中可用。 toString() method is used to represent the buffer current value in terms of string. toStr…

编写一个函数,计算下式当n=10和n=100的值。

思路分析: 首先,我个人看法:当我拿到这道题的时候,我会把它当成一道数学题对待。分子是动的,恒为一,分母是进行依次增加的。且奇数项为正,偶数项为负。因为设计运算出现的是分数,故,设计选取存储类型为double。 找出问题: ①正负号问题、②分母问题、③累计求和问题…

POJ 1001 大数的乘法

对这道题的理解 大数的乘法 关键是 实型的 那么首先就是数出来小数点有几位这个相信很简单 从后面往前数刚开始0 不算接着就是遇到小数点结束如果没有小数点 那么置为0 接着就是输出地时候首先算出小数点的位置然后输出 你想怎么样都行 从后往前数这个时候输出 那么就是你也…

铃木uy125摩托车机油_济南铃木安徽发布国四新车—6480元瑞梦125、9380元UY125

安徽合肥,这个具有两千多年历史的古城,以“三国故地、包拯家乡”而闻名海内外,2019年4月22日济南铃木为这座城市带来一份惊喜,今年正值国四执行,济南铃木旗下两款国四新车瑞梦125与UY125正式在合肥与大家相见。济南铃木…

Andrej Karpathy最新大模型入门视频讲解

最近这两天,特斯拉前AI总监 现在在OpenAI的安德烈卡帕西(Andrej Karpathy)的新教程火了 这次 他专门面向普通大众做了一个关于大语言模型的科普视频 时长1个小时,全部为“非技术介绍”, 涵盖了模型推理、训练、微…

Jquery 寻找父、子、兄弟节点

JQUERY的父,子,兄弟节点查找方法 jQuery.parent(expr) 找父亲节点,可以传入expr进行过滤,比如$("span").parent()或者$("span").parent(".class") jQuery.parents(expr),类似于jQuery.parents(exp…

编写一个程序,计算用户输入的起始时间到终止时间之间相隔的天数。

思路分析: 闰年:闰年又分为普通闰年和世纪闰年 普通闰年:能被4整除且不能被100整除的为闰年(2004为闰年,1999不是闰年) 世纪闰年:能被400整除的是闰年(2020年是闰年,1900年不是闰年) 闰年共有366天&#x…

longvalue_Java Short类longValue()方法及示例

longvalue短类longValue()方法 (Short class longValue() method) longValue() method is available in java.lang package. longValue()方法在java.lang包中可用。 longValue() method is used to return the value denoted by this Short object converted to type long (by …

mvc的Controller返回值类型ActionResult详解

一、简介 ActionResult 操作方法通过执行工作并返回操作结果来响应用户输入。 操作结果表示框架将代表操作方法执行的命令。 ActionResult 类是操作结果的基类。 以下类型从 ActionResult 派生: ContentResult EmptyResult FileResult HttpUnauthorizedResult …