123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174 |
- #ifndef PLAYERCOMPONENT_H
- #define PLAYERCOMPONENT_H
- #include <QObject>
- #include <QtCore/qglobal.h>
- #include <QVariant>
- #include <QSet>
- #include <QQuickWindow>
- #include <QTimer>
- #include <QTextStream>
- #include "ComponentManager.h"
- #include <mpv/client.h>
- #include <mpv/qthelper.hpp>
- void initD3DDevice(void);
- class PlayerComponent : public ComponentBase
- {
- Q_OBJECT
- DEFINE_SINGLETON(PlayerComponent);
- public:
- virtual const char* componentName() { return "player"; }
- virtual bool componentExport() { return true; }
- virtual bool componentInitialize();
- virtual void componentPostInitialize();
-
- explicit PlayerComponent(QObject* parent = 0);
- virtual ~PlayerComponent();
-
- Q_INVOKABLE bool load(const QString& url, const QVariantMap& options, const QVariantMap& metadata, const QString& audioStream = QString(), const QString& subtitleStream = QString());
-
-
-
-
-
- Q_INVOKABLE void queueMedia(const QString& url, const QVariantMap& options, const QVariantMap &metadata, const QString& audioStream, const QString& subtitleStream);
-
-
-
-
- Q_INVOKABLE void clearQueue();
- Q_INVOKABLE virtual void seekTo(qint64 milliseconds);
-
- Q_INVOKABLE virtual void stop();
-
-
- Q_INVOKABLE virtual void streamSwitch();
- Q_INVOKABLE virtual void pause();
- Q_INVOKABLE virtual void play();
-
-
- Q_INVOKABLE virtual void setVolume(quint8 volume);
- Q_INVOKABLE virtual quint8 volume();
-
-
-
-
-
-
- Q_INVOKABLE virtual QVariant getAudioDeviceList();
-
- Q_INVOKABLE virtual void setAudioDevice(const QString& name);
-
- Q_INVOKABLE virtual void setAudioStream(const QString& audioStream);
- Q_INVOKABLE virtual void setSubtitleStream(const QString& subtitleStream);
- Q_INVOKABLE virtual void setAudioDelay(qint64 milliseconds);
- Q_INVOKABLE virtual void setSubtitleDelay(qint64 milliseconds);
-
-
- Q_INVOKABLE virtual void setVideoOnlyMode(bool enable);
- Q_INVOKABLE void userCommand(QString command);
- const mpv::qt::Handle getMpvHandle() const { return m_mpv; }
- virtual void setWindow(QQuickWindow* window);
- QString videoInformation() const;
- static QStringList AudioCodecsAll() { return { "ac3", "dts", "eac3", "dts-hd", "truehd" }; };
- static QStringList AudioCodecsSPDIF() { return { "ac3", "dts" }; };
-
- public Q_SLOTS:
- void setAudioConfiguration();
- void updateAudioDeviceList();
- void updateSubtitleSettings();
- void updateVideoSettings();
- private Q_SLOTS:
- void handleMpvEvents();
- void onRestoreDisplay();
- void onRefreshRateChange();
- void onReloadAudio();
- Q_SIGNALS:
- void playing(const QString& url);
- void buffering(float);
-
- void stopped(const QString& url);
-
- void finished(const QString& url);
-
-
- void playbackEnded(const QString& url);
-
- void playbackAllDone();
-
-
- void playbackStarting();
- void paused(bool paused);
- void windowVisible(bool visible);
-
- void updateDuration(qint64 milliseconds);
-
-
-
-
- void error(int id, const QString& message);
-
-
- void positionUpdate(quint64);
- void onMpvEvents();
-
- private:
-
-
-
-
-
-
-
-
- void loadWithOptions(const QVariantMap& options);
- void setRpiWindow(QQuickWindow* window);
- void setQtQuickWindow(QQuickWindow* window);
- void handleMpvEvent(mpv_event *event);
-
-
- bool switchDisplayFrameRate();
- void checkCurrentAudioDevice(const QSet<QString>& old_devs, const QSet<QString>& new_devs);
- void appendAudioFormat(QTextStream& info, const QString& property) const;
- mpv::qt::Handle m_mpv;
- double m_lastPositionUpdate;
- qint64 m_playbackAudioDelay;
- QString m_CurrentUrl;
- bool m_playbackStartSent;
- QQuickWindow* m_window;
- float m_mediaFrameRate;
- QTimer m_restoreDisplayTimer;
- QTimer m_reloadAudioTimer;
- QSet<QString> m_audioDevices;
- bool m_streamSwitchImminent;
- };
- #endif
|