pull/123/head
FongMi 3 years ago
parent f94b2ef927
commit e2e457df8e
  1. 7
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/DetailActivity.java
  2. 10
      app/src/main/java/com/fongmi/android/tv/bean/Result.java
  3. 8
      app/src/main/java/com/fongmi/android/tv/bean/Site.java
  4. 3
      app/src/main/java/com/fongmi/android/tv/model/SiteViewModel.java
  5. 12
      app/src/main/java/com/fongmi/android/tv/player/ExoUtil.java
  6. 1
      ijkplayer/src/main/java/tv/danmaku/ijk/media/player/ui/IjkVideoView.java

@ -92,9 +92,9 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis
private CustomKeyDownVod mKeyDown;
private ExecutorService mExecutor;
private SiteViewModel mViewModel;
private List<String> mBroken;
private History mHistory;
private Players mPlayers;
private String mSiteKey;
private boolean fullscreen;
private boolean initTrack;
private boolean initAuto;
@ -210,9 +210,9 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis
mKeyDown = CustomKeyDownVod.create(this, mBinding.video);
mFrameParams = mBinding.video.getLayoutParams();
mPlayers = new Players().init();
mBroken = new ArrayList<>();
mR1 = this::hideControl;
mR2 = this::setTraffic;
mSiteKey = getKey();
setRecyclerView();
setVideoView();
setViewModel();
@ -849,6 +849,7 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis
private void onError(ErrorEvent event) {
Clock.get().setCallback(null);
showError(event.getMsg());
mBroken.add(getId());
mPlayers.stop();
startFlow();
}
@ -929,6 +930,7 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis
private boolean mismatch(Vod item) {
String keyword = mBinding.part.getTag().toString();
if (mBroken.contains(item.getVodId())) return true;
if (isAutoMode()) return !item.getVodName().equals(keyword);
else return !item.getVodName().contains(keyword);
}
@ -948,7 +950,6 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis
private void nextSite() {
if (mSearchAdapter.size() == 0) return;
Vod vod = (Vod) mSearchAdapter.get(0);
if (vod.getSiteKey().equals(mSiteKey)) return;
Notify.show(getString(R.string.play_switch_site, vod.getSiteName()));
mSearchAdapter.removeItems(0, 1);
setInitAuto(false);

@ -56,6 +56,8 @@ public class Result {
private String key;
@SerializedName("subs")
private List<Sub> subs;
@SerializedName("ads")
private List<String> ads;
public static Result fromJson(String str) {
try {
@ -190,6 +192,14 @@ public class Result {
return subs == null ? Collections.emptyList() : subs;
}
public List<String> getAds() {
return ads == null ? Collections.emptyList() : ads;
}
public void setAds(List<String> ads) {
this.ads = ads;
}
public String getRealUrl() {
return getPlayUrl() + getUrl();
}

@ -15,7 +15,7 @@ import com.google.gson.annotations.SerializedName;
import java.util.Collections;
import java.util.List;
@Entity(ignoredColumns = {"type", "api", "playUrl", "playerType", "ext", "jar", "categories"})
@Entity(ignoredColumns = {"type", "api", "playUrl", "playerType", "ext", "jar", "categories", "ads"})
public class Site {
@NonNull
@ -44,6 +44,8 @@ public class Site {
private String jar;
@SerializedName("categories")
private List<String> categories;
@SerializedName("ads")
private List<String> ads;
private boolean activated;
@ -148,6 +150,10 @@ public class Site {
return categories == null ? Collections.emptyList() : categories;
}
public List<String> getAds() {
return ads == null ? Collections.emptyList() : ads;
}
public boolean isActivated() {
return activated;
}

@ -142,6 +142,7 @@ public class SiteViewModel extends ViewModel {
ApiConfig.get().setJar(site.getJar());
Result result = Result.objectFrom(playerContent);
if (result.getFlag().isEmpty()) result.setFlag(flag);
if (result.getAds().isEmpty()) result.setAds(site.getAds());
result.setKey(key);
return result;
} else if (site.getType() == 4) {
@ -152,6 +153,7 @@ public class SiteViewModel extends ViewModel {
SpiderDebug.log(body);
Result result = Result.fromJson(body);
if (result.getFlag().isEmpty()) result.setFlag(flag);
if (result.getAds().isEmpty()) result.setAds(site.getAds());
return result;
} else {
String url = id;
@ -160,6 +162,7 @@ public class SiteViewModel extends ViewModel {
Result result = new Result();
result.setUrl(url);
result.setFlag(flag);
result.setAds(site.getAds());
result.setPlayUrl(site.getPlayUrl());
result.setParse(Utils.isVideoFormat(url) && result.getPlayUrl().isEmpty() ? 0 : 1);
return result;

@ -78,26 +78,26 @@ public class ExoUtil {
}
public static MediaSource getSource(Result result, int errorCode) {
return getSource(result.getHeaders(), result.getRealUrl(), result.getSubs(), errorCode);
return getSource(result.getHeaders(), result.getRealUrl(), result.getSubs(), result.getAds(), errorCode);
}
public static MediaSource getSource(Map<String, String> headers, String url, int errorCode) {
return getSource(headers, url, Collections.emptyList(), errorCode);
return getSource(headers, url, Collections.emptyList(), Collections.emptyList(), errorCode);
}
private static MediaSource getSource(Map<String, String> headers, String url, List<Sub> subs, int errorCode) {
private static MediaSource getSource(Map<String, String> headers, String url, List<Sub> subs, List<String> ads, int errorCode) {
Uri uri = Uri.parse(url.trim().replace("\\", ""));
if (uri.getUserInfo() != null) headers.put(HttpHeaders.AUTHORIZATION, "Basic " + Base64.encodeToString(uri.getUserInfo().getBytes(), Base64.NO_WRAP));
return new DefaultMediaSourceFactory(getDataSourceFactory(headers), getExtractorsFactory()).createMediaSource(getMediaItem(uri, subs, errorCode));
return new DefaultMediaSourceFactory(getDataSourceFactory(headers), getExtractorsFactory()).createMediaSource(getMediaItem(uri, subs, ads, errorCode));
}
private static MediaItem getMediaItem(Uri uri, List<Sub> subs, int errorCode) {
private static MediaItem getMediaItem(Uri uri, List<Sub> subs, List<String> ads, int errorCode) {
MediaItem.Builder builder = new MediaItem.Builder().setUri(uri);
if (errorCode == PlaybackException.ERROR_CODE_PARSING_MANIFEST_MALFORMED) builder.setMimeType(MimeTypes.APPLICATION_OCTET);
else if (errorCode == PlaybackException.ERROR_CODE_PARSING_CONTAINER_UNSUPPORTED) builder.setMimeType(MimeTypes.APPLICATION_M3U8);
if (subs.size() > 0) builder.setSubtitleConfigurations(getSubtitles(subs));
builder.setAllowChunklessPreparation(Prefers.getDecode() == 1);
return builder.build();
return builder.setAds(ads).build();
}
private static List<MediaItem.SubtitleConfiguration> getSubtitles(List<Sub> subs) {

@ -254,7 +254,6 @@ public class IjkVideoView extends FrameLayout implements MediaController.MediaPl
public void seekTo(int positionMs) {
if (!isInPlaybackState()) return;
onInfo(mPlayer, IMediaPlayer.MEDIA_INFO_BUFFERING_START, 0);
Log.e("DDD", "SEEKTO");
mPlayer.seekTo(positionMs);
mStartPosition = 0;
}

Loading…
Cancel
Save