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

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

⾳视频同步

  • ⾳频同步
  • 视频同步
  • 外部时钟同步
相关推荐
Code-keys几秒前
基于 Transformer 的时序生成:从音频到量化交易的统一时序建模
深度学习·音视频·transformer
LoyalToOrigin19 小时前
iOS 26 libass字幕渲染问题兼容解决实践
ios·ffmpeg·objective-c
Black蜡笔小新19 小时前
国标GB28181视频监控平台EasyCVR赋能平安乡村建设,构筑乡村治理“数字防线”
java·网络·音视频
中小企业实战军师刘孙亮20 小时前
组织赋能+体系搭建,破解中小企业增长困局-佛山鼎策创局破局增长咨询
架构·产品运营·音视频·制造·业界资讯
幽络源小助理20 小时前
X4独角兽视频网站新版源码_整站视频系统_带CMS后台_幽络源源码
音视频·php源码
EasyGBS21 小时前
国密GB35114协议国标GB28181平台EasyGBS双标融合筑牢金融视频监控安全技术底座
安全·金融·音视频
二等饼干~za8986681 天前
GEO 源码部署搭建详细操作教程(2026 最新版)
线性代数·django·开源·音视频·ai-native
EasyDSS1 天前
私有化视频会议系统/视频直播点播EasyDSS一体化音视频平台打造全链路企业培训解决方案
音视频
EasyDSS1 天前
私有化音视频系统/智能会议管理系统EasyDSS私有化视频门户重构企业安全协作新模式
安全·重构·音视频
siv771 天前
影视解说视频智能生产全链路方案解析:从脚本生成到多平台分发
ffmpeg·srt字幕·ai剪辑·影视解说·ai电影解说·视频自动切割·字幕文件解析