ijk support skip ads

pull/137/head
FongMi 3 years ago
parent 5401efe86d
commit 62d9037640
  1. 10
      app/src/main/java/com/fongmi/android/tv/player/ExoUtil.java
  2. 25
      app/src/main/java/com/fongmi/android/tv/player/IjkUtil.java
  3. 4
      app/src/main/java/com/fongmi/android/tv/player/Players.java
  4. 12
      app/src/main/java/com/fongmi/android/tv/server/process/ActionRequestProcess.java
  5. 7
      app/src/main/java/com/fongmi/android/tv/utils/Sniffer.java
  6. 2
      ijkplayer/src/main/java/tv/danmaku/ijk/media/player/IjkMediaPlayer.java
  7. 1
      ijkplayer/src/main/java/tv/danmaku/ijk/media/player/MediaInfo.java
  8. 24
      ijkplayer/src/main/java/tv/danmaku/ijk/media/player/MediaSource.java
  9. 5
      ijkplayer/src/main/java/tv/danmaku/ijk/media/player/ui/IjkVideoView.java

@ -34,12 +34,11 @@ import androidx.media3.extractor.ts.TsExtractor;
import androidx.media3.ui.CaptionStyleCompat;
import com.fongmi.android.tv.App;
import com.fongmi.android.tv.api.ApiConfig;
import com.fongmi.android.tv.bean.Result;
import com.fongmi.android.tv.bean.Rule;
import com.fongmi.android.tv.bean.Sub;
import com.fongmi.android.tv.utils.FileUtil;
import com.fongmi.android.tv.utils.Prefers;
import com.fongmi.android.tv.utils.Sniffer;
import com.github.catvod.net.OkHttp;
import com.google.common.net.HttpHeaders;
@ -102,12 +101,7 @@ public class ExoUtil {
else if (errorCode == PlaybackException.ERROR_CODE_PARSING_CONTAINER_UNSUPPORTED || errorCode == PlaybackException.ERROR_CODE_IO_UNSPECIFIED) builder.setMimeType(MimeTypes.APPLICATION_M3U8);
if (subs.size() > 0) builder.setSubtitleConfigurations(getSubtitles(subs));
builder.setAllowChunklessPreparation(Prefers.getDecode() == 1);
return builder.setAds(getAdsRegex(uri)).build();
}
private static List<String> getAdsRegex(Uri uri) {
if (uri.getHost() != null) for (Rule rule : ApiConfig.get().getRules()) for (String host : rule.getHosts()) if (uri.getHost().contains(host)) return rule.getRegex();
return Collections.emptyList();
return builder.setAds(Sniffer.getAdsRegex(uri)).build();
}
private static List<MediaItem.SubtitleConfiguration> getSubtitles(List<Sub> subs) {

@ -0,0 +1,25 @@
package com.fongmi.android.tv.player;
import android.net.Uri;
import com.fongmi.android.tv.bean.Result;
import com.fongmi.android.tv.server.Server;
import com.fongmi.android.tv.utils.Sniffer;
import java.util.Map;
import tv.danmaku.ijk.media.player.MediaSource;
public class IjkUtil {
public static MediaSource getSource(Result result) {
return getSource(result.getHeaders(), result.getRealUrl());
}
public static MediaSource getSource(Map<String, String> headers, String url) {
Uri uri = Uri.parse(url.trim().replace("\\", ""));
boolean hasAds = Sniffer.getAdsRegex(uri).size() > 0;
if (hasAds) uri = Uri.parse(Server.get().getAddress(true).concat("/m3u8?url=").concat(url));
return new MediaSource(headers, uri);
}
}

@ -336,7 +336,7 @@ public class Players implements Player.Listener, IMediaPlayer.Listener, Analytic
private void setMediaSource(Result result) {
SpiderDebug.log(errorCode + "," + result.getRealUrl() + "," + checkHeaders(result.getHeaders()));
if (isIjk()) ijkPlayer.setMediaSource(result.getRealUrl(), result.getHeaders());
if (isIjk()) ijkPlayer.setMediaSource(IjkUtil.getSource(result));
if (isExo()) exoPlayer.setMediaSource(ExoUtil.getSource(result, errorCode));
if (isExo()) exoPlayer.prepare();
setTimeoutCheck(result.getRealUrl());
@ -344,7 +344,7 @@ public class Players implements Player.Listener, IMediaPlayer.Listener, Analytic
private void setMediaSource(Map<String, String> headers, String url) {
SpiderDebug.log(errorCode + "," + url + "," + checkHeaders(headers));
if (isIjk()) ijkPlayer.setMediaSource(url, headers);
if (isIjk()) ijkPlayer.setMediaSource(IjkUtil.getSource(headers, url));
if (isExo()) exoPlayer.setMediaSource(ExoUtil.getSource(headers, url, errorCode));
if (isExo()) exoPlayer.prepare();
setTimeoutCheck(url);

@ -54,29 +54,29 @@ public class ActionRequestProcess implements RequestProcess {
return Nano.createSuccessResponse();
}
public void onSearch(Map<String, String> params) {
private void onSearch(Map<String, String> params) {
String word = Objects.requireNonNullElse(params.get("word"), "");
if (word.length() > 0) ServerEvent.search(word);
}
public void onPush(Map<String, String> params) {
private void onPush(Map<String, String> params) {
String url = Objects.requireNonNullElse(params.get("url"), "");
if (url.length() > 0) ServerEvent.push(url);
}
public void onApi(Map<String, String> params) {
private void onApi(Map<String, String> params) {
String url = Objects.requireNonNullElse(params.get("url"), "");
if (url.length() > 0) ServerEvent.api(url);
}
public void onCast(Map<String, String> params) {
private void onCast(Map<String, String> params) {
Config config = Config.find(params.get("url"), 0);
Device device = Device.objectFrom(params.get("device"));
History history = History.objectFrom(params.get("history"));
CastEvent.post(config, device, history);
}
public void onSync(Map<String, String> params) {
private void onSync(Map<String, String> params) {
boolean sync = Objects.equals(params.get("mode"), "0");
boolean keep = Objects.equals(params.get("type"), "keep");
boolean history = Objects.equals(params.get("type"), "history");
@ -145,7 +145,7 @@ public class ActionRequestProcess implements RequestProcess {
};
}
public void syncKeep(Map<String, String> params) {
private void syncKeep(Map<String, String> params) {
List<Config> configs = Config.arrayFrom(params.get("configs"));
List<Keep> targets = Keep.arrayFrom(params.get("targets"));
boolean replace = Objects.equals(params.get("mode"), "1");

@ -6,7 +6,9 @@ import com.fongmi.android.tv.api.ApiConfig;
import com.fongmi.android.tv.bean.Rule;
import com.github.catvod.crawler.SpiderDebug;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Pattern;
@ -38,4 +40,9 @@ public class Sniffer {
for (Rule rule : ApiConfig.get().getRules()) for (String host : rule.getHosts()) if (host.equals("*")) for (String regex : rule.getRegex()) return Pattern.compile(regex).matcher(url).find();
return false;
}
public static List<String> getAdsRegex(Uri uri) {
if (uri.getHost() != null) for (Rule rule : ApiConfig.get().getRules()) for (String host : rule.getHosts()) if (uri.getHost().contains(host)) return rule.getRegex();
return Collections.emptyList();
}
}

@ -160,13 +160,11 @@ public final class IjkMediaPlayer extends AbstractMediaPlayer {
private PowerManager.WakeLock mWakeLock = null;
private boolean mScreenOnWhilePlaying;
private boolean mStayAwake;
private boolean dotOpen;
private int mVideoWidth;
private int mVideoHeight;
private int mVideoSarNum;
private int mVideoSarDen;
private int dotPort;
private String mDataSource;

@ -18,6 +18,7 @@
package tv.danmaku.ijk.media.player;
public class MediaInfo {
public String mMediaPlayerName;
public String mVideoDecoder;

@ -0,0 +1,24 @@
package tv.danmaku.ijk.media.player;
import android.net.Uri;
import java.util.Map;
public class MediaSource {
private final Map<String, String> headers;
private final Uri uri;
public MediaSource(Map<String, String> headers, Uri uri) {
this.headers = headers;
this.uri = uri;
}
public Map<String, String> getHeaders() {
return headers;
}
public Uri getUri() {
return uri;
}
}

@ -21,6 +21,7 @@ import java.util.Map;
import tv.danmaku.ijk.media.player.IMediaPlayer;
import tv.danmaku.ijk.media.player.IjkMediaPlayer;
import tv.danmaku.ijk.media.player.IjkTimedText;
import tv.danmaku.ijk.media.player.MediaSource;
import tv.danmaku.ijk.media.player.R;
import tv.danmaku.ijk.media.player.misc.ITrackInfo;
import tv.danmaku.ijk.media.player.misc.IjkTrackInfo;
@ -155,8 +156,8 @@ public class IjkVideoView extends FrameLayout implements MediaController.MediaPl
if (mRenderView != null) mRenderView.setAspectRatio(resizeMode);
}
public void setMediaSource(String path, Map<String, String> headers) {
setVideoURI(Uri.parse(path.trim().replace("\\", "")), headers);
public void setMediaSource(MediaSource source) {
setVideoURI(source.getUri(), source.getHeaders());
}
private void setVideoURI(Uri uri, Map<String, String> headers) {

Loading…
Cancel
Save