11 m_session =
new MFPlayerSession(
this);
14MFPlayerControl::~MFPlayerControl()
17 m_session->setPlayerControl(
nullptr);
25 resetAudioVideoAvailable();
26 handleDurationUpdate(0);
28 m_session->load(media, stream);
33 if (state() == QMediaPlayer::PlayingState)
36 if (QMediaPlayer::InvalidMedia == m_session->status())
37 m_session->load(m_media, m_stream);
39 switch (m_session->status()) {
40 case QMediaPlayer::NoMedia:
41 case QMediaPlayer::InvalidMedia:
43 case QMediaPlayer::LoadedMedia:
44 case QMediaPlayer::BufferingMedia:
45 case QMediaPlayer::BufferedMedia:
46 case QMediaPlayer::EndOfMedia:
47 stateChanged(QMediaPlayer::PlayingState);
51 stateChanged(QMediaPlayer::PlayingState);
58 if (state() == QMediaPlayer::PausedState)
61 if (m_session->status() == QMediaPlayer::NoMedia ||
62 m_session->status() == QMediaPlayer::InvalidMedia)
65 stateChanged(QMediaPlayer::PausedState);
71 if (state() == QMediaPlayer::StoppedState)
73 stateChanged(QMediaPlayer::StoppedState);
79 return m_session->metaData();
84 m_session->setAudioOutput(output);
94 if (status == mediaStatus())
97 mediaStatusChanged(status);
100 case QMediaPlayer::EndOfMedia:
105 stateChanged(QMediaPlayer::StoppedState);
108 case QMediaPlayer::InvalidMedia:
110 case QMediaPlayer::LoadedMedia:
111 case QMediaPlayer::BufferingMedia:
112 case QMediaPlayer::BufferedMedia:
113 if (state() == QMediaPlayer::PlayingState)
128 if (m_videoAvailable)
130 m_videoAvailable =
true;
131 videoAvailableChanged(m_videoAvailable);
136 if (m_audioAvailable)
138 m_audioAvailable =
true;
139 audioAvailableChanged(m_audioAvailable);
144 bool videoDirty =
false;
145 if (m_videoAvailable) {
146 m_videoAvailable =
false;
149 if (m_audioAvailable) {
150 m_audioAvailable =
false;
151 audioAvailableChanged(m_audioAvailable);
154 videoAvailableChanged(m_videoAvailable);
159 if (m_duration == duration)
161 m_duration = duration;
162 durationChanged(m_duration);
167 if (m_seekable == seekable)
169 m_seekable = seekable;
170 seekableChanged(m_seekable);
182 return m_session->position();
187 if (!m_seekable || position == m_session->position())
189 m_session->setPosition(position);
199 return m_audioAvailable;
204 return m_videoAvailable;
219 return m_session->playbackRate();
224 m_session->setPlaybackRate(rate);
241 error(errorCode, errorString);
246 m_session->setActiveTrack(type, index);
251 return m_session->activeTrack(type);
256 return m_session->trackCount(type);
261 return m_session->trackMetaData(type, trackNumber);
bool isAudioAvailable() const override
void handleError(QMediaPlayer::Error errorCode, const QString &errorString, bool isFatal)
qreal playbackRate() const override
QMediaMetaData metaData() const override
const QIODevice * mediaStream() const override
void setActiveTrack(TrackType type, int index) override
void setAudioOutput(QPlatformAudioOutput *output) override
QMediaMetaData trackMetaData(TrackType type, int trackNumber) override
void handleStatusChanged(QMediaPlayer::MediaStatus)
void handleAudioAvailable()
void setPlaybackRate(qreal rate) override
void setMedia(const QUrl &media, QIODevice *stream) override
int activeTrack(TrackType type) override
QUrl media() const override
QMediaTimeRange availablePlaybackRanges() const override
float bufferProgress() const override
bool isVideoAvailable() const override
void handleSeekableUpdate(bool seekable)
qint64 duration() const override
qint64 position() const override
void handleVideoAvailable()
void handleDurationUpdate(qint64 duration)
int trackCount(TrackType type) override
void setPosition(qint64 position) override
bool isSeekable() const override
void handleTracksChanged()
void setVideoSink(QVideoSink *sink)
void stop(bool immediate=false)
QMediaTimeRange availablePlaybackRanges()