QMediaPlayer播放MP3无声音解决办法
QT中利用QMediaPlayer播放MP3无声音,程序运行时提示:
“QtMultimedia : defaultServiceProvider::requestService(): no service found for – “org.qt-project.qt.mediaplayer”
调试跟踪错误信息,提示:
“A valid playback service was not found, playback cannot proceed.”
原因是系统中在Linux中缺少libqt5multimedia5-plugins 库文件,安装后解决:
sudo apt install libqt5multimedia5-plugins
完成例子源代码:
mainwindows.h
<code>#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QtMultimedia/QMediaPlayer>
#include <QtMultimedia/QMediaPlaylist>
#include <QDir>
#include <QRandomGenerator>
QT_BEGIN_NAMESPACE
namespace Ui {
class MainWindow;
}
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
QMediaPlayer *player;
QMediaPlaylist *playlist;
QList<QFileInfo> *fileInfo;
QDir *dir;
int mp3count;
private slots:
void on_pushButton_clicked();
void on_pushButton_2_clicked();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
</code>
mainwindows.cpp
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
// 播放器
player = new QMediaPlayer;
// 播放错误信息
connect(player, QOverload<QMediaPlayer::Error>::of(&QMediaPlayer::error),
[=](QMediaPlayer::Error error) {
qDebug()<<error;
});
// 生成播放列表
playlist = new QMediaPlaylist(player);
dir=new QDir("/home/pi/Music"); // mp3存放目录
QStringList filter;
filter<<QString("*.mp3");
fileInfo=new QList<QFileInfo>(dir->entryInfoList(filter));
for(int i = 0; i<fileInfo->count(); i++)
{
qDebug()<<fileInfo->at(i).filePath();
playlist->addMedia(QUrl::fromLocalFile(fileInfo->at(i).filePath()));
ui->textEdit->append(fileInfo->at(i).filePath());
}
player->setPlaylist(playlist);
mp3count = fileInfo->count();
qDebug()<< "Mp3 count : "<< mp3count << endl;
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButton_clicked()
{
// 随机播放mp3
player->stop();
player->setPlaylist(playlist);
int i = QRandomGenerator::global()->bounded(fileInfo->count());
playlist->setCurrentIndex(i);
qDebug()<< "Mp3 index : "<< i << ", name:"<< player->currentMedia().canonicalUrl();;
player->setVolume(50);
player->play();
}
void MainWindow::on_pushButton_2_clicked()
{
// 播放指定mp3
player->setMedia(QUrl::fromLocalFile("/home/pi/Music/红日.mp3"));
qDebug()<< player->currentMedia().canonicalUrl();
player->setVolume(50);
player->play();
}