diff options
author | Tony Tam <149837+tonytamsf@users.noreply.github.com> | 2021-01-13 09:51:58 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-01-13 18:51:58 +0100 |
commit | 5be6f5febaa95e9752fa874f18a89e14a12fbad9 (patch) | |
tree | 0c47a72f9854c6513ebd5e299e50417c81d8cff4 /core/src | |
parent | 08d1400951ed107cba14691f6657be32538a5c38 (diff) | |
download | AntennaPod-5be6f5febaa95e9752fa874f18a89e14a12fbad9.zip |
Send Authorization header to be able to stream password protected media (#4843)
Diffstat (limited to 'core/src')
5 files changed, 42 insertions, 3 deletions
diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/playback/ExoPlayerWrapper.java b/core/src/main/java/de/danoeh/antennapod/core/service/playback/ExoPlayerWrapper.java index 71bbf2efd..9a8248984 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/service/playback/ExoPlayerWrapper.java +++ b/core/src/main/java/de/danoeh/antennapod/core/service/playback/ExoPlayerWrapper.java @@ -2,6 +2,7 @@ package de.danoeh.antennapod.core.service.playback; import android.content.Context; import android.net.Uri; +import android.text.TextUtils; import android.util.Log; import android.view.SurfaceHolder; import com.google.android.exoplayer2.C; @@ -28,8 +29,10 @@ import com.google.android.exoplayer2.upstream.DataSource; import com.google.android.exoplayer2.upstream.DefaultDataSourceFactory; import com.google.android.exoplayer2.upstream.DefaultHttpDataSource; import com.google.android.exoplayer2.upstream.DefaultHttpDataSourceFactory; + import de.danoeh.antennapod.core.ClientConfig; import de.danoeh.antennapod.core.preferences.UserPreferences; +import de.danoeh.antennapod.core.service.download.HttpDownloader; import de.danoeh.antennapod.core.util.playback.IPlayer; import io.reactivex.Observable; import io.reactivex.android.schedulers.AndroidSchedulers; @@ -184,14 +187,22 @@ public class ExoPlayerWrapper implements IPlayer { exoPlayer.setAudioAttributes(b.build()); } - @Override - public void setDataSource(String s) throws IllegalArgumentException, IllegalStateException { + public void setDataSource(String s, String user, String password) + throws IllegalArgumentException, IllegalStateException { Log.d(TAG, "setDataSource: " + s); DefaultHttpDataSourceFactory httpDataSourceFactory = new DefaultHttpDataSourceFactory( ClientConfig.USER_AGENT, null, DefaultHttpDataSource.DEFAULT_CONNECT_TIMEOUT_MILLIS, DefaultHttpDataSource.DEFAULT_READ_TIMEOUT_MILLIS, true); + + if (!TextUtils.isEmpty(user) && !TextUtils.isEmpty(password)) { + httpDataSourceFactory.getDefaultRequestProperties().set("Authorization", + HttpDownloader.encodeCredentials( + user, + password, + "ISO-8859-1")); + } DataSource.Factory dataSourceFactory = new DefaultDataSourceFactory(context, null, httpDataSourceFactory); DefaultExtractorsFactory extractorsFactory = new DefaultExtractorsFactory(); extractorsFactory.setConstantBitrateSeekingEnabled(true); @@ -200,6 +211,11 @@ public class ExoPlayerWrapper implements IPlayer { } @Override + public void setDataSource(String s) throws IllegalArgumentException, IllegalStateException { + setDataSource(s, null, null); + } + + @Override public void setDisplay(SurfaceHolder sh) { exoPlayer.setVideoSurfaceHolder(sh); } diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/playback/LocalPSMP.java b/core/src/main/java/de/danoeh/antennapod/core/service/playback/LocalPSMP.java index 325b04e9a..98280f54d 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/service/playback/LocalPSMP.java +++ b/core/src/main/java/de/danoeh/antennapod/core/service/playback/LocalPSMP.java @@ -260,7 +260,16 @@ public class LocalPSMP extends PlaybackServiceMediaPlayer { callback.onMediaChanged(false); setPlaybackParams(PlaybackSpeedUtils.getCurrentPlaybackSpeed(media), UserPreferences.isSkipSilence()); if (stream) { - mediaPlayer.setDataSource(media.getStreamUrl()); + if (playable instanceof FeedMedia) { + FeedMedia feedMedia = (FeedMedia) playable; + FeedPreferences preferences = feedMedia.getItem().getFeed().getPreferences(); + mediaPlayer.setDataSource( + media.getStreamUrl(), + preferences.getUsername(), + preferences.getPassword()); + } else { + mediaPlayer.setDataSource(media.getStreamUrl()); + } } else if (media.getLocalMediaUrl() != null && new File(media.getLocalMediaUrl()).canRead()) { mediaPlayer.setDataSource(media.getLocalMediaUrl()); } else { diff --git a/core/src/main/java/de/danoeh/antennapod/core/util/playback/AudioPlayer.java b/core/src/main/java/de/danoeh/antennapod/core/util/playback/AudioPlayer.java index 031bf9a24..c948d98a3 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/util/playback/AudioPlayer.java +++ b/core/src/main/java/de/danoeh/antennapod/core/util/playback/AudioPlayer.java @@ -10,6 +10,7 @@ import org.antennapod.audio.MediaPlayer; import de.danoeh.antennapod.core.preferences.UserPreferences; +import java.io.IOException; import java.util.Collections; import java.util.List; @@ -64,4 +65,9 @@ public class AudioPlayer extends MediaPlayer implements IPlayer { public int getSelectedAudioTrack() { return -1; } + + @Override + public void setDataSource(String streamUrl, String username, String password) throws IOException { + setDataSource(streamUrl); + } } diff --git a/core/src/main/java/de/danoeh/antennapod/core/util/playback/IPlayer.java b/core/src/main/java/de/danoeh/antennapod/core/util/playback/IPlayer.java index 363004709..a511916fa 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/util/playback/IPlayer.java +++ b/core/src/main/java/de/danoeh/antennapod/core/util/playback/IPlayer.java @@ -35,6 +35,8 @@ public interface IPlayer { void setDataSource(String path) throws IllegalStateException, IOException, IllegalArgumentException, SecurityException; + void setDataSource(String streamUrl, String username, String password) throws IOException; + void setDisplay(SurfaceHolder sh); void setPlaybackParams(float speed, boolean skipSilence); diff --git a/core/src/main/java/de/danoeh/antennapod/core/util/playback/VideoPlayer.java b/core/src/main/java/de/danoeh/antennapod/core/util/playback/VideoPlayer.java index d18801870..6728c027d 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/util/playback/VideoPlayer.java +++ b/core/src/main/java/de/danoeh/antennapod/core/util/playback/VideoPlayer.java @@ -3,6 +3,7 @@ package de.danoeh.antennapod.core.util.playback; import android.media.MediaPlayer; import android.util.Log; +import java.io.IOException; import java.util.Collections; import java.util.List; @@ -52,4 +53,9 @@ public class VideoPlayer extends MediaPlayer implements IPlayer { public int getSelectedAudioTrack() { return -1; } + + @Override + public void setDataSource(String streamUrl, String username, String password) throws IOException { + setDataSource(streamUrl); + } } |