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

ffplay 分析(音频从Frame(解码后)队列取数据到SDL输出)

  • 一、分析:
    • 1、audio_open():设置期望使用到SDL的音频参数
    • 2、audio_open():使用期望的音频打开SDL设备
    • 3、audio_open():判断打开SDL设备后参数的变化
    • 4、audio_open():保存SDL设备使用的音频参数
    • 5、sdl_audio_callback():SDL音频读取回调函数(判断待拷贝到SDL的缓冲区(is->audio_buf)中是否有数据,否则调用audio_decode_frame()添加数据到is->audio_buf)
    • 6、audio_decode_frame():从Frame(解码后)队列中获取一帧数据
    • 7、audio_decode_frame():获取这一帧数据的大小(字节)如果不用重采样操作就将这个数据和数据长度返回上一层了
    • 8、audio_decode_frame():获取同步调整后采样数和判断是否需要重采样的操作
    • 9、audio_decode_frame():需要重采样情况下,设置重采样的输入输入缓冲区
    • 10、audio_decode_frame():需要重采样情况下,设置开启重采样的补尝功能
    • 11、audio_decode_frame():需要重采样情况下,分配重采样输出缓冲区内存
    • 12、audio_decode_frame():需要重采样情况下,调用swr_convert()进行重采样操作
    • 13、audio_decode_frame():需要重采样情况下,将重采样缓冲区设置到is->audio_buf
    • 13、audio_decode_frame():不需要重采样情况下,将重采样缓冲区设置到is->audio_buf
    • 14、audio_decode_frame():设置音频时钟相关
    • 15、sdl_audio_callback():将数据拷贝到SDL缓冲区中设置播放,并更新读取操作的位置索引
    • 16、sdl_audio_callback():最后音频时钟设置

一、分析:

1、audio_open():设置期望使用到SDL的音频参数

2、audio_open():使用期望的音频打开SDL设备

3、audio_open():判断打开SDL设备后参数的变化

4、audio_open():保存SDL设备使用的音频参数

5、sdl_audio_callback():SDL音频读取回调函数(判断待拷贝到SDL的缓冲区(is->audio_buf)中是否有数据,否则调用audio_decode_frame()添加数据到is->audio_buf)

6、audio_decode_frame():从Frame(解码后)队列中获取一帧数据

7、audio_decode_frame():获取这一帧数据的大小(字节)如果不用重采样操作就将这个数据和数据长度返回上一层了

8、audio_decode_frame():获取同步调整后采样数和判断是否需要重采样的操作

9、audio_decode_frame():需要重采样情况下,设置重采样的输入输入缓冲区

10、audio_decode_frame():需要重采样情况下,设置开启重采样的补尝功能

11、audio_decode_frame():需要重采样情况下,分配重采样输出缓冲区内存

12、audio_decode_frame():需要重采样情况下,调用swr_convert()进行重采样操作

13、audio_decode_frame():需要重采样情况下,将重采样缓冲区设置到is->audio_buf

13、audio_decode_frame():不需要重采样情况下,将重采样缓冲区设置到is->audio_buf

14、audio_decode_frame():设置音频时钟相关

15、sdl_audio_callback():将数据拷贝到SDL缓冲区中设置播放,并更新读取操作的位置索引

16、sdl_audio_callback():最后音频时钟设置

