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.mzph.cn/news/809635.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

zookeeper解析

目录 zookeeper定义 zookeeper定义 Zookeeper是一个开源的分布式的&#xff0c;为分布式框架提供协调服务的Apache项目 Zookeeper工作机制 zookeeper从设计模式角度来理解&#xff1a; 是一个基于观察者模式设计的分布式服务管理框架&#xff0c;它负责存储和管理大家都关心…

DS18B20与单片机的通信、DS18B20采集温度、MODBUS协议、练习框架

我要成为嵌入式高手之4月9日51单片机第四天&#xff01;&#xff01; ———————————————————————————— DS18B20温度传感器 单总线数字温度计 异步的半双工的串行通信 测量范围从-55℃ ~ 125℃&#xff0c;增量值为0.5℃ 要用DS18B20采集温度&am…

Ingress配置优化和追踪

介绍 在传统的业务系统中&#xff0c;应用微服务化后&#xff0c;需要一个统一的入口来将各个服务进行整合&#xff0c;这个入口可以是Nginx、Apache、HAproxy等等。而在K8s中&#xff0c;同样需要一个工具来将应用的各个service整合到统一的入口&#xff0c;这个工具就叫Ingr…

ArcGIS Pro中的3D建模

在本文中,我讲述了我最近一直在探索的在 ArcGIS Pro 中设计 3D 模型的过程。 我的目标是尽可能避免与其他软件交互(即使是专门用于 3D 建模的软件),并利用 Pro 可以提供的可能性。 这个短暂的旅程分为三个不同的阶段:准备、组装和照明。 我们必须使用一些布局可能性以及一…

flask后端+网页前端:基于 socket.io 的双向通信和服务器部署

我想实现的效果是&#xff0c;我的服务器提供两个路由网址&#xff0c;网页A用于拍照、然后录音&#xff0c;把照片和录音传给服务器&#xff0c;服务器发射信号&#xff0c;通知另一个路由的网页B更新&#xff0c;把刚刚传来的照片和录音显示在网页上。 然后网页B用户根据这个…

前端开发中地图定位与距离计算的应用实践

前端开发中地图定位与距离计算的应用实践 在前端开发中&#xff0c;地图功能的应用日益广泛&#xff0c;无论是用户位置的定位、目标距离的计算&#xff0c;还是地址的解析与展示&#xff0c;地图都发挥着不可替代的作用。本文将重点介绍前端开发中实现地图定位、距离计算以及…

MySQL前缀索引(3/16)

前缀索引 前缀索引&#xff1a;MySQL支持前缀索引&#xff0c;允许定义字符串的一部分作为索引。如果不指定前缀长度&#xff0c;索引将包含整个字符串。前缀索引可以节省空间&#xff0c;但可能会增加查询时的记录扫描次数&#xff08;因为会查询到多个前缀相同的数据&#x…

Python(9):一文学懂进程,线程和协程

文章目录 一、进程1.创建多进程2.查看进程id3.进程池4.进程间的互相通信 二、线程1.threading线程模块2.创建多线程3.互斥锁4.死锁5.线程间的互相通信 三、协程1.认识协程2.gevent模块在爬虫中的应用 四、多线程、多进程、协程的区别 分类定义程序一个应用可以当做一个程序&…

局域网共享文件夹怎么加密?局域网共享文件夹加密方法介绍

在企业局域网中&#xff0c;共享文件夹扮演着重要的角色。为了保护数据安全&#xff0c;我们需要加密保护局域网共享文件夹。那么&#xff0c;局域网共享文件夹怎么加密&#xff1f;下面我们来了解一下吧。 局域网共享文件夹加密方法 局域网共享文件夹加密推荐使用共享文件夹加…

【计算机考研】择校!北邮VS北航,哪所毕业以后就业好?

北邮计算机专业的就业优势相较于北航可能源于多方面的因素。 北邮在计算机和通信领域的实力备受肯定&#xff0c;被誉为"信息黄埔"&#xff0c;这一声誉在一定程度上增强了北邮计算机专业毕业生的竞争力。 北邮的整体学校氛围和教育体系更加注重信息技术的发展和应…

