音频也是类似的情况,调用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)播放器控制
播放 。
暂停 。
停? 。
快进/快退 。
逐帧 。
静? 。
本篇文章分析到这里,后面还会继续分析,欢迎关注,点赞,转发,收藏 。
推荐阅读
- 红茶蛋曲奇的做法,原味曲奇和抹茶曲奇的做法
- 雷达模拟:用python的pygame实现和代码分析
- 喝茶要有最基本的常识,喝茶的境界
- HDMI高清线的五个误区
- 如何选择一张合适的存储卡?
- 史记里面第一个皇帝是谁 史记记载的最后一个皇帝是谁
- 太监为什么娶妻子 古代太监娶老婆是干嘛的
- 了解机器学习的商业价值 机器预测逐渐取代人类做出的预测
- 鱿鱼仔和海兔子是一种东西吗 海兔和小鱿鱼的区别
- 如何实现一个优雅的Python的Json序列化库