QT_媒体播放器播放Mp3QMediaPlayer
QMediaPlaylist
Qt对音视频的播放和控制、相机拍摄、收音机等多媒体应用提供了强大的支持。Qt5使用了全新的Qt Multimedia模块来实现多媒体应用,Qt4中用来实现多媒体功能的Phonon模块已经被移除。新的Qt Multimedia模块提供了丰富的接口,可以轻松地使用平台的多媒体功能。例如进行媒体播放、使用相机和收音机等。
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include
#include
class QMediaPlaylist;
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
Ui::MainWindow *ui;
QMediaPlayer *player2;
QMediaPlaylist *playlist2;
private slots:
void UpdatePosition(qint64 position);
void on_pushButton_play_clicked();
void on_pushButton_pause_clicked();
void on_pushButton_stop_clicked();
void on_horizontalSlider_sliderMoved(int position);
void StateChanged(QMediaPlayer::State state);
void MediaStatusChanged(QMediaPlayer::MediaStatus status);
void ShowError(QMediaPlayer::Error error);
//获取媒体元数据
void MetaDataAvailableChanged(bool b_available);
};
#endif // MAINWINDOW_H
cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
player2 = new QMediaPlayer(this);
//player2->setMedia(QUrl::fromLocalFile("../myplayer/music.mp3"));
// player2->setMedia(QUrl::fromLocalFile("../shiji.mp3"));//相对路径无法获取媒体元数据
//D:\QT_Project\src13_5myplayer
// player2->setMedia(QUrl::fromLocalFile("D:/QT_Project/src13_5myplayer/shiji.mp3"));//使用绝对路径
connect(player2,&QMediaPlayer::positionChanged,this,&MainWindow::UpdatePosition);
//
connect(player2,&QMediaPlayer::stateChanged,this,&MainWindow::StateChanged);
connect(player2,&QMediaPlayer::mediaStatusChanged,this,&MainWindow::MediaStatusChanged);
connect(player2,static_cast(&QMediaPlayer::error),this,&MainWindow::ShowError);
ui->label_3->setText(tr("没有错误信息"));
connect(player2,&QMediaPlayer::metaDataAvailableChanged,this,&MainWindow::MetaDataAvailableChanged);
//添加播放列表
playlist2=new QMediaPlaylist;
playlist2->addMedia(QUrl::fromLocalFile("D:/QT_Project/src13_5myplayer/litisheng.mp3"));//
playlist2->addMedia(QUrl::fromLocalFile("D:/QT_Project/src13_5myplayer/shiji.mp3"));//litisheng
playlist2->setCurrentIndex(0);
playlist2->setPlaybackMode(QMediaPlaylist::Loop);
player2->setPlaylist(playlist2);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::UpdatePosition(qint64 position)
{
//更新滑块显示
ui->horizontalSlider->setMaximum(player2->duration()/1000);
ui->horizontalSlider->setValue(position/1000);
}
void MainWindow::on_pushButton_play_clicked()
{
player2->play();//播放
}
void MainWindow::on_pushButton_pause_clicked()
{
player2->pause();//暂停
}
void MainWindow::on_pushButton_stop_clicked()
{
player2->stop();//停止
}
void MainWindow::on_horizontalSlider_sliderMoved(int position)
{
//设置播放进度
player2->setPosition(position *1000);
}
void MainWindow::StateChanged(QMediaPlayer::State state)
{
switch (state)
{
case QMediaPlayer::StoppedState:
ui->label_2->setText(tr("已停止"));
break;
case QMediaPlayer::PlayingState:
ui->label_2->setText(tr("播放中。。。"));
break;
case QMediaPlayer::PausedState:
ui->label_2->setText(tr("已暂停"));
break;
default:
break;
}
}
void MainWindow::MediaStatusChanged(QMediaPlayer::MediaStatus status)
{
switch (status)
{
case QMediaPlayer::UnknownMediaStatus:
ui->label->setText(tr("媒体未知状态!"));
break;
case QMediaPlayer::NoMedia:
ui->label->setText(tr("没有媒体文件"));
break;
case QMediaPlayer::BufferingMedia:
ui->label->setText(tr("正在缓冲媒体文件"));
break;
case QMediaPlayer::BufferedMedia:
ui->label->setText(tr("媒体文件缓冲完成"));
break;
case QMediaPlayer::LoadingMedia:
ui->label->setText(tr("正在加载媒体"));
break;
case QMediaPlayer::StalledMedia:
ui->label->setText(tr("播放停滞"));
break;
case QMediaPlayer::EndOfMedia:
ui->label->setText(tr("播放结束"));
break;
case QMediaPlayer::LoadedMedia:
ui->label->setText(tr("媒体加载完成"));
break;
case QMediaPlayer::InvalidMedia:
ui->label->setText(tr("不可用的媒体文件"));
break;
default:
break;
}
}
void MainWindow::ShowError(QMediaPlayer::Error error)
{
switch (error)
{
case QMediaPlayer::NoError:
ui->label_3->setText(tr("没有错误"));
break;
case QMediaPlayer::ResourceError:
ui->label_3->setText(tr("媒体资源无法被解析"));
break;
case QMediaPlayer::FormatError:
ui->label_3->setText(tr("不支持该媒体格式"));
break;
case QMediaPlayer::NetworkError:
ui->label_3->setText(tr("发生网络错误"));
break;
case QMediaPlayer::AccessDeniedError:
ui->label_3->setText(tr("没有播放权限"));
break;
case QMediaPlayer::ServiceMissingError:
ui->label_3->setText(tr("没有发现有效的播放服务"));
break;
default:
ui->label_3->setText(tr("没有错误信息"));
break;
}
}
void MainWindow::MetaDataAvailableChanged(bool b_available)
{
if(b_available)
{
QString title2=player2->metaData("Title").toString();
QString author2=player2->metaData("Author").toString();
setWindowTitle(title2+"-"+author2);
}
}
pro文件:
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
CONFIG += c++11
# The following define makes your compiler emit warnings if you use
# any Qt feature that has been marked deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS
# You can also make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
SOURCES += \
main.cpp \
mainwindow.cpp
HEADERS += \
mainwindow.h
FORMS += \
mainwindow.ui
QT+=core gui multimedia
# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
参考:
Qt学习之QMediaPlayer_以书入法的博客-CSDN博客_qmediaplayerQt视频播放器Qt对音视频的播放和控制、相机拍摄、收音机等多媒体应用提供了强大的支持。Qt5使用了全新的Qt Multimedia模块来实现多媒体应用,Qt4中用来实现多媒体功能的Phonon模块已经被移除。新的Qt Multimedia模块提供了丰富的接口,可以轻松地使用平台的多媒体功能。例如进行媒体播放、使用相机和收音机等。QMediaPlayerQMediaPlayer类...https://blog.csdn.net/u010037542/article/details/100075368?spm=1001.2101.3001.6650.10&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EOPENSEARCH%7ERate-10-100075368-blog-127217656.pc_relevant_3mothn_strategy_and_data_recovery&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EOPENSEARCH%7ERate-10-100075368-blog-127217656.pc_relevant_3mothn_strategy_and_data_recovery&utm_relevant_index=11