diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/DetailActivity.java b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/DetailActivity.java index 6cfa2e346..f23752645 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/DetailActivity.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/DetailActivity.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 diff --git a/app/src/main/java/com/fongmi/android/tv/player/ExoUtil.java b/app/src/main/java/com/fongmi/android/tv/player/ExoUtil.java index 93d723f00..9bd38c404 100644 --- a/app/src/main/java/com/fongmi/android/tv/player/ExoUtil.java +++ b/app/src/main/java/com/fongmi/android/tv/player/ExoUtil.java @@ -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); } } diff --git a/app/src/main/java/com/fongmi/android/tv/player/Players.java b/app/src/main/java/com/fongmi/android/tv/player/Players.java index 42b92342e..51b38be90 100644 --- a/app/src/main/java/com/fongmi/android/tv/player/Players.java +++ b/app/src/main/java/com/fongmi/android/tv/player/Players.java @@ -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(); diff --git a/app/src/main/java/com/fongmi/android/tv/ui/custom/CustomWebView.java b/app/src/main/java/com/fongmi/android/tv/ui/custom/CustomWebView.java index 5ebec0ab0..fd156c975 100644 --- a/app/src/main/java/com/fongmi/android/tv/ui/custom/CustomWebView.java +++ b/app/src/main/java/com/fongmi/android/tv/ui/custom/CustomWebView.java @@ -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 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(); } };