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

红瘦子(红模拟)的博文大全:开发技术汇合(蕴含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬联合等等)继续更新中…(点击传送门)

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


前言

  在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_OBJECTpublic:    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_xxxx    void 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;                  // 以后播放地位,单位s    bool _mute;                     // 是否静音    int _volume;                    // 以后音量0~100    int _duration;                  // 以后歌曲的长度,单位s    int _timerId;                   // 定时器,获取以后播放工夫    MediaInfo _mediaInfo;           // 播放歌曲时候的媒体信息};#endif // MPLAYERMANAGER_H


工程模板

  mplayerDemo_根底模板_v1.0.0.rar


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