若该文为原创文章,转载请注明原文出处
本文章博客地址:https://hpzwl.blog.csdn.net/article/details/118713520
长期持续带来更多项目与技术分享,咨询请加QQ:21497936、微信:yangsir198808
红胖子(红模仿)的博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中…(点击传送门)

Qt开发专栏:三方库开发技术

上一篇:没有了
下一篇:《Qt+MPlayer音乐播放器开发笔记(二):交叉编译MPlayer以及部署到开发板播放演示》

前言

  在ubuntu上实现MPlayer播放器播放音乐。

Demo

  

  

  
  
  

Mplayer

  MPlayer是一款开源多媒体播放器,以GNU通用公共许可证发布。此款软件可在各主流操作系统使用,例如Linux和其他类Unix系统、Windows及Mac OS X系统。
  MPlayer基于命令行界面,在各操作系统也可选择安装不同的图形界面。mplayer的另一个大的特色是广泛的输出设备支持。它可以在X11、Xv、DGA、OpenGL、SVGAlib、fbdev、AAlib、DirectFB下工作,且能使用GGI和SDL和一些低级的硬件相关的驱动模式(比如Matrox、3Dfx和Radeon、Mach64、Permedia3)。MPlayer还支持通过硬件MPEG解码卡显示,如DVB 和DXR3与Hollywood+。
  MPlayer的开发始于2000年。最初的作者是 Arpad Gereoffy。MPlayer最初的名字叫"MPlayer - The Movie Player for Linux",不过后来开发者们简称其为"MPlayer - The Movie Player",原因是MPlayer已经不仅可以用于Linux而可以在所有平台上运行。

下载

  最新源码下载地址: http://mplayerhq.hu/design7/news-archive.html
  QQ群:1047134658(点击“文件”搜索“MPlayer”,群内与博文同步更新)

Ubuntu编译

步骤一:下载解压

tar xvf MPlayer-1.4.tar.xz

  

步骤二:configure

cd MPlayer-1.4/
./configure

  

./configure --yasm=’’

  

步骤三:make,需要zlib库支撑,编译zlib库

make

  

  需要编译zlib库,需要先编译,请参照博文《libzip开发笔记(二):libzip库介绍、ubuntu平台编译和工程模板》。

sudo ldconfig

步骤四:继续编译make

make

  

步骤五:安装sudo make install

sudo make install

  

步骤六:播放测试

  
  (注意:若是虚拟机,虚拟机的音量和选用主机的声卡需要选择下)

Demo

Widget.h

#ifndef WIDGET_H
#define WIDGET_H#include <QMainWindow>
#include <QThread>
#include "MplayerManager.h"
#include <QFileDialog>namespace Ui {class Widget;
}class Widget : public QWidget
{Q_OBJECTpublic:explicit Widget(QWidget *parent = 0);~Widget();protected:void initControls();protected slots:void slot_durationChanged(int duration);void slot_positionChanged(int position);void slot_finished();void slot_mediaInfo(MplayerManager::MediaInfo mediaInfo);private slots:void on_pushButton_startPlay_clicked();void on_pushButton_stopPlay_clicked();void on_pushButton_pausePlay_clicked();void on_pushButton_resume_clicked();void on_horizontalSlider_sliderReleased();void on_horizontalSlider_valueChanged(int value);void on_pushButton_mute_clicked(bool checked);void on_horizontalSlider_position_sliderReleased();void on_horizontalSlider_position_sliderPressed();void on_pushButton_browserMplayer_clicked();void on_pushButton_defaultMplayer_clicked();void on_pushButton_browserMusic_clicked();private:Ui::Widget *ui;QThread *_pMplayerManagerThread;MplayerManager *_pMplayerManager;bool _sliderPositionPressed;
};#endif // WIDGET_H

Widget.cpp

