关于QTAV的介绍和编译请看我之前的文章,直接上代码
因为音乐播放器只有一个所以是个单例
头文件:
#pragma once
#include <QObject>
#include <QtAV/AVPlayer.h>
#include <QtAVWidgets/GLWidgetRenderer2.h>
using namespace QtAV;
#define avplayer QtavPlayer::getInstance()
class QtavPlayer : public QObject
{
Q_OBJECT
private:
QtavPlayer(QObject *parent = nullptr);
void initPlayer();
public:
static QtavPlayer* getInstance();
// 播放歌曲
void playSong(const QString& url);
// 停止播放
void stop();
// 播放
void play();
// 暂停
void pause(bool isPause);
// 设置播放位置
void setPositionValue(qint64 position);
// 设置音量
void setVolume(qreal);
// 获取音量
qreal getVolume();
// 获取时长
qint64 getDuration();
// 设置索引
void setIndex(unsigned int index);
~QtavPlayer();
private slots:
void onStarted();
signals:
void positionChanged(qint64);
void started();
void stoped();
void stateChanged(AVPlayer::State);
void error(const AVError& e);
void currentIndexChanged(unsigned int index);
void interruptTimeoutChanged();
private:
AVPlayer* m_Player = nullptr;;
AudioOutput* m_Audio = nullptr;
// 歌曲索引
unsigned int m_index = -1;
};
cpp
#include "qtavplayer.h"
QtavPlayer::QtavPlayer(QObject *parent)
: QObject(parent)
{
initPlayer();
}
QtavPlayer::~QtavPlayer()
{
if (m_Player)
{
delete m_Player, m_Player = nullptr;
}
}
void QtavPlayer::onStarted()
{
emit currentIndexChanged(m_index);
}
QtavPlayer* QtavPlayer::getInstance()
{
static QtavPlayer player;
return &player;
}
void QtavPlayer::initPlayer()
{
m_Player = new AVPlayer(this);
//得到音频输出接口
m_Audio = m_Player->audio();
m_Player->setInterruptTimeout(3000);
connect(m_Player,&AVPlayer::positionChanged,this,&QtavPlayer::positionChanged);
connect(m_Player,&AVPlayer::started,this,&QtavPlayer::onStarted);
connect(m_Player, &AVPlayer::stopped, this, &QtavPlayer::stoped);
connect(m_Player,&AVPlayer::stateChanged,this,&QtavPlayer::stateChanged);
connect(m_Player,&AVPlayer::error,this,&QtavPlayer::error);
connect(m_Player, &AVPlayer::interruptTimeoutChanged, this, &QtavPlayer::interruptTimeoutChanged);
}
void QtavPlayer::playSong(const QString& url)
{
m_Player->play(url);
}
void QtavPlayer::stop()
{
m_Player->stop();
}
void QtavPlayer::play()
{
m_Player->play();
}
void QtavPlayer::pause(bool isPause)
{
m_Player->pause(isPause);
}
void QtavPlayer::setPositionValue(qint64 position)
{
m_Player->setPosition(position);
}
void QtavPlayer::setVolume(qreal value)
{
value /= 100.0;
m_Audio->setVolume(value);
}
qreal QtavPlayer::getVolume()
{
return m_Audio->volume();
}
qint64 QtavPlayer::getDuration()
{
return m_Player->duration();
}
void QtavPlayer::setIndex(unsigned int index)
{
m_index = index;
}