diff --git a/src/plugins/avfoundation/mediaplayer/avfmediaplayersession.mm b/src/plugins/avfoundation/mediaplayer/avfmediaplayersession.mm index 2309221c2cc3b077f6e0c633356e9065eacd1be8..3b25a58013feef1f502ad0e272723a0fe5f3ebf9 100644 --- a/src/plugins/avfoundation/mediaplayer/avfmediaplayersession.mm +++ b/src/plugins/avfoundation/mediaplayer/avfmediaplayersession.mm @@ -922,6 +922,19 @@ void AVFMediaPlayerSession::processBufferStateChange(int bufferStatus) if (bufferStatus == m_bufferStatus) return; + auto status = m_mediaStatus; + // Buffered -> unbuffered. + if (!bufferStatus) { + status = QMediaPlayer::StalledMedia; + } else if (status == QMediaPlayer::StalledMedia) { + status = QMediaPlayer::BufferedMedia; + // Resume playback. + [[static_cast<AVFMediaPlayerSessionObserver*>(m_observer) player] setRate:m_rate]; + } + + if (m_mediaStatus != status) + Q_EMIT mediaStatusChanged(m_mediaStatus = status); + m_bufferStatus = bufferStatus; Q_EMIT bufferStatusChanged(bufferStatus); }