#pragma once #include #include #include #include #include #include class Player : public QObject { Q_OBJECT QML_SINGLETON QML_ELEMENT Q_PROPERTY(bool hasVideo READ hasVideo NOTIFY hasVideoChanged FINAL) Q_PROPERTY(bool loading READ loading NOTIFY loadingChanged FINAL) Q_PROPERTY(bool failed READ failed NOTIFY failedChanged FINAL) Q_PROPERTY(bool playing READ playing NOTIFY playingChanged FINAL) Q_PROPERTY(float volume READ volume WRITE setVolume NOTIFY volumeChanged FINAL) public: Player(QObject *parent = nullptr); ~Player(); bool hasVideo() const; bool loading() const; bool failed() const; bool playing() const; float volume() const; void setVolume(float newVolume); public slots: void loadVideo(QString id); void unloadVideo(); void play(); void pause(); void stop(); signals: void hasVideoChanged(); void loadingChanged(); void failedChanged(); void playingChanged(); void volumeChanged(); private: QMediaPlayer player; QAudioOutput output; QNetworkAccessManager manager; bool m_failed = false; };