QT商业播放器
总体架构图

架构优点:解耦,采用生产者消费者设计模式,各个线程各司其职,通过消息队列高效协作
这个项目是一个基于ijkplayer和ffplayer.c的QT商业播放器,
项目有5部分构成:
前端QT用户界面
后端是集成了ffplayer.c的类--播放的核心逻辑,
中间层有3个模块,
一是ijkmp类-暴露给前后端向消息队列发消息,
二是参考ijkplayer实现的单链表消息队列,
三是用QThread启动的消息循环线程--循环取消息处理业务
下面我来依次说明这些模块:
QT界面
用户界面设计
基本机制
利用QT的信号和槽函数机制,界面事件触发后向消息队列发送消息
- 界面元素事件绑定信号
- 信号绑定槽函数
- 槽函数向消息队列发送对应事件的消息,通知ffplay开始工作
- ffplay将视频画面回调到qt界面,声音回调到SDL音频播放流
- ffplay内部通过各个信号量控制工作流状态,响应消息只需要调用接口改变ffplay内部的各个信号量即可
元素事件包括:
-
播放,暂停,停止
-
快进,快退(按钮seek)
-
进度条seek
-
音量控制
-
文件路径
后端ffplay类
播放器的播放逻辑–一个播放器真正的灵魂部分
主要接口
主要接口就是stream_open(),和stream_close()
- stream_open负责启动线程和各个队列
- stream_close负责关闭线程并且回收资源
主要工作流程
-
解复用线程将从媒体文件中解出来的原始码流包插入到音频包队列和视频包队列</

最低0.47元/天 解锁文章
1534





