Adjust retry

pull/102/head
FongMi 3 years ago
parent 6fd4edd358
commit d9edece423
  1. 7
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/DetailActivity.java
  2. 7
      app/src/main/java/com/fongmi/android/tv/player/ExoUtil.java
  3. 11
      app/src/main/java/com/fongmi/android/tv/player/Players.java
  4. 8
      app/src/main/java/com/fongmi/android/tv/ui/custom/CustomWebView.java

@ -5,6 +5,7 @@ import android.content.Intent;
import android.os.Handler;
import android.os.Looper;
import android.text.Html;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.view.ViewGroup;
@ -65,7 +66,6 @@ public class DetailActivity extends BaseActivity implements KeyDown.Listener {
private Handler mHandler;
private History mHistory;
private int mCurrent;
private int mRetry;
private String getKey() {
return getIntent().getStringExtra("key");
@ -205,7 +205,7 @@ public class DetailActivity extends BaseActivity implements KeyDown.Listener {
private void getPlayer(boolean replay) {
Vod.Flag.Episode item = (Vod.Flag.Episode) mEpisodeAdapter.get(getEpisodePosition());
if (mFullscreen && mRetry == 0) Notify.show(ResUtil.getString(R.string.play_ready, item.getName()));
if (mFullscreen && Players.get().getRetry() == 0) Notify.show(ResUtil.getString(R.string.play_ready, item.getName()));
mSiteViewModel.playerContent(getKey(), getVodFlag().getFlag(), item.getUrl());
mBinding.progress.getRoot().setVisibility(View.VISIBLE);
mBinding.error.getRoot().setVisibility(View.GONE);
@ -432,7 +432,7 @@ public class DetailActivity extends BaseActivity implements KeyDown.Listener {
if (Players.get().canNext()) onNext();
break;
default:
if (!event.isRetry() || ++mRetry > 3) onError(event.getMsg());
if (!event.isRetry() || Players.get().addRetry() > 3) onError(event.getMsg());
else onRetry();
break;
}
@ -463,7 +463,6 @@ public class DetailActivity extends BaseActivity implements KeyDown.Listener {
mBinding.error.text.setText(msg);
Players.get().stop();
stopTimer();
mRetry = 0;
}
@Override

@ -7,6 +7,7 @@ import com.google.android.exoplayer2.C;
import com.google.android.exoplayer2.MediaItem;
import com.google.android.exoplayer2.ext.rtmp.RtmpDataSource;
import com.google.android.exoplayer2.source.MediaSource;
import com.google.android.exoplayer2.source.ProgressiveMediaSource;
import com.google.android.exoplayer2.source.dash.DashMediaSource;
import com.google.android.exoplayer2.source.hls.HlsMediaSource;
import com.google.android.exoplayer2.source.rtsp.RtspMediaSource;
@ -26,14 +27,16 @@ public class ExoUtil {
DataSource.Factory factory = getFactory(headers, url);
MediaItem mediaItem = new MediaItem.Builder().setUri(videoUri).build();
int type = Util.inferContentType(videoUri);
if (type == C.CONTENT_TYPE_DASH) {
if (type == C.CONTENT_TYPE_HLS || url.contains("php") || url.contains("m3u8") || Players.get().getRetry() > 0) {
return new HlsMediaSource.Factory(factory).createMediaSource(mediaItem);
} else if (type == C.CONTENT_TYPE_DASH) {
return new DashMediaSource.Factory(factory).createMediaSource(mediaItem);
} else if (type == C.CONTENT_TYPE_SS) {
return new SsMediaSource.Factory(factory).createMediaSource(mediaItem);
} else if (type == C.CONTENT_TYPE_RTSP) {
return new RtspMediaSource.Factory().createMediaSource(mediaItem);
} else {
return new HlsMediaSource.Factory(factory).createMediaSource(mediaItem);
return new ProgressiveMediaSource.Factory(factory).createMediaSource(mediaItem);
}
}

@ -26,6 +26,7 @@ public class Players implements Player.Listener, ParseTask.Callback {
private ExoPlayer exoPlayer;
private ParseTask parseTask;
private String key;
private int retry;
private static class Loader {
static volatile Players INSTANCE = new Players();
@ -59,6 +60,15 @@ public class Players implements Player.Listener, ParseTask.Callback {
this.key = key;
}
public int getRetry() {
return retry;
}
public int addRetry() {
++retry;
return retry;
}
public String getSpeed() {
return String.format(Locale.getDefault(), "%.2f", exoPlayer.getPlaybackParameters().speed);
}
@ -135,6 +145,7 @@ public class Players implements Player.Listener, ParseTask.Callback {
}
public void stop() {
this.retry = 0;
if (exoPlayer != null) {
exoPlayer.stop();
exoPlayer.clearMediaItems();

@ -49,9 +49,7 @@ public class CustomWebView extends WebView {
getSettings().setDatabaseEnabled(true);
getSettings().setDomStorageEnabled(true);
getSettings().setJavaScriptEnabled(true);
getSettings().setBlockNetworkImage(true);
getSettings().setLoadWithOverviewMode(true);
getSettings().setLoadsImagesAutomatically(false);
getSettings().setJavaScriptCanOpenWindowsAutomatically(false);
getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
setWebViewClient(webViewClient());
@ -73,7 +71,7 @@ public class CustomWebView extends WebView {
String host = request.getUrl().getHost();
if (ads.contains(host)) return empty;
handler.removeCallbacks(mTimer);
handler.postDelayed(mTimer, 5000);
handler.postDelayed(mTimer, 15 * 1000);
Map<String, String> headers = request.getRequestHeaders();
if (Utils.isVideoFormat(url) || headers.containsKey("Range")) post(headers, url);
return super.shouldInterceptRequest(view, request);
@ -94,8 +92,8 @@ public class CustomWebView extends WebView {
private final Runnable mTimer = new Runnable() {
@Override
public void run() {
if (retry > 5) return;
if (retry++ == 5) stop(true);
if (retry > 3) return;
if (retry++ == 3) stop(true);
else reload();
}
};

Loading…
Cancel
Save