diff options
author | Val Doroshchuk <valentyn.doroshchuk@qt.io> | 2019-03-07 12:53:45 +0100 |
---|---|---|
committer | VaL Doroshchuk <valentyn.doroshchuk@qt.io> | 2019-03-25 08:42:06 +0000 |
commit | 1057d6a89ab4c19825ab2d5d12aed31496b89423 (patch) | |
tree | bf45508e49297398d75eeb7966cf2a608c723e68 /src/plugins/android/src | |
parent | 95b7fc4950c1f0d895896cf3086c69126d45e061 (diff) | |
download | qtmultimedia-1057d6a89ab4c19825ab2d5d12aed31496b89423.tar.gz |
Android: Introduce HTTP headers to MediaPlayer
Added using the headers from QNetworkRequest to be sent together with the request
for the data in MediaPlayer::setDataSource.
The MediaPlayer requires also a Context object, together with headers,
to resolve the Uri. It will try to find a content provider.
Since no content providers are implemented, this produces a warning:
"MediaPlayer: Couldn't open file on client side; trying server side: java.io.FileNotFoundException: No content provider"
Task-number: QTBUG-74073
Change-Id: I1566953b523e84400882ba9d3a968cec6b4a61cf
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
Diffstat (limited to 'src/plugins/android/src')
3 files changed, 13 insertions, 4 deletions
diff --git a/src/plugins/android/src/mediaplayer/qandroidmediaplayercontrol.cpp b/src/plugins/android/src/mediaplayer/qandroidmediaplayercontrol.cpp index 4bfcce5bc..13a8cdbbb 100644 --- a/src/plugins/android/src/mediaplayer/qandroidmediaplayercontrol.cpp +++ b/src/plugins/android/src/mediaplayer/qandroidmediaplayercontrol.cpp @@ -384,7 +384,7 @@ void QAndroidMediaPlayerControl::setMedia(const QMediaContent &mediaContent, if ((mMediaPlayer->display() == 0) && mVideoOutput) mMediaPlayer->setDisplay(mVideoOutput->surfaceTexture()); - mMediaPlayer->setDataSource(mediaContent.canonicalUrl().toString(QUrl::FullyEncoded)); + mMediaPlayer->setDataSource(mediaContent.canonicalRequest()); mMediaPlayer->prepareAsync(); } diff --git a/src/plugins/android/src/wrappers/jni/androidmediaplayer.cpp b/src/plugins/android/src/wrappers/jni/androidmediaplayer.cpp index 79685e16f..f899481f0 100644 --- a/src/plugins/android/src/wrappers/jni/androidmediaplayer.cpp +++ b/src/plugins/android/src/wrappers/jni/androidmediaplayer.cpp @@ -166,9 +166,17 @@ void AndroidMediaPlayer::setMuted(bool mute) mMediaPlayer.callMethod<void>("mute", "(Z)V", jboolean(mute)); } -void AndroidMediaPlayer::setDataSource(const QString &path) +void AndroidMediaPlayer::setDataSource(const QNetworkRequest &request) { - QJNIObjectPrivate string = QJNIObjectPrivate::fromString(path); + QJNIObjectPrivate string = QJNIObjectPrivate::fromString(request.url().toString(QUrl::FullyEncoded)); + + mMediaPlayer.callMethod<void>("initHeaders", "()V"); + for (auto &header : request.rawHeaderList()) { + auto value = request.rawHeader(header); + mMediaPlayer.callMethod<void>("setHeader", "(Ljava/lang/String;Ljava/lang/String;)V", + QJNIObjectPrivate::fromString(header).object(), QJNIObjectPrivate::fromString(value).object()); + } + mMediaPlayer.callMethod<void>("setDataSource", "(Ljava/lang/String;)V", string.object()); } diff --git a/src/plugins/android/src/wrappers/jni/androidmediaplayer.h b/src/plugins/android/src/wrappers/jni/androidmediaplayer.h index 14cbf49bc..37c7456f7 100644 --- a/src/plugins/android/src/wrappers/jni/androidmediaplayer.h +++ b/src/plugins/android/src/wrappers/jni/androidmediaplayer.h @@ -41,6 +41,7 @@ #define ANDROIDMEDIAPLAYER_H #include <QObject> +#include <QNetworkRequest> #include <QtCore/private/qjni_p.h> #include <QAudio> @@ -112,7 +113,7 @@ public: void stop(); void seekTo(qint32 msec); void setMuted(bool mute); - void setDataSource(const QString &path); + void setDataSource(const QNetworkRequest &request); void prepareAsync(); void setVolume(int volume); bool setPlaybackRate(qreal rate); |