ffplay 分析(音频从Frame(解码后)队列取数据到SDL输出)相关推荐

  1. ffplay分析 (视频从Frame(解码后)队列取数据到SDL输出)

    <ffplay的数据结构分析> <ffplay分析(从启动到读取线程的操作)> <ffplay分析(视频解码线程的操作)> <ffplay分析(音频解码线程的 ...

  2. 模拟web访问有登录且有验证码的登录后抓取数据

    模拟web访问有登录且有验证码的登录后抓取数据 1 取验证码 1 在窗体上放一个picturebox (imgValidate)存放获取的验证码图片, 2 用浏览器的开发者工具firefox (f12 ...

  3. python登录网站后爬取数据_需要登陆网站后才能获取数据的页面爬取

    本文转载自以下链接:https://www.makcyun.top/web_scraping_withpython8.html 目的是万一博主网站无法访问到的话自己需要学习的东西可就不存在了. 本文需 ...

  4. python登录网站后爬取数据_用 Python 登录主流网站,我们的数据爬取少不了它

    不论是自然语言处理还是计算机视觉,做机器学习算法总会存在数据不足的情况,而这个时候就需要我们用爬虫获取一些额外数据.这个项目介绍了如何用 Python 登录各大网站,并用简单的爬虫获取一些有用数据,目 ...

  5. python登录网站后爬取数据_如何用 Python 登录主流网站,爬取一些需要的数据

    最近收集了一些网站的登陆方式和爬虫程序,有的通过 selenium 登录,有的则通过抓包直接模拟登录.作者希望该项目能帮助初学者学习各大网站的模拟登陆方式,并爬取一些需要的数据. 作者表示模拟登陆基本 ...

  6. python登录网页后抓取数据_Python抓取网页数据的终极办法

    Pandas库有一种内置的方法,可以从名为read_html()的html页面中提取表格数据: https://pandas.pydata.org/import pandas as pdtables ...

  7. python登录网站后爬取数据_快速爬取登录网站数据

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 部分网站需要登录才能允许访问,因此爬虫需要获取登录cookie,然后通过爬虫代理使用该cookie进行数据采集.本示例按照以上流程进行实现如下: 1 模拟 ...

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

    <ffplay的数据结构分析> <ffplay分析(视频解码线程的操作)> <ffplay分析(音频解码线程的操作)> <ffplay 分析(音频从Frame ...

  9. ffplay分析 (音视频同步:主时钟为音频)

    <ffplay的数据结构分析> <ffplay分析(从启动到读取线程的操作)> <ffplay分析(视频解码线程的操作)> <ffplay分析(音频解码线程的 ...

最新文章

  1. android debug database 源码解析
  2. 安卓加载asset中的json文件_Android解析Asset目录下的json文件
  3. 企业网站前端制作实战教程 JQuery CSS JS HTML 登录界面
  4. Visual Prolog 的 Web 专家系统 (10)
  5. shell学习之创建函数
  6. 【CentOS 7笔记26】,打包和压缩工具的使用#171108
  7. RBM,DBM和DBN之间有什么区别?
  8. php 使用redis队列简单实用
  9. How to read Ext4 in Windows 10
  10. 微信小程序开发系列 (三) :微信小程序如何响应用户点击事件和微信平台 API 的使用方法介绍
  11. 火箭联盟修改车重教程,国服Wegame平台和外服Steam平台通用方法
  12. 输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变,句子中单词以单个空格符隔开,为简单起见,不带标点符号。 例如输入“I am a student”,则通过控制台输出“student a
  13. Window10蓝牙无法连接的解决方案(已成功)
  14. 最新宝可梦回合/口袋Jue醒手游全套源码+Linux服务端
  15. Flutter,Android,java现在又来了个国产鸿蒙,字节跳动Android面试
  16. VSS2005配置方法及注意事项
  17. axure 学习及录播视频
  18. 医咖会免费STATA教程学习笔记——如何使用stata自带的数据集
  19. h61 nvme硬盘_英特尔E3处理器网友发来咨询:H81B85老主板上NVME固态支持5775C
  20. 魔兽世界燃烧的远征最新服务器,6月2日加入“燃烧的远征” 立刻了解《魔兽世界》经典怀旧服的服务器抉择...

热门文章

  1. python类继承中构造方法_第8.3节 Python类的__init__方法深入剖析:构造方法与继承详解...
  2. 开发VUE使用第三库,发现有bug怎么办?
  3. Bootstrap中实现图片圆角效果
  4. CSS中实现水平/垂直居中
  5. Linux下设置和查看环境变量
  6. 【Spark】SparkStreaming-加载外部配置文件
  7. window.onload事件
  8. 最短网络Agri-Net
  9. 使用快捷键,快到极致
  10. java statement 返回类型,6.3 返回类型和返回语句 | Return type Return statement