#include "Widget.h"
#include "ui_Widget.h"
#include "MplayerManager.h"#include <QDebug>
#define LOG qDebug()<<__FILE__<<__LINE__Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget),_pMplayerManagerThread(0),_pMplayerManager(0),_sliderPositionPressed(false)
{ui->setupUi(this);QString version = "v1.0.0";setWindowTitle(QString("mplayer播放器 %1 (长沙红胖子网络科技有限公司 QQ:21497936 微信:yangsir198808 公司网址: hpzwl.blog.csdn.net)").arg(version));// 初始化modbus线程_pMplayerManagerThread = new QThread();_pMplayerManager = new MplayerManager();_pMplayerManager->moveToThread(_pMplayerManagerThread);QObject::connect(_pMplayerManagerThread, SIGNAL(started()),_pMplayerManager, SLOT(slot_start()));connect(_pMplayerManager, SIGNAL(signal_durationChanged(int)),this, SLOT(slot_durationChanged(int)));connect(_pMplayerManager, SIGNAL(signal_positionChanged(int)),this, SLOT(slot_positionChanged(int)));connect(_pMplayerManager, SIGNAL(signal_mediaInfo(MplayerManager::MediaInfo)),this, SLOT(slot_mediaInfo(MplayerManager::MediaInfo)));connect(_pMplayerManager, SIGNAL(signal_finished()),this, SLOT(slot_finished()));_pMplayerManagerThread->start();initControls();
}Widget::~Widget()
{delete ui;
}void Widget::initControls()
{ui->horizontalSlider->setMinimum(0);ui->horizontalSlider->setMaximum(100);ui->horizontalSlider->setValue(100);ui->label_volume->setText("100");
}void Widget::slot_durationChanged(int duration)
{LOG << duration;ui->label_duration->setText(QString("%1%2:%3%4").arg(duration / 60 / 10).arg(duration / 60 % 10).arg(duration % 60 / 10).arg(duration % 10));ui->horizontalSlider_position->setMinimum(0);ui->horizontalSlider_position->setMaximum(duration);
}void Widget::slot_positionChanged(int position)
{ui->label_position->setText(QString("%1%2:%3%4").arg(position / 60 / 10).arg(position / 60 % 10).arg(position % 60 / 10).arg(position % 10));if(!_sliderPositionPressed){ui->horizontalSlider_position->setValue(position);}
}void Widget::slot_finished()
{ui->label_position->setText("00:00");
}void Widget::slot_mediaInfo(MplayerManager::MediaInfo mediaInfo)
{ui->label_title->setText(mediaInfo.title);ui->label_album->setText(mediaInfo.album);ui->label_year->setText(mediaInfo.year);ui->label_artist->setText(mediaInfo.artist);ui->label_genre->setText(mediaInfo.genre);ui->label_comment->setText(mediaInfo.comment);
}void Widget::on_pushButton_startPlay_clicked()
{_pMplayerManager->startPlay();
}void Widget::on_pushButton_stopPlay_clicked()
{_pMplayerManager->stopPlay();
}void Widget::on_pushButton_pausePlay_clicked()
{_pMplayerManager->pausePlay();
}void Widget::on_pushButton_resume_clicked()
{_pMplayerManager->resumePlay();
}void Widget::on_horizontalSlider_sliderReleased()
{_pMplayerManager->setVolume(ui->horizontalSlider->value());
}void Widget::on_horizontalSlider_valueChanged(int value)
{ui->label_volume->setText(QString("%1").arg(value));
}void Widget::on_pushButton_mute_clicked(bool checked)
{_pMplayerManager->setMute(checked);
}void Widget::on_horizontalSlider_position_sliderReleased()
{_sliderPositionPressed = false;_pMplayerManager->setPosition(ui->horizontalSlider_position->value());
}void Widget::on_horizontalSlider_position_sliderPressed()
{_sliderPositionPressed = true;
}void Widget::on_pushButton_browserMplayer_clicked()
{_pMplayerManager->setMplayerPath(ui->lineEdit_mplayer->text());
}void Widget::on_pushButton_defaultMplayer_clicked()
{ui->lineEdit_mplayer->setText("mplayer");
}void Widget::on_pushButton_browserMusic_clicked()
{QString dir = ui->lineEdit_music->text();dir = dir.mid(0, dir.lastIndexOf("/"));QString filePath = QFileDialog::getOpenFileName(0,"open",dir,"AAC(*.aac)"";;MP3(*.mp3)"";;WAV(*.wav)"";;WMA(*.wma)");if(filePath.isEmpty()){return;}ui->lineEdit_music->setText(filePath);_pMplayerManager->setFilePath(filePath);
}

MplayerManager.h

