diff --git a/app/src/main/java/com/github/tvbox/osc/api/ApiConfig.java b/app/src/main/java/com/github/tvbox/osc/api/ApiConfig.java index 915eba9a..5e38350b 100644 --- a/app/src/main/java/com/github/tvbox/osc/api/ApiConfig.java +++ b/app/src/main/java/com/github/tvbox/osc/api/ApiConfig.java @@ -61,6 +61,7 @@ public class ApiConfig { private JarLoader jarLoader = new JarLoader(); + private String userAgent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36"; private ApiConfig() { sourceBeanList = new LinkedHashMap<>(); @@ -102,6 +103,7 @@ public class ApiConfig { apiFix = "http://" + apiFix; } OkGo.get(apiFix) + .headers("User-Agent", userAgent) .execute(new AbsCallback() { @Override public void onSuccess(Response response) { diff --git a/app/src/main/java/com/github/tvbox/osc/player/controller/VodController.java b/app/src/main/java/com/github/tvbox/osc/player/controller/VodController.java index d2ead17d..80d331d3 100644 --- a/app/src/main/java/com/github/tvbox/osc/player/controller/VodController.java +++ b/app/src/main/java/com/github/tvbox/osc/player/controller/VodController.java @@ -127,7 +127,7 @@ public class VodController extends BaseController { public SimpleSubtitleView mSubtitleView; TextView mZimuBtn; TextView mAudioTrackBtn; - TextView mLandscapePortraitBtn; + public TextView mLandscapePortraitBtn; Handler myHandle; Runnable myRunnable; diff --git a/app/src/main/java/com/github/tvbox/osc/ui/activity/PlayActivity.java b/app/src/main/java/com/github/tvbox/osc/ui/activity/PlayActivity.java index 6c3405b5..a25c93b1 100644 --- a/app/src/main/java/com/github/tvbox/osc/ui/activity/PlayActivity.java +++ b/app/src/main/java/com/github/tvbox/osc/ui/activity/PlayActivity.java @@ -92,6 +92,7 @@ import java.util.List; import java.util.Map; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; +import java.util.concurrent.atomic.AtomicInteger; import me.jessyan.autosize.AutoSize; import tv.danmaku.ijk.media.player.IMediaPlayer; @@ -481,6 +482,7 @@ public class PlayActivity extends BaseActivity { } void playUrl(String url, HashMap headers) { + LOG.i("playUrl:" + url); runOnUiThread(new Runnable() { @Override public void run() { @@ -582,7 +584,6 @@ public class PlayActivity extends BaseActivity { String flag = info.optString("flag"); String url = info.getString("url"); HashMap headers = null; - webUserAgent = null; webHeaderMap = null; if (info.has("header")) { try { @@ -594,9 +595,6 @@ public class PlayActivity extends BaseActivity { headers = new HashMap<>(); } headers.put(key, hds.getString(key)); - if (key.equalsIgnoreCase("user-agent")) { - webUserAgent = hds.getString(key).trim(); - } } webHeaderMap = headers; } catch (Throwable th) { @@ -776,6 +774,7 @@ public class PlayActivity extends BaseActivity { mController.setTitle(playTitleInfo); stopParse(); + loadFoundCount.set(0); if(mVideoView!=null) mVideoView.release(); String subtitleCacheKey = mVodInfo.sourceKey + "-" + mVodInfo.id + "-" + mVodInfo.playFlag + "-" + mVodInfo.playIndex+ "-" + vs.name + "-subt"; String progressKey = mVodInfo.sourceKey + mVodInfo.id + mVodInfo.playFlag + mVodInfo.playIndex + vs.name; @@ -814,7 +813,6 @@ public class PlayActivity extends BaseActivity { private String progressKey; private String parseFlag; private String webUrl; - private String webUserAgent; private Map webHeaderMap; private void initParse(String flag, boolean useParse, String playUrl, final String url) { @@ -844,7 +842,6 @@ public class PlayActivity extends BaseActivity { parseBean.setUrl(playUrl); } } - loadFound = false; doParse(parseBean); } @@ -881,7 +878,6 @@ public class PlayActivity extends BaseActivity { void stopParse() { mHandler.removeMessages(100); stopLoadWebView(false); - loadFound = false; OkGo.getInstance().cancelTag("json_jx"); if (parseThreadPool != null) { try { @@ -897,6 +893,7 @@ public class PlayActivity extends BaseActivity { private void doParse(ParseBean pb) { stopParse(); + loadFoundCount.set(0); if (pb.getType() == 0) { setTip("正在嗅探播放地址", true, false); mHandler.removeMessages(100); @@ -1094,7 +1091,7 @@ public class PlayActivity extends BaseActivity { private WebView mSysWebView; private SysWebClient mSysWebClient; private Map loadedUrls = new HashMap<>(); - private boolean loadFound = false; + private AtomicInteger loadFoundCount = new AtomicInteger(0); void loadWebView(String url) { if (mSysWebView == null && mXwalkWebView == null) { @@ -1161,14 +1158,9 @@ public class PlayActivity extends BaseActivity { runOnUiThread(new Runnable() { @Override public void run() { - // webUserAgent = "Mozilla/5.0 (Linux; Android 6.0.1; Moto G (4)) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Mobile Safari/537.36"; if (mXwalkWebView != null) { mXwalkWebView.stopLoading(); Map map = new HashMap() ; - - if(webUserAgent != null) { - mXwalkWebView.getSettings().setUserAgentString(webUserAgent); - } //mXwalkWebView.clearCache(true); if(webHeaderMap != null){ mXwalkWebView.loadUrl(url,webHeaderMap); @@ -1178,9 +1170,6 @@ public class PlayActivity extends BaseActivity { } if (mSysWebView != null) { mSysWebView.stopLoading(); - if(webUserAgent != null) { - mSysWebView.getSettings().setUserAgentString(webUserAgent); - } //mSysWebView.clearCache(true); if(webHeaderMap != null){ mSysWebView.loadUrl(url,webHeaderMap); @@ -1369,20 +1358,21 @@ public class PlayActivity extends BaseActivity { ad = loadedUrls.get(url); } - if (!ad && !loadFound) { + if (!ad) { if (checkVideoFormat(url)) { - mHandler.removeMessages(100); - loadFound = true; - if (headers != null && !headers.isEmpty()) { - playUrl(url, headers); - } else { - playUrl(url, null); + if (loadFoundCount.incrementAndGet() == 1) { + mHandler.removeMessages(100); + if (headers != null && !headers.isEmpty()) { + playUrl(url, headers); + } else { + playUrl(url, null); + } + stopLoadWebView(false); } - stopLoadWebView(false); } } - return ad || loadFound ? + return ad || loadFoundCount.get() > 0 ? AdBlocker.createEmptyResource() : null; } @@ -1391,9 +1381,9 @@ public class PlayActivity extends BaseActivity { @Override public WebResourceResponse shouldInterceptRequest(WebView view, String url) { WebResourceResponse response = checkIsVideo(url, null); -// if (response == null) -// return super.shouldInterceptRequest(view, url); -// else + if (response == null) + return super.shouldInterceptRequest(view, url); + else return response; } @@ -1410,20 +1400,18 @@ public class PlayActivity extends BaseActivity { HashMap webHeaders = new HashMap<>(); try { Map hds = request.getRequestHeaders(); - for (String k : hds.keySet()) { - if (k.equalsIgnoreCase("user-agent") - || k.equalsIgnoreCase("referer") - || k.equalsIgnoreCase("origin")) { - webHeaders.put(k, " " + hds.get(k)); + if (!hds.isEmpty() && hds.size() > 0) { + for (String k : hds.keySet()) { + webHeaders.put(k, hds.get(k)); } } } catch (Throwable th) { - + th.printStackTrace(); } WebResourceResponse response = checkIsVideo(url, webHeaders); -// if (response == null) -// return super.shouldInterceptRequest(view, request); -// else + if (response == null) + return super.shouldInterceptRequest(view, request); + else return response; } @@ -1531,7 +1519,7 @@ public class PlayActivity extends BaseActivity { String url = request.getUrl().toString(); // suppress favicon requests as we don't display them anywhere if (url.endsWith("/favicon.ico")) { - return null; + return super.shouldInterceptLoadRequest(view, request); } LOG.i("shouldInterceptLoadRequest url:" + url); boolean ad; @@ -1541,32 +1529,31 @@ public class PlayActivity extends BaseActivity { } else { ad = loadedUrls.get(url); } - if (!ad && !loadFound) { + if (!ad ) { if (checkVideoFormat(url)) { - mHandler.removeMessages(100); - loadFound = true; - HashMap webHeaders = new HashMap<>(); - try { - Map hds = request.getRequestHeaders(); - for (String k : hds.keySet()) { - if (k.equalsIgnoreCase("user-agent") - || k.equalsIgnoreCase("referer") - || k.equalsIgnoreCase("origin")) { - webHeaders.put(k, " " + hds.get(k)); + if (loadFoundCount.incrementAndGet() == 1) { + mHandler.removeMessages(100); + HashMap webHeaders = new HashMap<>(); + try { + Map hds = request.getRequestHeaders(); + if (!hds.isEmpty() && hds.size() > 0) { + for (String k : hds.keySet()) { + webHeaders.put(k, hds.get(k)); + } } + } catch (Throwable th) { + th.printStackTrace(); } - } catch (Throwable th) { - - } - if (webHeaders != null && !webHeaders.isEmpty()) { - playUrl(url, webHeaders); - } else { - playUrl(url, null); + if (webHeaders != null && !webHeaders.isEmpty()) { + playUrl(url, webHeaders); + } else { + playUrl(url, null); + } + stopLoadWebView(false); } - stopLoadWebView(false); } } - return ad || loadFound ? + return ad || loadFoundCount.get() > 0 ? createXWalkWebResourceResponse("text/plain", "utf-8", new ByteArrayInputStream("".getBytes())) : super.shouldInterceptLoadRequest(view, request); } diff --git a/app/src/main/java/com/github/tvbox/osc/ui/fragment/PlayFragment.java b/app/src/main/java/com/github/tvbox/osc/ui/fragment/PlayFragment.java index f154fde4..8c74a9a7 100644 --- a/app/src/main/java/com/github/tvbox/osc/ui/fragment/PlayFragment.java +++ b/app/src/main/java/com/github/tvbox/osc/ui/fragment/PlayFragment.java @@ -3,6 +3,7 @@ package com.github.tvbox.osc.ui.fragment; import android.annotation.TargetApi; import android.app.Activity; import android.content.Context; +import android.content.pm.ActivityInfo; import android.graphics.Color; import android.net.http.SslError; import android.os.Build; @@ -91,6 +92,7 @@ import java.util.List; import java.util.Map; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; +import java.util.concurrent.atomic.AtomicInteger; import me.jessyan.autosize.AutoSize; import tv.danmaku.ijk.media.player.IMediaPlayer; @@ -478,6 +480,7 @@ public class PlayFragment extends BaseLazyFragment { } void playUrl(String url, HashMap headers) { + LOG.i("playUrl:" + url); requireActivity().runOnUiThread(new Runnable() { @Override public void run() { @@ -579,7 +582,6 @@ public class PlayFragment extends BaseLazyFragment { String flag = info.optString("flag"); String url = info.getString("url"); HashMap headers = null; - webUserAgent = null; webHeaderMap = null; if (info.has("header")) { try { @@ -591,9 +593,6 @@ public class PlayFragment extends BaseLazyFragment { headers = new HashMap<>(); } headers.put(key, hds.getString(key)); - if (key.equalsIgnoreCase("user-agent")) { - webUserAgent = hds.getString(key).trim(); - } } webHeaderMap = headers; } catch (Throwable th) { @@ -670,6 +669,11 @@ public class PlayFragment extends BaseLazyFragment { } public boolean onBackPressed() { + int requestedOrientation = getActivity().getRequestedOrientation(); + if (requestedOrientation == ActivityInfo.SCREEN_ORIENTATION_PORTRAIT || requestedOrientation == ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT || requestedOrientation == ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT) { + getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE); + mController.mLandscapePortraitBtn.setText("竖屏"); + } if (mController.onBackPressed()) { return true; } @@ -789,6 +793,7 @@ public class PlayFragment extends BaseLazyFragment { mController.setTitle(playTitleInfo); stopParse(); + loadFoundCount.set(0); if(mVideoView!=null) mVideoView.release(); String subtitleCacheKey = mVodInfo.sourceKey + "-" + mVodInfo.id + "-" + mVodInfo.playFlag + "-" + mVodInfo.playIndex+ "-" + vs.name + "-subt"; String progressKey = mVodInfo.sourceKey + mVodInfo.id + mVodInfo.playFlag + mVodInfo.playIndex + vs.name; @@ -827,7 +832,6 @@ public class PlayFragment extends BaseLazyFragment { private String progressKey; private String parseFlag; private String webUrl; - private String webUserAgent; private Map webHeaderMap; private void initParse(String flag, boolean useParse, String playUrl, final String url) { @@ -857,7 +861,6 @@ public class PlayFragment extends BaseLazyFragment { parseBean.setUrl(playUrl); } } - loadFound = false; doParse(parseBean); } @@ -895,7 +898,6 @@ public class PlayFragment extends BaseLazyFragment { void stopParse() { mHandler.removeMessages(100); stopLoadWebView(false); - loadFound = false; OkGo.getInstance().cancelTag("json_jx"); if (parseThreadPool != null) { try { @@ -911,6 +913,7 @@ public class PlayFragment extends BaseLazyFragment { private void doParse(ParseBean pb) { stopParse(); + loadFoundCount.set(0); if (pb.getType() == 0) { setTip("正在嗅探播放地址", true, false); mHandler.removeMessages(100); @@ -1108,7 +1111,7 @@ public class PlayFragment extends BaseLazyFragment { private WebView mSysWebView; private SysWebClient mSysWebClient; private Map loadedUrls = new HashMap<>(); - private boolean loadFound = false; + private AtomicInteger loadFoundCount = new AtomicInteger(0); void loadWebView(String url) { if (mSysWebView == null && mXwalkWebView == null) { @@ -1176,12 +1179,8 @@ public class PlayFragment extends BaseLazyFragment { requireActivity().runOnUiThread(new Runnable() { @Override public void run() { - // webUserAgent = "Mozilla/5.0 (Linux; Android 6.0.1; Moto G (4)) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Mobile Safari/537.36"; if (mXwalkWebView != null) { mXwalkWebView.stopLoading(); -// if(webUserAgent != null) { -// mXwalkWebView.getSettings().setUserAgentString(webUserAgent); -// } //mXwalkWebView.clearCache(true); if(webHeaderMap != null){ mXwalkWebView.loadUrl(url,webHeaderMap); @@ -1191,9 +1190,6 @@ public class PlayFragment extends BaseLazyFragment { } if (mSysWebView != null) { mSysWebView.stopLoading(); -// if(webUserAgent != null) { -// mSysWebView.getSettings().setUserAgentString(webUserAgent); -// } //mSysWebView.clearCache(true); if(webHeaderMap != null){ mSysWebView.loadUrl(url,webHeaderMap); @@ -1375,10 +1371,10 @@ public class PlayFragment extends BaseLazyFragment { } WebResourceResponse checkIsVideo(String url, HashMap headers) { + LOG.i("shouldInterceptRequest url:" + url); if (url.endsWith("/favicon.ico")) { return null; } - LOG.i("shouldInterceptRequest url:" + url); boolean ad; if (!loadedUrls.containsKey(url)) { ad = AdBlocker.isAd(url); @@ -1387,20 +1383,21 @@ public class PlayFragment extends BaseLazyFragment { ad = loadedUrls.get(url); } - if (!ad && !loadFound) { + if (!ad) { if (checkVideoFormat(url)) { - mHandler.removeMessages(100); - loadFound = true; - if (headers != null && !headers.isEmpty()) { - playUrl(url, headers); - } else { - playUrl(url, null); + if (loadFoundCount.incrementAndGet() == 1) { + mHandler.removeMessages(100); + if (headers != null && !headers.isEmpty()) { + playUrl(url, headers); + } else { + playUrl(url, null); + } + stopLoadWebView(false); } - stopLoadWebView(false); } } - return ad || loadFound ? + return ad || loadFoundCount.get() > 0 ? AdBlocker.createEmptyResource() : null; } @@ -1409,9 +1406,9 @@ public class PlayFragment extends BaseLazyFragment { @Override public WebResourceResponse shouldInterceptRequest(WebView view, String url) { WebResourceResponse response = checkIsVideo(url, null); -// if (response == null) -// return super.shouldInterceptRequest(view, url); -// else + if (response == null) + return super.shouldInterceptRequest(view, url); + else return response; } @@ -1428,20 +1425,18 @@ public class PlayFragment extends BaseLazyFragment { HashMap webHeaders = new HashMap<>(); try { Map hds = request.getRequestHeaders(); - for (String k : hds.keySet()) { - if (k.equalsIgnoreCase("user-agent") - || k.equalsIgnoreCase("referer") - || k.equalsIgnoreCase("origin")) { - webHeaders.put(k, " " + hds.get(k)); + if (!hds.isEmpty() && hds.size() > 0) { + for (String k : hds.keySet()) { + webHeaders.put(k, hds.get(k)); } } } catch (Throwable th) { - + th.printStackTrace(); } WebResourceResponse response = checkIsVideo(url, webHeaders); -// if (response == null) -// return super.shouldInterceptRequest(view, request); -// else + if (response == null) + return super.shouldInterceptRequest(view, request); + else return response; } @@ -1549,7 +1544,7 @@ public class PlayFragment extends BaseLazyFragment { String url = request.getUrl().toString(); // suppress favicon requests as we don't display them anywhere if (url.endsWith("/favicon.ico")) { - return null; + return super.shouldInterceptLoadRequest(view, request); } LOG.i("shouldInterceptLoadRequest url:" + url); boolean ad; @@ -1559,32 +1554,31 @@ public class PlayFragment extends BaseLazyFragment { } else { ad = loadedUrls.get(url); } - if (!ad && !loadFound) { + if (!ad ) { if (checkVideoFormat(url)) { - mHandler.removeMessages(100); - loadFound = true; - HashMap webHeaders = new HashMap<>(); - try { - Map hds = request.getRequestHeaders(); - for (String k : hds.keySet()) { - if (k.equalsIgnoreCase("user-agent") - || k.equalsIgnoreCase("referer") - || k.equalsIgnoreCase("origin")) { - webHeaders.put(k, " " + hds.get(k)); + if (loadFoundCount.incrementAndGet() == 1) { + mHandler.removeMessages(100); + HashMap webHeaders = new HashMap<>(); + try { + Map hds = request.getRequestHeaders(); + if (!hds.isEmpty() && hds.size() > 0) { + for (String k : hds.keySet()) { + webHeaders.put(k, hds.get(k)); + } } + } catch (Throwable th) { + th.printStackTrace(); } - } catch (Throwable th) { - - } - if (webHeaders != null && !webHeaders.isEmpty()) { - playUrl(url, webHeaders); - } else { - playUrl(url, null); + if (webHeaders != null && !webHeaders.isEmpty()) { + playUrl(url, webHeaders); + } else { + playUrl(url, null); + } + stopLoadWebView(false); } - stopLoadWebView(false); } } - return ad || loadFound ? + return ad || loadFoundCount.get() > 0 ? createXWalkWebResourceResponse("text/plain", "utf-8", new ByteArrayInputStream("".getBytes())) : super.shouldInterceptLoadRequest(view, request); }