QT_媒体播放器播放Mp3QMediaPlayer
QMediaPlaylist
Qt对音视频的播放和控制、相机拍摄、收音机等多媒体应用提供了强大的支持。Qt5使用了全新的Qt Multimedia模块来实现多媒体应用,Qt4中用来实现多媒体功能的Phonon模块已经被移除。新的Qt Multimedia模块提供了丰富的接口,可以轻松地使用平台的多媒体功能。例如进行媒体播放、使用相机和收音机等。
#ifndef MAINWINDOW_H #define MAINWINDOW_H #include#includeclass 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" #includeMainWindow::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