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

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队列的设计

  • 线程安全,⽀持互斥、等待、唤醒
  • 缓存帧数
  • ⽀持读取数据⽽不出队列
  • 进队列/出队列等

⾳视频同步

  • ⾳频同步
  • 视频同步
  • 外部时钟同步
http://www.lryc.cn/news/114981.html

相关文章:

  • mysql之limit语句详解
  • 4.while循环
  • 【雕爷学编程】 MicroPython动手做(35)——体验小游戏2
  • mouseover 和 mouseenter
  • [JavaScript游戏开发] 绘制Q版地图、键盘上下左右地图场景切换
  • CI/CD持续集成持续发布(jenkins)
  • Qt5.14.2+QtCreator+PDB 查看源码
  • DOM基础获取元素+事件基础+操作元素
  • MATLAB——感知神经网络学习程序
  • SpringBoot中事务失效的原因
  • Webstorm的一些常用快捷键
  • 系统集成项目成本管理
  • Spring Boot整合ES的两种方式
  • Ajax_3 Ajax原理+ (XMLHttpRequest + Promise )+ 封装一个axios插件库,实现功能。
  • 计算机网络(7) --- UDP协议和TCP协议
  • Jenkins 修改默认管理员帐号
  • FK-坦克大战制作(一)菜单制作
  • 39.利用matlab寻找素数(matlab程序)
  • 卡尔曼滤波算法demo
  • MySQL游标(二十九)
  • 内生安全构建数据存储
  • Docker+Consul+Registrator 实现服务注册与发现
  • 深入学习JVM —— GC垃圾回收机制
  • Centos7.6 + Apache Ranger 2.4.0编译(docker方式)
  • LVS-DR模式集群配置
  • 【数据分析】pandas( 二)
  • ffmpeg工具实用命令
  • zabbix API笔记
  • [HDLBits] Mt2015 q4a
  • HarmonyOS NEXT,生命之树初长成