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

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

⾳视频同步

  • ⾳频同步
  • 视频同步
  • 外部时钟同步
相关推荐
ZC跨境爬虫21 小时前
跟着 MDN 学 HTML day_56:(HTML 表格基础完全指南)
前端·javascript·ui·html·音视频
泰兰尼斯稳稳鞋21 小时前
推荐一款视频无损裁剪的软件:losslesscut
音视频·视频剪辑·视频无损裁剪
EasyDSS1 天前
企业级融媒体生产管理平台/智能会议管理系统EasyDSS构建一体化应急视频指挥体系
音视频·媒体
大拿爱科技1 天前
视频里的字幕和文案怎么批量提取?从ASR到内容复用的工具拆解
aigc·音视频·语音识别
wyw00001 天前
FFmpeg实现带颜色MXF转mp4
python·ffmpeg
ZC跨境爬虫1 天前
跟着 MDN 学 HTML day_55:HTML 音频与视频嵌入实战指南
前端·javascript·ui·html·音视频·媒体
aqi001 天前
FFmpeg开发笔记(一百零二)国产的音视频移动开源工具FFmpegAndroid
android·ffmpeg·kotlin·音视频·直播·流媒体
福大大架构师每日一题1 天前
ComfyUI v0.21.0 更新解读:视频音频同步加载、PyAV 图像引擎切换、动态显存优化、云端与工作流能力全面升级
音视频·comfyui
ZC跨境爬虫1 天前
跟着 MDN 学 HTML day_57:(HTML 表格进阶特性与无障碍实践)
java·前端·javascript·ui·html·音视频
网管NO.11 天前
视频核心技术 01:视频基础概念 —— 帧、分辨率、帧率、码率、YUV 色彩系统全解
音视频