From 1057d6a89ab4c19825ab2d5d12aed31496b89423 Mon Sep 17 00:00:00 2001 From: Val Doroshchuk Date: Thu, 7 Mar 2019 12:53:45 +0100 Subject: 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 --- src/plugins/android/src/wrappers/jni/androidmediaplayer.cpp | 12 ++++++++++-- src/plugins/android/src/wrappers/jni/androidmediaplayer.h | 3 ++- 2 files changed, 12 insertions(+), 3 deletions(-) (limited to 'src/plugins/android/src/wrappers') 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("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("initHeaders", "()V"); + for (auto &header : request.rawHeaderList()) { + auto value = request.rawHeader(header); + mMediaPlayer.callMethod("setHeader", "(Ljava/lang/String;Ljava/lang/String;)V", + QJNIObjectPrivate::fromString(header).object(), QJNIObjectPrivate::fromString(value).object()); + } + mMediaPlayer.callMethod("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 +#include #include #include @@ -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); -- cgit v1.2.3