FFmpeg的FFplay框架分析( 三 )

音频也是类似的情况,调用SDL去播放声音 。
 
总体上总结下:
(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)视频解码
从packet queue读取packet,解出frame后放?frame queue 。
(4)字幕解码
从packet queue读取packet,解出frame后放?frame queue 。
(5)?频播放(或者回调函数)
从frame queue读取frame进?播放 。
(6)视频播放,ffplay?前是在main主线程进?视频播放 。我个人觉得放到子线程比较好 。
从frame queue读取frame进?播放 。
(7)字幕播放,ffplay?前是在main主线程进?字幕播放 。我个人觉得放到子线程比较好 。
从frame queue读取frame进?播放 。
(8)控制响应(播放/暂停/快进/快退等)
ffplay?前是在main主线程进?播放控制 。
(9)packet队列的设计
线程安全,?持互斥、等待、唤醒 。
缓存数据?? 。
缓存包数 。
队列播放可持续时间 。
进队列/出队列等 。
(10)frame队列的设计
线程安全,?持互斥、等待、唤醒 。
缓存帧数 。
?持读取数据?不出队列 。
进队列/出队列等 。
(11)?视频同步
?频同步 。
视频同步 。
外部时钟同步 。
(12)?频处理
?量调节 。
静? 。
重采样 。
(12)视频处理
图像格式转换RGB->YUV等 。
图像缩放1280*720->800*480等 。
(13)播放器控制
播放 。
暂停 。
停? 。
快进/快退 。
逐帧 。
静? 。
本篇文章分析到这里,后面还会继续分析,欢迎关注,点赞,转发,收藏 。




推荐阅读