您当前的位置: 首页 >  qt

txwtech

暂无认证

  • 7浏览

    0关注

    813博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

QT_媒体播放器播放Mp3QMediaPlayer

txwtech 发布时间:2022-10-08 22:25:51 ,浏览量:7

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

关注
打赏
1665060526
查看更多评论
立即登录/注册

微信扫码登录

0.0385s