#ifndef MPLAYERMANAGER_H
#define MPLAYERMANAGER_H/************************************************************\* 控件名称: mplayer管理类* 控件描述:*          使用slave模式控制mplayer播放音乐,基础模块实现单曲播放* 控件功能:*          1.音乐播放器播放音乐的基础操作*          2.可以获取歌曲的相关专辑,作者,年代,评论,流派等信息* 著作权信息*      作者:红胖子(AAA红模仿)*      公司:长沙红胖子网络科技有限公司*      网址:hpzwl.blog.csdn.net*      联系方式:QQ(21497936) 微信(yangsir198808) 电话(15173255813)* 版本信息*       日期             版本           描述*   2021年07月12日      v1.0.0        基础模板
\************************************************************/#include <QObject>
#include <QThread>
#include <QProcess>
#include <QtMath>
#include <QTextCodec>class MplayerManager : public QObject
{Q_OBJECT
public:enum PLAY_STATE {                   // 播放状态PLAY_STATE_STOP = 0x00,         // 未播放,停止播放PLAY_STATE_PLAY,                // 正在播放PLAY_STATE_PAUSE                // 暂停播放};struct MediaInfo {                  // 多媒体信息MediaInfo() {}QString title;                  // 标题QString artist;                 // 艺术家QString album;                  // 专辑QString year;                   // 年代QString comment;                // 评论QString genre;                  // 流派};public:explicit MplayerManager(QObject *parent = 0);~MplayerManager();public:QString getMplayerPath()    const;      // 获取播放器路径(运行则可调用)QString getFilePath()       const;      // 获取当前播放文件路径bool getMute()              const;      // 获取是否静音int getVolume()             const;      // 获取音量int getPosition()           const;      // 获取当前位置public:void setMplayerPath(const QString &mplayerPath);    // 设置播放器路径void setFilePath(const QString &filePath);          // 设置播放文件void setMute(bool mute);                            // 设置静音void setVolume(int volume);                         // 设置音量(0~100)void setPosition(int position);                     // 设置当前播放位置signals:void signal_stateChanged(PLAY_STATE playState);     // 播放器播放状态信号void signal_durationChanged(int duration);          // 播放歌曲长度变换信号void signal_positionChanged(int value);             // 播放器歌曲位置比变换,1s一次void signal_finished();                             // 播放完成信号void signal_mediaInfo(MplayerManager::MediaInfo mediaInfo);     // 播放歌曲时,获取的各种元信息public:void startPlay(QString filePath);       // 播放指定歌曲(调用后,或发送消息给播放线程,// 以下4个函数同样,本质调用了slo_xxxxvoid startPlay();                       // 播放歌曲void pausePlay();                       // 暂停播放void resumePlay();                      // 恢复播放void stopPlay();                        // 停止播放public slots:void slot_start();                      // 线程开启(需要外部管理QThread)void slot_stop();                       // 线程停止void slot_startPlay();                  // 开始播放void slot_pausePlay();                  // 暂停播放void slot_resumePlay();                 // 恢复播放void slot_stopPlay();                   // 停止播放void slot_setPosition(int position);    // 设置位置void slot_setVolume(int volume);        // 设置音量void slot_setMute(bool mute);           // 设置静音void slot_getCurrentPosition();         // 获取当前位置(调用后,会强制立即抛出当前播放位置信号)protected slots:void slot_readyRead();void slot_finished(int exitCode, QProcess::ExitStatus exitStatus);protected:void timerEvent(QTimerEvent *event);private:bool _runnig;                   // 是否运行QProcess *_pProcess;            // 进程控制QTextCodec *_pTextCodec;        // 编码private:QString _filePath;              // 播放文件路径QString _mplayerPath;           // mplayer执行程序private:PLAY_STATE _playState;          // 当前播放状态int _position;                  // 当前播放位置,单位sbool _mute;                     // 是否静音int _volume;                    // 当前音量0~100int _duration;                  // 当前歌曲的长度,单位sint _timerId;                   // 定时器,获取当前播放时间MediaInfo _mediaInfo;           // 播放歌曲时候的媒体信息
};#endif // MPLAYERMANAGER_H

工程模板

  mplayerDemo_基础模板_v1.0.0.rar

上一篇:没有了
下一篇:《Qt+MPlayer音乐播放器开发笔记(二):交叉编译MPlayer以及部署到开发板播放演示》

若该文为原创文章,转载请注明原文出处
本文章博客地址:https://hpzwl.blog.csdn.net/article/details/118713520

Qt+MPlayer音乐播放器开发笔记(一):ubuntu上编译MPlayer以及Demo演示相关推荐

  1. Qt+MPlayer音乐播放器开发笔记(二):交叉编译MPlayer以及部署到开发板播放演示

    若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/119991329 长期持续带来更多项目与技术分享,咨询请 ...

  2. 基于Qt的音乐播放器制作

    基于Qt的音乐播放器制作 使用浏览器自带工具抓包歌曲资源 开发人员工具抓包 点击浏览器右上角的 "-" 快捷键(Alt + F): 点击其中的"更多工具" ➡ ...

  3. C++ QT视频音乐播放器

     程序示例精选 C++/QT视频音乐播放器 如需安装运行环境或远程调试,见文章底部微信名片,由专业技术人员远程协助! 前言 这篇博客针对<<C++/QT视频音乐播放器>>编写代 ...

  4. 音乐播放器开发实例(可毕设含源码)

    一.开发基础 最近很多大学生都快毕业了在整理毕业论文以及毕业作品,其实在大三的时候就可以开始考虑了并且可以提前和自己的导师进行沟通,让自己的作品直接成为论文选题,在国产操作系统上开发一个简易音乐播放器 ...

  5. 【基于Python+tkinter的音乐播放器开发-哔哩哔哩】 https://b23.tv/eG2TwOL

    [基于Python+tkinter的音乐播放器开发-哔哩哔哩] https://b23.tv/eG2TwOL https://b23.tv/eG2TwOL

  6. MetroMusic音乐播放器开发心得

    MetroMusic音乐播放器开发心得 在这个假期,我独立开发了自己的音乐播放器MetroMusic,之所以叫做MetroMusic,是因为这个播放器的界面采用目前最为流行的win8Metro风格.这 ...

  7. 微信公众号教程(18)微信音乐播放器开发 上

    微信音乐播放器开发 原文:http://www.cnblogs.com/imaker/p/6252638.html 一.Html5的audio组件   HTML5 有两个很炫的元素,就是Audio和 ...

  8. Android音乐播放器开发(2)—登录

    1. 说明 本音乐播放器基于Android开发,原为我和另外两个小伙伴在上学期间一起做的一个小项目,近来有时间整理一下.之前我有文章已经介绍了播放界面的功能实现(Android音乐播放器开发),但介绍 ...

  9. Android音乐播放器开发(3)—注册

    1. 说明 本音乐播放器基于Android开发,原为我和另外两个小伙伴在上学期间一起做的一个小项目,近来有时间整理一下.之前我有文章已经介绍了播放界面的功能实现(Android音乐播放器开发),但介绍 ...

  10. Android音乐播放器开发(4)—修改密码

    1. 说明 本音乐播放器基于Android开发,原为我和另外两个小伙伴在上学期间一起做的一个小项目,近来有时间整理一下.之前我有文章已经介绍了播放界面的功能实现(Android音乐播放器开发),但介绍 ...

最新文章

  1. 三维列表转换成数组时,维度却只有二维
  2. spark写mysql优化简书_spark——通过jdbc连接数据库中遇到的问题
  3. 博士生是大学的廉价劳动力吗
  4. Java飞机大战敌机消失_Shoot 飞机大战,功能是子弹打在敌机上, 消失 且在内存中 , 小蜜蜂上同理 Games 游戏 247万源代码下载- www.pudn.com...
  5. cass或cad里提取点坐标及高程的插件_一个坐标计算小程序 EXCEL 可以进行抵偿任意带高斯坐标转换...
  6. ei会议和ei源刊的区别_核心期刊SCI论文发表 | SCI和EI和核心有什么区别
  7. cUrl 强大的文件上传/下载工具
  8. Java学习——Java基本的程序设计结构笔记(一)
  9. ExcelReport第二篇:ExcelReport源码解析
  10. try与raise用法
  11. 如何提高程序员的键盘使用效率之我见
  12. 直播教学系统16项功能
  13. 使用Photoshop制作圣诞海报
  14. 微信图片怎么添加竖排文字_微信图文排版怎么在图片上加文字?
  15. 商用密码企业调研(必做) 20181314
  16. 科目二边距30cm有什么技巧
  17. html+在ul中加边框,为元素添加边框,你有多少种好办法?
  18. 开发钉钉和企业微信微应用
  19. centos7建站操作步骤
  20. Synchronized解析——如果你愿意一层一层剥开我的心

热门文章

  1. 研究生英语写译教程(提高级/第三版)_翻译篇 笔记及答案
  2. Python学习-if语句
  3. 日记:2019新年计划,每日计划的思维导图
  4. 漫话:如何给女朋友解释什么是CDN?
  5. 【AI数学原理】函数求导(精髓篇)
  6. Leaflet制作专题图
  7. C++几个常用的排序
  8. CF1293A. ConneR and the A.R.C. Markland-N
  9. python unpack_关于python中的struct.unpack()
  10. qpython3h手机版怎么发短信_阿里云短信 python3代码发送短信