summaryrefslogtreecommitdiffstats
path: root/src/plugins/avfoundation/mediaplayer/avfmediaplayersession.mm
diff options
context:
space:
mode:
authorNick Korotysh <nick.korotysh@gmail.com>2020-06-01 23:25:45 +0300
committerNick Korotysh <nick.korotysh@gmail.com>2020-06-02 18:12:06 +0300
commit9c16be3d9d956f612dda431f4883eab3b09a8b67 (patch)
tree22d21e718da45befe51aba13550576bd8cefbe01 /src/plugins/avfoundation/mediaplayer/avfmediaplayersession.mm
parent2b96c113cf7057b556856149114999b973b3f2c2 (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 Pick-to: 5.15 Change-Id: I69e522d048d88310803a7040f114ee808c18720b Reviewed-by: VaL Doroshchuk <valentyn.doroshchuk@qt.io>
Diffstat (limited to 'src/plugins/avfoundation/mediaplayer/avfmediaplayersession.mm')
-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()