若该文为原创文章,转载请注明原文出处
本文章博客地址: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