vue表格操作列,按钮太多显示... 点击后悬浮显示全部按钮

效果: 分析原理: 一共就三步,仔细看看很简单,位置要加对,代码结构下边有demo 代码结构demo: <el-table-columnlabel"操作"align"center"fixed"right"show-overflow-tooltip><template slot-scope"scope"><el-buttonsi…

STM32电机控制固件架构

目录 一、应用程序剖析 二、面向现场的控制实现体系结构 1、参考计算循环 2、电流调节环路 3、安全回路 一、应用程序剖析 上图显示了由ST MC SDK构建的电机控制应用程序。首先&#xff0c;这样的应用程序是由电机控制工作台生成的软件项目&#xff0c;这要归功于STM32Cube…

01 SQL基础 -- 初识数据库与安装

一、初识数据库 数据库是将大量数据保存起来,通过计算机加工而成的可以进行高效访问的数据集合。该数据集合称为数据库(Database, DB)。用来管理数据库的计算机系统称为数据库管理系统(Database Management System, DBMS) 1.1 DBMS 的种类 DBMS 主要通过数据的保存格式…

【MySQL】数据库开篇

SueWakeup 个人主页&#xff1a;SueWakeup 系列专栏&#xff1a;学习技术栈 个性签名&#xff1a;保留赤子之心也许是种幸运吧 本文封面由 凯楠&#x1f4f8;友情提供 目录 本系列传送门 1. 什么是数据库&#xff1f; 2. 为什么使用数据库 3. 数据库的分类 4. NoSQL 与关系…

android android.permission.MANAGE_EXTERNAL_STORAGE使用

android11 及以上版本&#xff0c;如果release版本要读取外部存储公共目录&#xff0c;即sdcard公共目录&#xff0c;需要在androidManifest.xml下申明 <uses-permission android:name"android.permission.MANAGE_EXTERNAL_STORAGE" /> 如果要发版到海外&…

【UE Niagara】光束发射模块学习

效果 步骤 1. 新建一个Niagara发射器&#xff0c;使用Empty模板&#xff0c;这里命名为“NE_Beam” 打开“NE_Beam”&#xff0c;添加条带渲染器 添加“Spawn Burst Instantaneous”模块&#xff0c;设置生成数量为100 添加一个“Beam Emitter Setup”模块 再添加一个“Spawn …

Linux C应用编程:MQTT物联网

1 MQTT通信协议 MQTT&#xff08;Message Queuing Telemetry Transport&#xff0c;消息队列遥测传 输&#xff09;是一种基于客户端-服务端架构的消息传输协议&#xff0c;如今&#xff0c;MQTT 成为了最受欢迎的物联网协议&#xff0c;已广泛应用于车联网、智能家居、即时聊…

sqoop:错误: 找不到或无法加载主类 org.apache.hadoop.mapreduce.v2.app.MRAppMaster(已解决)

1 报错信息 错误: 找不到或无法加载主类 org.apache.hadoop.mapreduce.v2.app.MRAppMaster 说明&#xff1a; 操作将数据库中的数据导入到HDFS中 执行sqoop import --connect jdbc:mysql://aaa01:3306/mysql --username root --password root --table test 时报了以下错误 2 报…

遥控小车电子方案

遥控小车的功能开发主要包括以下几个方面&#xff1a; 1.基本功能开发&#xff1a; 前进、后退、左转、右转&#xff1a;通过遥控器上的控制按钮&#xff0c;实现小车的前进、后退、左转和右转。加速、减速&#xff1a;通过遥控器上的油门控制按钮&#xff0c;实现小车的加速…

【深度学习】Fine-Grained Face Swapping via Regional GAN Inversion高保真换脸范式

文章目录 代码介绍实践效果 帮助、问询 代码 https://github.com/e4s2022/e4s 介绍 Fine-Grained Face Swapping via Regional GAN Inversion 提出一种新的高保真换脸范式&#xff0c;能够保留期望的微妙几何和纹理细节。从微观面部编辑的角度重新思考换脸任务&#xff0c;基…