Fix ijkplayer ua bug

pull/137/head
FongMi 3 years ago
parent 471edc88c0
commit dcd728b4e1
  1. 25
      ijkplayer/src/main/java/tv/danmaku/ijk/media/player/IjkMediaPlayer.java
  2. 3
      ijkplayer/src/main/java/tv/danmaku/ijk/media/player/MediaSource.java
  3. 10
      ijkplayer/src/main/java/tv/danmaku/ijk/media/player/ui/IjkVideoView.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<String, String> headers) throws IOException, IllegalArgumentException, SecurityException, IllegalStateException {
if (headers != null && !headers.isEmpty()) {
StringBuilder sb = new StringBuilder();
for (Map.Entry<String, String> 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<String, String> 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);
}

@ -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<String, String> getHeaders() {
return headers;
return headers == null ? new HashMap<>() : headers;
}
public Uri getUri() {

@ -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<String, String> 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);

Loading…
Cancel
Save