- 一些优化

pull/59/head
okjackcaptain 4 years ago
parent 675e81fe6c
commit 1469c78847
  1. 6
      app/src/main/java/com/github/tvbox/osc/api/ApiConfig.java
  2. 72
      app/src/main/java/com/github/tvbox/osc/ui/activity/PlayActivity.java
  3. 10
      app/src/main/java/com/github/tvbox/osc/ui/activity/PushActivity.java
  4. 65
      app/src/main/java/com/github/tvbox/osc/ui/fragment/PlayFragment.java
  5. 4
      app/src/main/java/com/github/tvbox/osc/util/DefaultConfig.java

@ -61,7 +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 String userAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36";
private ApiConfig() {
sourceBeanList = new LinkedHashMap<>();
@ -180,7 +180,9 @@ public class ApiConfig {
}
}
OkGo.<File>get(jarUrl).execute(new AbsCallback<File>() {
OkGo.<File>get(jarUrl)
.headers("User-Agent", userAgent)
.execute(new AbsCallback<File>() {
@Override
public File convertResponse(okhttp3.Response response) throws Throwable {

@ -88,6 +88,7 @@ import java.io.File;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ExecutorService;
@ -731,12 +732,13 @@ public class PlayActivity extends BaseActivity {
hasNext = mVodInfo.playIndex + 1 < mVodInfo.seriesMap.get(mVodInfo.playFlag).size();
}
if (!hasNext) {
if(mVodInfo!=null && isProgress){
if(isProgress && mVodInfo!=null){
mVodInfo.playIndex=0;
Toast.makeText(this, "已经是最后一集了!,即将跳到第一集继续播放", Toast.LENGTH_SHORT).show();
}else {
Toast.makeText(this, "已经是最后一集了!", Toast.LENGTH_SHORT).show();
return;
}
Toast.makeText(this, "已经是最后一集了!", Toast.LENGTH_SHORT).show();
return;
}else {
mVodInfo.playIndex++;
}
@ -761,6 +763,10 @@ public class PlayActivity extends BaseActivity {
private int autoRetryCount = 0;
boolean autoRetry() {
if (loadFoundVideoUrls != null && loadFoundVideoUrls.size() > 0) {
autoRetryFromLoadFoundVideoUrls();
return true;
}
if (autoRetryCount < 2) {
play(false);
autoRetryCount++;
@ -771,6 +777,18 @@ public class PlayActivity extends BaseActivity {
}
}
void autoRetryFromLoadFoundVideoUrls() {
String videoUrl = loadFoundVideoUrls.poll();
HashMap<String,String> header = loadFoundVideoUrlsHeader.get(videoUrl);
playUrl(videoUrl, header);
}
void initParseLoadFound() {
loadFoundCount.set(0);
loadFoundVideoUrls = new LinkedList<String>();
loadFoundVideoUrlsHeader = new HashMap<String, HashMap<String, String>>();
}
public void play(boolean reset) {
VodInfo.VodSeries vs = mVodInfo.seriesMap.get(mVodInfo.playFlag).get(mVodInfo.playIndex);
EventBus.getDefault().post(new RefreshEvent(RefreshEvent.TYPE_REFRESH, mVodInfo.playIndex));
@ -779,7 +797,7 @@ public class PlayActivity extends BaseActivity {
mController.setTitle(playTitleInfo);
stopParse();
loadFoundCount.set(0);
initParseLoadFound();
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;
@ -899,7 +917,7 @@ public class PlayActivity extends BaseActivity {
private void doParse(ParseBean pb) {
stopParse();
loadFoundCount.set(0);
initParseLoadFound();
if (pb.getType() == 0) {
setTip("正在嗅探播放地址", true, false);
mHandler.removeMessages(100);
@ -1097,6 +1115,8 @@ public class PlayActivity extends BaseActivity {
private WebView mSysWebView;
private SysWebClient mSysWebClient;
private Map<String, Boolean> loadedUrls = new HashMap<>();
private LinkedList<String> loadFoundVideoUrls = new LinkedList<>();
private HashMap<String, HashMap<String, String>> loadFoundVideoUrlsHeader = new HashMap<>();
private AtomicInteger loadFoundCount = new AtomicInteger(0);
void loadWebView(String url) {
@ -1357,8 +1377,11 @@ public class PlayActivity extends BaseActivity {
if (!ad) {
if (checkVideoFormat(url)) {
LOG.i("checkVideoFormat:" + url );
loadFoundVideoUrls.add(url);
loadFoundVideoUrlsHeader.put(url, headers);
LOG.i("loadFoundVideoUrl:" + url );
if (loadFoundCount.incrementAndGet() == 1) {
url = loadFoundVideoUrls.poll();
mHandler.removeMessages(100);
if (headers != null && !headers.isEmpty()) {
playUrl(url, headers);
@ -1395,13 +1418,15 @@ public class PlayActivity extends BaseActivity {
HashMap<String, String> webHeaders = new HashMap<>();
try {
Map<String, String> hds = request.getRequestHeaders();
if (!hds.isEmpty() && hds.size() > 0) {
for (String k : hds.keySet()) {
for (String k : hds.keySet()) {
if (k.equalsIgnoreCase("user-agent")
|| k.equalsIgnoreCase("referer")
|| k.equalsIgnoreCase("origin")) {
webHeaders.put(k, hds.get(k));
}
}
} catch (Throwable th) {
th.printStackTrace();
}
WebResourceResponse response = checkIsVideo(url, webHeaders);
return response;
@ -1526,20 +1551,25 @@ public class PlayActivity extends BaseActivity {
}
if (!ad ) {
if (checkVideoFormat(url)) {
LOG.i("checkVideoFormat:" + url );
if (loadFoundCount.incrementAndGet() == 1) {
mHandler.removeMessages(100);
HashMap<String, String> webHeaders = new HashMap<>();
try {
Map<String, String> hds = request.getRequestHeaders();
if (!hds.isEmpty() && hds.size() > 0) {
for (String k : hds.keySet()) {
webHeaders.put(k, hds.get(k));
}
HashMap<String, String> webHeaders = new HashMap<>();
try {
Map<String, String> 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));
}
} catch (Throwable th) {
th.printStackTrace();
}
} catch (Throwable th) {
}
loadFoundVideoUrls.add(url);
loadFoundVideoUrlsHeader.put(url, webHeaders);
LOG.i("loadFoundVideoUrl:" + url );
if (loadFoundCount.incrementAndGet() == 1) {
mHandler.removeMessages(100);
url = loadFoundVideoUrls.poll();
if (webHeaders != null && !webHeaders.isEmpty()) {
playUrl(url, webHeaders);
} else {

@ -13,6 +13,9 @@ import com.github.tvbox.osc.base.BaseActivity;
import com.github.tvbox.osc.server.ControlManager;
import com.github.tvbox.osc.ui.tv.QRCodeGen;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import me.jessyan.autosize.utils.AutoSizeUtils;
public class PushActivity extends BaseActivity {
@ -42,8 +45,13 @@ public class PushActivity extends BaseActivity {
if (manager != null) {
if (manager.hasPrimaryClip() && manager.getPrimaryClip() != null && manager.getPrimaryClip().getItemCount() > 0) {
ClipData.Item addedText = manager.getPrimaryClip().getItemAt(0);
String clipText = addedText.getText().toString().trim();
Matcher m = Pattern.compile("(https?://[A-Za-z0-9:_@$#\\/\\.\\?\\=\\&\\%\\-]+)").matcher(clipText);
if (m.find()) {
clipText = m.group(1);
}
Intent newIntent = new Intent(mContext, DetailActivity.class);
newIntent.putExtra("id", addedText.getText().toString().trim());
newIntent.putExtra("id", clipText);
newIntent.putExtra("sourceKey", "push_agent");
newIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
PushActivity.this.startActivity(newIntent);

@ -88,6 +88,7 @@ import java.io.File;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ExecutorService;
@ -779,6 +780,10 @@ public class PlayFragment extends BaseLazyFragment {
private int autoRetryCount = 0;
boolean autoRetry() {
if (loadFoundVideoUrls != null && loadFoundVideoUrls.size() > 0) {
autoRetryFromLoadFoundVideoUrls();
return true;
}
if (autoRetryCount < 2) {
play(false);
autoRetryCount++;
@ -789,6 +794,18 @@ public class PlayFragment extends BaseLazyFragment {
}
}
void autoRetryFromLoadFoundVideoUrls() {
String videoUrl = loadFoundVideoUrls.poll();
HashMap<String,String> header = loadFoundVideoUrlsHeader.get(videoUrl);
playUrl(videoUrl, header);
}
void initParseLoadFound() {
loadFoundCount.set(0);
loadFoundVideoUrls = new LinkedList<String>();
loadFoundVideoUrlsHeader = new HashMap<String, HashMap<String, String>>();
}
public void play(boolean reset) {
if(mVodInfo==null)return;
VodInfo.VodSeries vs = mVodInfo.seriesMap.get(mVodInfo.playFlag).get(mVodInfo.playIndex);
@ -798,7 +815,7 @@ public class PlayFragment extends BaseLazyFragment {
mController.setTitle(playTitleInfo);
stopParse();
loadFoundCount.set(0);
initParseLoadFound();
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;
@ -919,7 +936,7 @@ public class PlayFragment extends BaseLazyFragment {
private void doParse(ParseBean pb) {
stopParse();
loadFoundCount.set(0);
initParseLoadFound();
if (pb.getType() == 0) {
setTip("正在嗅探播放地址", true, false);
mHandler.removeMessages(100);
@ -1117,6 +1134,8 @@ public class PlayFragment extends BaseLazyFragment {
private WebView mSysWebView;
private SysWebClient mSysWebClient;
private Map<String, Boolean> loadedUrls = new HashMap<>();
private LinkedList<String> loadFoundVideoUrls = new LinkedList<>();
private HashMap<String, HashMap<String, String>> loadFoundVideoUrlsHeader = new HashMap<>();
private AtomicInteger loadFoundCount = new AtomicInteger(0);
void loadWebView(String url) {
@ -1382,8 +1401,11 @@ public class PlayFragment extends BaseLazyFragment {
if (!ad) {
if (checkVideoFormat(url)) {
LOG.i("checkVideoFormat:" + url );
loadFoundVideoUrls.add(url);
loadFoundVideoUrlsHeader.put(url, headers);
LOG.i("loadFoundVideoUrl:" + url );
if (loadFoundCount.incrementAndGet() == 1) {
url = loadFoundVideoUrls.poll();
mHandler.removeMessages(100);
if (headers != null && !headers.isEmpty()) {
playUrl(url, headers);
@ -1420,13 +1442,15 @@ public class PlayFragment extends BaseLazyFragment {
HashMap<String, String> webHeaders = new HashMap<>();
try {
Map<String, String> hds = request.getRequestHeaders();
if (!hds.isEmpty() && hds.size() > 0) {
for (String k : hds.keySet()) {
for (String k : hds.keySet()) {
if (k.equalsIgnoreCase("user-agent")
|| k.equalsIgnoreCase("referer")
|| k.equalsIgnoreCase("origin")) {
webHeaders.put(k, hds.get(k));
}
}
} catch (Throwable th) {
th.printStackTrace();
}
WebResourceResponse response = checkIsVideo(url, webHeaders);
return response;
@ -1551,20 +1575,25 @@ public class PlayFragment extends BaseLazyFragment {
}
if (!ad ) {
if (checkVideoFormat(url)) {
LOG.i("checkVideoFormat:" + url );
if (loadFoundCount.incrementAndGet() == 1) {
mHandler.removeMessages(100);
HashMap<String, String> webHeaders = new HashMap<>();
try {
Map<String, String> hds = request.getRequestHeaders();
if (!hds.isEmpty() && hds.size() > 0) {
for (String k : hds.keySet()) {
webHeaders.put(k, hds.get(k));
}
HashMap<String, String> webHeaders = new HashMap<>();
try {
Map<String, String> 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));
}
} catch (Throwable th) {
th.printStackTrace();
}
} catch (Throwable th) {
}
loadFoundVideoUrls.add(url);
loadFoundVideoUrlsHeader.put(url, webHeaders);
LOG.i("loadFoundVideoUrl:" + url );
if (loadFoundCount.incrementAndGet() == 1) {
mHandler.removeMessages(100);
url = loadFoundVideoUrls.poll();
if (webHeaders != null && !webHeaders.isEmpty()) {
playUrl(url, webHeaders);
} else {

@ -107,9 +107,9 @@ public class DefaultConfig {
//增加对flv|avi|mkv|rm|wmv|mpg等几种视频格式的支持
//private static final Pattern snifferMatch = Pattern.compile("http((?!http).){26,}?\\.(m3u8|mp4)\\?.*|http((?!http).){26,}\\.(m3u8|mp4)|http((?!http).){26,}?/m3u8\\?pt=m3u8.*|http((?!http).)*?default\\.ixigua\\.com/.*|http((?!http).)*?cdn-tos[^\\?]*|http((?!http).)*?/obj/tos[^\\?]*|http.*?/player/m3u8play\\.php\\?url=.*|http.*?/player/.*?[pP]lay\\.php\\?url=.*|http.*?/playlist/m3u8/\\?vid=.*|http.*?\\.php\\?type=m3u8&.*|http.*?/download.aspx\\?.*|http.*?/api/up_api.php\\?.*|https.*?\\.66yk\\.cn.*|http((?!http).)*?netease\\.com/file/.*");
private static final Pattern snifferMatch = Pattern.compile("http((?!http).)*?default\\.365yg\\.com/.*|http((?!http).){26,}?\\.(m3u8|mp4|flv|avi|mkv|rm|wmv|mpg)\\?.*|http((?!http).){26,}\\.(m3u8|mp4|flv|avi|mkv|rm|wmv|mpg)|http((?!http).){20,}?/m3u8\\?pt=m3u8.*|http((?!http).)*?default\\.ixigua\\.com/.*|http((?!http).)*?dycdn-tos\\.pstatp[^\\?]*|http.*?/play.{0,3}\\?[^url]{2,8}=.*|http.*?/player/m3u8play\\.php\\?url=.*|http.*?/player/.*?[pP]lay\\.php\\?url=.*|http.*?/playlist/m3u8/\\?vid=.*|http.*?\\.php\\?type=m3u8&.*|http.*?/download.aspx\\?.*|http.*?/api/up_api.php\\?.*|https.*?\\.66yk\\.cn.*|http((?!http).)*?netease\\.com/file/.*");
private static final Pattern snifferMatch = Pattern.compile("http((?!http).)*?default\\.365yg\\.com/.*|http((?!http).){20,}?\\.(m3u8|mp4|flv|avi|mkv|rm|wmv|mpg)\\?.*|http((?!http).){20,}\\.(m3u8|mp4|flv|avi|mkv|rm|wmv|mpg)|http((?!http).){20,}?/m3u8\\?pt=m3u8.*|http((?!http).)*?default\\.ixigua\\.com/.*|http((?!http).)*?dycdn-tos\\.pstatp[^\\?]*|http.*?/play.{0,3}\\?[^url]{2,8}=.*|http.*?/player/m3u8play\\.php\\?url=.*|http.*?/player/.*?[pP]lay\\.php\\?url=.*|http.*?/playlist/m3u8/\\?vid=.*|http.*?\\.php\\?type=m3u8&.*|http.*?/download.aspx\\?.*|http.*?/api/up_api.php\\?.*|https.*?\\.66yk\\.cn.*|http((?!http).)*?netease\\.com/file/.*");
public static boolean isVideoFormat(String url) {
if (url.contains("=http") || url.contains(".html")) {
if (url.contains("=http") || url.contains("?http") || url.contains(".html")) {
return false;
}
if (snifferMatch.matcher(url).find()) {

Loading…
Cancel
Save