summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNick Korotysh <nick.korotysh@gmail.com>2020-06-01 23:25:45 +0300
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2020-06-02 15:48:50 +0000
commitd6076e0963b16ec98c13ce126db1d94a8f2952ca (patch)
tree6d31a1dce411ca6162c51e7cc5104b3bca95f1c2
parent5a10af9bca8976ffb415adf12d4e8ffe4921da67 (diff)
AVFoundation: fix playback of files with spaces in their names
Used QUrl::toEncoded() instead of QUrl::toString(). Usage of QUrl::toString() leads to URLs which can contain spaces and as result such URLs are not accepted by AVPlayer, and it remains in unknown state because AVFMediaPlayerSession::processLoadStateChange() is not called at all. And as result, QMediaPlayer waits media loading forever. [ChangeLog][Platform Specific Changes][AVFoundation] Fixed playback of files with spaces in their names. Fixes: QTBUG-84585 Change-Id: I69e522d048d88310803a7040f114ee808c18720b Reviewed-by: VaL Doroshchuk <valentyn.doroshchuk@qt.io> (cherry picked from commit 9c16be3d9d956f612dda431f4883eab3b09a8b67) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r--src/plugins/avfoundation/mediaplayer/avfmediaplayersession.mm14
1 files changed, 7 insertions, 7 deletions
diff --git a/src/plugins/avfoundation/mediaplayer/avfmediaplayersession.mm b/src/plugins/avfoundation/mediaplayer/avfmediaplayersession.mm
index 424f30008..d5554c51c 100644
--- a/src/plugins/avfoundation/mediaplayer/avfmediaplayersession.mm
+++ b/src/plugins/avfoundation/mediaplayer/avfmediaplayersession.mm
@@ -536,16 +536,16 @@ QIODevice *AVFMediaPlayerSession::mediaStream() const
return m_mediaStream;
}
-static void setURL(void *observer, const QString &url, const QString &mimeType = QString())
+static void setURL(void *observer, const QByteArray &url, const QString &mimeType = QString())
{
- NSString *urlString = [NSString stringWithUTF8String:url.toUtf8().constData()];
+ NSString *urlString = [NSString stringWithUTF8String:url.constData()];
NSURL *nsurl = [NSURL URLWithString:urlString];
[static_cast<AVFMediaPlayerSessionObserver*>(observer) setURL:nsurl mimeType:[NSString stringWithUTF8String:mimeType.toLatin1().constData()]];
}
-static void setStreamURL(void *observer, const QString &url)
+static void setStreamURL(void *observer, const QByteArray &url)
{
- setURL(observer, QLatin1String("iodevice://") + url, QFileInfo(url).suffix());
+ setURL(observer, QByteArrayLiteral("iodevice://") + url, QFileInfo(url).suffix());
}
void AVFMediaPlayerSession::setMedia(const QMediaContent &content, QIODevice *stream)
@@ -588,11 +588,11 @@ void AVFMediaPlayerSession::setMedia(const QMediaContent &content, QIODevice *st
// If there is a data, try to load it,
// otherwise wait for readyRead.
if (m_mediaStream->size())
- setStreamURL(m_observer, m_resources.request().url().toString());
+ setStreamURL(m_observer, m_resources.request().url().toEncoded());
} else {
//Load AVURLAsset
//initialize asset using content's URL
- setURL(m_observer, m_resources.request().url().toString());
+ setURL(m_observer, m_resources.request().url().toEncoded());
}
m_state = QMediaPlayer::StoppedState;
@@ -1037,7 +1037,7 @@ void AVFMediaPlayerSession::processMediaLoadError()
void AVFMediaPlayerSession::streamReady()
{
- setStreamURL(m_observer, m_resources.request().url().toString());
+ setStreamURL(m_observer, m_resources.request().url().toEncoded());
}
void AVFMediaPlayerSession::streamDestroyed()