ffplay 源码剖析——框架分析

  ffplay是ffmpeg自带的播放器,调用ffmpeg和SDL API实现的一个非常具有参考价值的播放器,就连著名的B站开源项目ijkplayer也是在ffplay.c上进行二次开发,ffplay实现了播放器大体上的功能,掌握其原理对于做播放器开发非常有意义。

ffplay框架分析

黄线框 表示不同的线程控制

本文福利, 免费领取C++音视频学习资料包、技术视频,内容包括(音视频开发,面试题,FFmpeg webRTC rtmp hls rtsp ffplay srs↓↓↓↓↓↓见下面↓↓文章底部点击免费领取↓↓

初始化 

初始化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等

播放器控制

播放
暂停
停止
快进/快退 
逐帧
静音

本文福利, 免费领取C++音视频学习资料包、技术视频,内容包括(音视频开发,面试题,FFmpeg webRTC rtmp hls rtsp ffplay srs↓↓↓↓↓↓见下面↓↓文章底部点击免费领取↓↓

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值