diff --git a/ijkplayer/src/main/java/tv/danmaku/ijk/media/player/IjkMediaPlayer.java b/ijkplayer/src/main/java/tv/danmaku/ijk/media/player/IjkMediaPlayer.java index 2807c9709..0060331a7 100644 --- a/ijkplayer/src/main/java/tv/danmaku/ijk/media/player/IjkMediaPlayer.java +++ b/ijkplayer/src/main/java/tv/danmaku/ijk/media/player/IjkMediaPlayer.java @@ -42,6 +42,7 @@ import java.lang.ref.WeakReference; import java.net.URLEncoder; import java.security.InvalidParameterException; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import java.util.Locale; import java.util.Map; @@ -55,6 +56,7 @@ import tv.danmaku.ijk.media.player.misc.IMediaDataSource; import tv.danmaku.ijk.media.player.misc.ITrackInfo; import tv.danmaku.ijk.media.player.misc.IjkTrackInfo; import tv.danmaku.ijk.media.player.pragma.DebugLog; +import tv.danmaku.ijk.media.player.ui.Utils; /** * @author bbcallen @@ -349,16 +351,19 @@ public final class IjkMediaPlayer extends AbstractMediaPlayer { * @throws IllegalStateException if it is called in an invalid state */ public void setDataSource(String path, Map headers) throws IOException, IllegalArgumentException, SecurityException, IllegalStateException { - if (headers != null && !headers.isEmpty()) { - StringBuilder sb = new StringBuilder(); - for (Map.Entry entry : headers.entrySet()) { - sb.append(entry.getKey()); - sb.append(":"); - String value = entry.getValue(); - if (!TextUtils.isEmpty(value)) sb.append(entry.getValue()); - sb.append("\r\n"); - setOption(OPT_CATEGORY_FORMAT, "headers", sb.toString()); - } + for (String key : Arrays.asList(Utils.USER_AGENT, Utils.USER_AGENT.toLowerCase())) { + if (!headers.containsKey(key)) continue; + setOption(OPT_CATEGORY_FORMAT, "user_agent", headers.get(key)); + headers.remove(key); + } + StringBuilder sb = new StringBuilder(); + for (Map.Entry entry : headers.entrySet()) { + sb.append(entry.getKey()); + sb.append(":"); + String value = entry.getValue(); + if (!TextUtils.isEmpty(value)) sb.append(entry.getValue()); + sb.append("\r\n"); + setOption(OPT_CATEGORY_FORMAT, "headers", sb.toString()); } setDataSource(path); } diff --git a/ijkplayer/src/main/java/tv/danmaku/ijk/media/player/MediaSource.java b/ijkplayer/src/main/java/tv/danmaku/ijk/media/player/MediaSource.java index 8c1f87922..ab22b9ad9 100644 --- a/ijkplayer/src/main/java/tv/danmaku/ijk/media/player/MediaSource.java +++ b/ijkplayer/src/main/java/tv/danmaku/ijk/media/player/MediaSource.java @@ -2,6 +2,7 @@ package tv.danmaku.ijk.media.player; import android.net.Uri; +import java.util.HashMap; import java.util.Map; public class MediaSource { @@ -15,7 +16,7 @@ public class MediaSource { } public Map getHeaders() { - return headers; + return headers == null ? new HashMap<>() : headers; } public Uri getUri() { diff --git a/ijkplayer/src/main/java/tv/danmaku/ijk/media/player/ui/IjkVideoView.java b/ijkplayer/src/main/java/tv/danmaku/ijk/media/player/ui/IjkVideoView.java index 3626214c2..f12b495b5 100644 --- a/ijkplayer/src/main/java/tv/danmaku/ijk/media/player/ui/IjkVideoView.java +++ b/ijkplayer/src/main/java/tv/danmaku/ijk/media/player/ui/IjkVideoView.java @@ -14,7 +14,6 @@ import android.widget.MediaController; import androidx.annotation.NonNull; -import java.util.Arrays; import java.util.List; import java.util.Map; @@ -186,7 +185,6 @@ public class IjkVideoView extends FrameLayout implements MediaController.MediaPl try { mPlayer.reset(); setOptions(uri); - fixUserAgent(headers); setRenderView(mCurrentRender); mAudioManager.requestAudioFocus(null, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN); mPlayer.setDataSource(getContext(), uri, headers); @@ -202,14 +200,6 @@ public class IjkVideoView extends FrameLayout implements MediaController.MediaPl } } - private void fixUserAgent(Map headers) { - for (String key : Arrays.asList(Utils.USER_AGENT, Utils.USER_AGENT.toLowerCase())) { - if (!headers.containsKey(key)) continue; - mPlayer.setOption(format, "user_agent", headers.get(key)); - headers.remove(key); - } - } - private void bindSurfaceHolder(IMediaPlayer mp, IRenderView.ISurfaceHolder holder) { if (mp == null || holder == null) return; holder.bindToMediaPlayer(mp);