当前位置: 首页 > news >正文

FFmpeg: 自实现ijkplayer播放器--03UI界面设计

文章目录

      • UI设计流程图
      • UI设计界面
      • 点击播放功能实现

UI设计流程图

请添加图片描述

UI设计界面

  • 主界面
    请添加图片描述

  • 控制条
    请添加图片描述

  • 播放列表
    请添加图片描述

  • 画面显示
    请添加图片描述

  • 标题栏
    请添加图片描述

  • 设置界面
    请添加图片描述

  • 提示框
    请添加图片描述

点击播放功能实现

槽函数实现:
connect(ui->ctrlBarWind, &CtrlBar::SigPlayOrPause, this, &MainWind::OnPlayOrPause);

ctrbar.h

class CtrlBar : public QWidget
{Q_OBJECTpublic:explicit CtrlBar(QWidget *parent = 0);~CtrlBar();
signals:void SigPlayOrPause();      // 先实现这个private slots:void on_playOrPauseBtn_clicked();void on_stopBtn_clicked();private:Ui::CtrlBar *ui;
};

ctrbar.cpp

CtrlBar::CtrlBar(QWidget *parent) :QWidget(parent),ui(new Ui::CtrlBar)
{ui->setupUi(this);
}CtrlBar::~CtrlBar()
{delete ui;
}void CtrlBar::on_playOrPauseBtn_clicked()
{qDebug() << "on_playOrPauseBtn_clicked";emit SigPlayOrPause();      // 发送信号
}

mainwid.h


class MainWind : public QMainWindow
{Q_OBJECTpublic:explicit MainWind(QWidget *parent = 0);~MainWind();int InitSignalsAndSlots();void OnPlayOrPause();
private:Ui::MainWind *ui;IjkMediaPlayer *mp_ = NULL;
};

mainwind.cpp

MainWind::MainWind(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWind)
{ui->setupUi(this);// 初始化信号槽相关的InitSignalsAndSlots();
}MainWind::~MainWind()
{delete ui;
}int MainWind::InitSignalsAndSlots()
{connect(ui->ctrlBarWind, &CtrlBar::SigPlayOrPause, this, &MainWind::OnPlayOrPause);
}int MainWind::message_loop(void *arg)
{IjkMediaPlayer *mp = (IjkMediaPlayer *)arg;while (1) {AVMessage msg;int retval = mp->ijkmp_get_msg(&msg, 1);    if (retval < 0)break;switch (msg.what) {case FFP_MSG_PREPARED:mp->ijkmp_start();break;default:break;}msg_free_res(&msg);
}void MainWind::OnPlayOrPause()
{int ret = 0;// 1. 先检测mp是否已经创建if(!mp_) {mp_ = new IjkMediaPlayer();//1.1 创建ret = mp_->ijkmp_create(std::bind(&MainWind::message_loop, this, std::placeholders::_1));if(ret <0) {delete mp_;mp_ = NULL;return;}// 1.2 设置urlmp_->ijkmp_set_data_source("m1.mp3");// 1.3 准备工作ret = mp_->ijkmp_prepare_async();if(ret <0) {delete mp_;mp_ = NULL;return;}} else {// 已经准备好了,则暂停或者恢复播放}
}
http://www.lryc.cn/news/340615.html

相关文章:

  • 【安装部署】Apache SeaTunnel 和 Web快速安装详解
  • 泰迪智能科技携手洛阳理工学院共建“泰迪·洛阳理工数据智能工作室”
  • jenkins构建微信小程序并展示二维码
  • 阿里云大学考试python中级题目及解析-python中级
  • 攻防演练作为红方,怎么绕过Web应用防火墙
  • AI音乐,8大变现方式——Suno:音乐版的ChatGPT - 第505篇
  • 【C++】模拟list
  • SAP项目任务一览表
  • 130个学术网站和26个科研工具
  • 《一键搞定!揭秘微信公众号文章批量下载的终极神器》
  • 鸿蒙入门02-首次安装和配置
  • 软件工程 考研复试常考知识点总结
  • Docker+Uwsgi+Nginx部署Django项目保姆式教程
  • [openGL] 高级光照-Gamma矫正
  • Prometheus+Grafana监控K8S集群(基于K8S环境部署)
  • [opencv]VideoWriter写出fourcc格式
  • 软考中级网络工程师-网络技术
  • cmake基础教程(12)函数和宏用法
  • SQLite的PRAGMA 声明(二十三)
  • Qt 实战(1)Qt 概述
  • 【练习】二分查找
  • FactoryTalk View 上位机画面版本升级,还原和备份
  • 【微信小程序】分包
  • Golang教程六(单元测试,反射,网络编程,部署)
  • mybatis进阶篇-执行CRUD操作-typeAliases别名-接口绑定
  • C#面:泛型的主要约束和次要约束是什么
  • Java使用documents4j将word和excel转pdf
  • 使用策略模式实现 Spring 分布式和单机限流
  • @CrossOrigin注解解决跨域问题
  • 【力扣】45. 跳跃游戏 II