pull/171/head
FongMi 3 years ago
parent 380b78c71c
commit dbb1732648
  1. 9
      app/src/main/java/com/fongmi/android/tv/bean/Channel.java
  2. 10
      app/src/main/java/com/fongmi/android/tv/bean/Result.java
  3. 24
      app/src/main/java/com/fongmi/android/tv/player/ExoUtil.java
  4. 12
      app/src/main/java/com/fongmi/android/tv/player/Source.java
  5. 5
      app/src/main/java/com/fongmi/android/tv/player/extractor/BiliBili.java
  6. 5
      app/src/main/java/com/fongmi/android/tv/player/extractor/Force.java
  7. 5
      app/src/main/java/com/fongmi/android/tv/player/extractor/JianPian.java
  8. 5
      app/src/main/java/com/fongmi/android/tv/player/extractor/Push.java
  9. 5
      app/src/main/java/com/fongmi/android/tv/player/extractor/TVBus.java
  10. 5
      app/src/main/java/com/fongmi/android/tv/player/extractor/Thunder.java
  11. 5
      app/src/main/java/com/fongmi/android/tv/player/extractor/Youtube.java
  12. 5
      app/src/main/java/com/fongmi/android/tv/player/extractor/ZLive.java

@ -43,6 +43,7 @@ public class Channel {
private Drm drm;
private boolean selected;
private boolean cache;
private Group group;
private String url;
private Epg data;
@ -195,6 +196,14 @@ public class Channel {
this.selected = item.equals(this);
}
public boolean isCache() {
return cache;
}
public void setCache(boolean cache) {
this.cache = cache;
}
public int getLineVisible() {
return isOnly() ? View.GONE : View.VISIBLE;
}

@ -75,6 +75,8 @@ public class Result implements Parcelable {
@JsonAdapter(MsgAdapter.class)
@SerializedName("msg")
private String msg;
@SerializedName("cache")
private boolean cache;
public static Result objectFrom(String str) {
try {
@ -260,6 +262,14 @@ public class Result implements Parcelable {
this.msg = msg;
}
public boolean isCache() {
return cache;
}
public void setCache(boolean cache) {
this.cache = cache;
}
public boolean hasMsg() {
return getMsg().length() > 0;
}

@ -16,7 +16,9 @@ import androidx.media3.datasource.DefaultHttpDataSource;
import androidx.media3.datasource.HttpDataSource;
import androidx.media3.datasource.cache.Cache;
import androidx.media3.datasource.cache.CacheDataSource;
import androidx.media3.datasource.cache.CacheEvictor;
import androidx.media3.datasource.cache.LeastRecentlyUsedCacheEvictor;
import androidx.media3.datasource.cache.NoOpCacheEvictor;
import androidx.media3.datasource.cache.SimpleCache;
import androidx.media3.datasource.okhttp.OkHttpDataSource;
import androidx.media3.exoplayer.DefaultLoadControl;
@ -56,10 +58,13 @@ import okhttp3.Call;
public class ExoUtil {
private static LeastRecentlyUsedCacheEvictor usedCacheEvictor;
private static HttpDataSource.Factory httpDataSourceFactory;
private static DataSource.Factory dataSourceFactory;
private static ExtractorsFactory extractorsFactory;
private static NoOpCacheEvictor noOpCacheEvictor;
private static DatabaseProvider database;
private static CacheEvictor evictor;
private static Cache cache;
public static LoadControl buildLoadControl() {
@ -105,18 +110,19 @@ public class ExoUtil {
}
public static MediaSource getSource(Result result, int errorCode) {
return getSource(result.getHeaders(), result.getRealUrl(), result.getFormat(), result.getSubs(), null, errorCode);
return getSource(result.getHeaders(), result.getRealUrl(), result.getFormat(), result.getSubs(), null, errorCode, result.isCache());
}
public static MediaSource getSource(Channel channel, int errorCode) {
return getSource(channel.getHeaders(), channel.getUrl(), null, Collections.emptyList(), channel.getDrm(), errorCode);
return getSource(channel.getHeaders(), channel.getUrl(), null, Collections.emptyList(), channel.getDrm(), errorCode, channel.isCache());
}
public static MediaSource getSource(Map<String, String> headers, String url, int errorCode) {
return getSource(headers, url, null, Collections.emptyList(), null, errorCode);
return getSource(headers, url, null, Collections.emptyList(), null, errorCode, false);
}
private static MediaSource getSource(Map<String, String> headers, String url, String format, List<Sub> subs, Drm drm, int errorCode) {
private static MediaSource getSource(Map<String, String> headers, String url, String format, List<Sub> subs, Drm drm, int errorCode, boolean cache) {
checkEvictor(cache);
Uri uri = Uri.parse(Util.fixUrl(url));
String mimeType = getMimeType(format, errorCode);
if (uri.getUserInfo() != null) headers.put(HttpHeaders.AUTHORIZATION, Util.basic(uri));
@ -164,6 +170,14 @@ public class ExoUtil {
player.setTrackSelectionParameters(player.getTrackSelectionParameters().buildUpon().setOverrideForType(new TrackSelectionOverride(player.getCurrentTracks().getGroups().get(group).getMediaTrackGroup(), trackIndices)).build());
}
private static void checkEvictor(boolean cache) {
if (noOpCacheEvictor == null) noOpCacheEvictor = new NoOpCacheEvictor();
if (usedCacheEvictor == null) usedCacheEvictor = new LeastRecentlyUsedCacheEvictor(100 * 1024 * 1024);
CacheEvictor evictor = cache ? usedCacheEvictor : noOpCacheEvictor;
if (!evictor.equals(ExoUtil.evictor)) reset();
ExoUtil.evictor = evictor;
}
private static synchronized ExtractorsFactory getExtractorsFactory() {
if (extractorsFactory == null) extractorsFactory = new DefaultExtractorsFactory().setTsExtractorFlags(DefaultTsPayloadReaderFactory.FLAG_ENABLE_HDMV_DTS_AUDIO_STREAMS).setTsExtractorTimestampSearchBytes(TsExtractor.DEFAULT_TIMESTAMP_SEARCH_BYTES * 3);
return extractorsFactory;
@ -190,7 +204,7 @@ public class ExoUtil {
}
private static synchronized Cache getCache() {
if (cache == null) cache = new SimpleCache(Path.exo(), new LeastRecentlyUsedCacheEvictor(100 * 1024 * 1024), getDatabase());
if (cache == null) cache = new SimpleCache(Path.exo(), evictor, getDatabase());
return cache;
}

@ -49,14 +49,18 @@ public class Source {
public String fetch(Result result) throws Exception {
String url = result.getUrl().v();
Extractor extractor = getExtractor(url);
if (extractor != null) result.setParse(0);
return extractor == null ? url : extractor.fetch(url);
if (extractor == null) return url;
result.setParse(0);
result.setCache(extractor.useCache());
return extractor.fetch(url);
}
public String fetch(Channel channel) throws Exception {
String url = channel.getCurrent().split("\\$")[0];
Extractor extractor = getExtractor(url);
return extractor == null ? url : extractor.fetch(url);
if (extractor == null) return url;
channel.setCache(extractor.useCache());
return extractor.fetch(url);
}
public void stop() {
@ -71,6 +75,8 @@ public class Source {
public interface Extractor {
boolean useCache();
boolean match(String scheme, String host);
String fetch(String url) throws Exception;

@ -12,6 +12,11 @@ import okhttp3.Headers;
public class BiliBili implements Source.Extractor {
@Override
public boolean useCache() {
return false;
}
@Override
public boolean match(String scheme, String host) {
return "live.bilibili.com".equals(host);

@ -22,6 +22,11 @@ public class Force implements Source.Extractor {
private final HashSet<String> set = new HashSet<>();
@Override
public boolean useCache() {
return false;
}
@Override
public boolean match(String scheme, String host) {
return !scheme.equals("push") && scheme.startsWith("p") || scheme.equals("mitv");

@ -13,6 +13,11 @@ public class JianPian implements Source.Extractor {
private P2PClass p2p;
private String path;
@Override
public boolean useCache() {
return true;
}
@Override
public boolean match(String scheme, String host) {
return scheme.equals("tvbox-xg") || scheme.equals("jianpian");

@ -11,6 +11,11 @@ import com.fongmi.android.tv.ui.activity.VideoActivity;
public class Push implements Source.Extractor {
@Override
public boolean useCache() {
return false;
}
@Override
public boolean match(String scheme, String host) {
return scheme.equals("push");

@ -15,6 +15,11 @@ public class TVBus implements Source.Extractor, Listener {
private String hls;
private Core core;
@Override
public boolean useCache() {
return false;
}
@Override
public boolean match(String scheme, String host) {
return scheme.equals("tvbus");

@ -18,6 +18,11 @@ public class Thunder implements Source.Extractor {
private GetTaskId taskId;
@Override
public boolean useCache() {
return true;
}
@Override
public boolean match(String scheme, String host) {
return scheme.equals("magnet") || scheme.equals("ed2k");

@ -23,6 +23,11 @@ import okhttp3.Headers;
public class Youtube implements Source.Extractor {
@Override
public boolean useCache() {
return false;
}
@Override
public boolean match(String scheme, String host) {
return host.contains("youtube.com") || host.contains("youtu.be");

@ -9,6 +9,11 @@ public class ZLive implements Source.Extractor {
private final String BASE = "http://127.0.0.1:6677/stream/";
private boolean init;
@Override
public boolean useCache() {
return false;
}
public void init() {
//com.east.android.zlive.ZLive.INSTANCE.OnLiveStart(6677);
//init = true;

Loading…
Cancel
Save