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

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

⾳视频同步

  • ⾳频同步
  • 视频同步
  • 外部时钟同步
相关推荐
_chirs10 小时前
编译不依赖动态库的FFMPEG(麒麟国防 V10)
arm开发·ffmpeg
给算法爸爸上香11 小时前
yolo目标检测线程池高性能视频tensorrt推理(每秒1000+帧)
yolo·目标检测·音视频·线程池·tensorrt
大学生小郑11 小时前
sensor成像的原理
图像处理·音视频·视频
熊猫钓鱼>_>14 小时前
从零到一:打造“抗造” Electron 录屏神器的故事
前端·javascript·ffmpeg·electron·node·录屏·record
AI浩15 小时前
学习语言驱动的序列级别模态不变表示用于视频可见光-红外行人重识别
学习·音视频
UpYoung!16 小时前
【格式转换工具】专业级多媒体格式转换解决方案——Freemake Video Converter 完全指南:轻量化视频剪辑媒体格式转换
ffmpeg·短视频·实用工具·开源工具·多媒体格式转换·运维必备·视频转换格式
老陈聊架构17 小时前
『AI视频创作』Remotion Skills 完全指南:用自然语言创作视频的革命
人工智能·音视频·skill·remotion
视频技术分享17 小时前
2026年实时音视频服务选型深度解析
音视频·实时音视频·视频
三十_A1 天前
前端技术分享:基于 Canvas 实现视频帧截取与下载方案
前端·音视频
地狱为王1 天前
Unity使用NovaSR将沉闷的16kHz音频升频成清晰的48kHz音频
unity·游戏引擎·音视频·novasr