ffplay 源码剖析 -1 框架分析

ffplay.c的意义

ffplay.c是FFmpeg源码⾃带的播放器,调⽤FFmpeg和SDL API实现⼀个⾮常有⽤的播放器。 例如哔哩哔哩著名开源项⽬ijkplayer也是基于ffplay.c进⾏⼆次开发。

ffplay框架分析(和前面800行代码写一个播放器逻辑很相似)

黄线框 表示不同的线程控制
在这里插入图片描述

初始化

初始化packet queque 
初始化frame queque
初始化clock
创建数据读取线程

线程划分

1 数据读取线程

打开媒体⽂件
打开对应码流的decoder以及初始化对应的audio、video、subtitle输出
创建decoder线程,audio、video和subtitle的解码线程独⽴
调⽤av_read_frame读取packet,并根据steam_index放⼊不同stream对应的packet队列

2 ⾳频解码(视频同 字幕同)

从packet queue读取packet,解出frame后放⼊frame queue

3 ⾳频播放(或者回调函数)

从frame queue读取frame进⾏播放

4 视频播放(ffplay⽬前是在main主线程进⾏视频播放)

从frame queue读取frame进⾏播放

5 字幕播放 (ffplay⽬前是在main主线程进⾏字幕播放)

从frame queue读取frame进⾏播放

6 响应控制 (播放/暂停/快进/快退等)(ffplay⽬前是在main主线程进⾏播放控制)

packet队列的设计

线程安全,⽀持互斥、等待、唤醒 
缓存数据⼤⼩ 
缓存包数 
队列播放可持续时间 
进队列/出队列等

frame队列的设计

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

⾳视频同步

⾳频同步 
视频同步 
外部时钟同步

⾳频处理

⾳量调节 
静⾳
重采样

视频处理

图像格式转换YUV->RGB等 
图像缩放1280*720->800*480等

播放器控制

播放
暂停
停⽌
快进/快退 
逐帧
静⾳
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ffmpeg是一个开源的跨平台音视频处理工具,ffplay则是ffmpeg项目中的一个简单实用的音视频播放器。下面是对ffmpegffplay源码的简要解析。 ffmpeg源码结构复杂,其中最核心的模块是libavcodec和libavformat,分别负责音视频编解码和封装格式处理。在ffmpeg源码中,可以找到大量针对各种编码标准(如H.264、AAC等)的编解码算法实现,以及支持各种封装格式(如MP4、FLV等)的封装和解封装算法。 ffplay则是使用ffmpeg库实现的一个命令行音视频播放器。源码中主要包含以下几个模块:主函数模块、基础数据结构模块、事件处理模块、音视频渲染模块等。主函数模块是整个程序的入口,它完成了程序的初始化、命令行参数解析、视频播放器的创建等工作。基础数据结构模块包含了几个重要的结构体,如视频帧结构体、音频帧结构体等,用于保存解码后的音视频数据。事件处理模块负责监听和处理用户的输入事件,如鼠标点击、键盘输入等。音视频渲染模块则是使用底层的音视频渲染库来将解码后的音视频数据进行播放。 在解析ffplay源码时,需要了解ffmpeg中的音视频解码和渲染原理,以及常见的音视频编码标准和封装格式。同时也需要了解音视频播放相关的基本概念和原理,如音频采样率、视频帧率等等。通过仔细阅读源码,可以了解到ffplay是如何使用ffmpeg库进行音视频解码、数据处理和渲染的。同时,源码中也包含了一些音视频播放器的基本功能实现,如播放、暂停、快进、倍速播放等。 综上所述,ffmpeg是一个功能强大的音视频处理工具,ffplay则是基于ffmpeg库实现的一个简单实用的音视频播放器。通过仔细阅读ffmpegffplay源码,可以深入了解音视频处理和播放的原理和实现方式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值