解决部分在线配置加载失败;解决播放记录未同步问题;恢复嗅探默认正则正则未包含到的视频请自行配置rules;其他小调整

pull/61/head
21561 4 years ago
parent 9b0ff83d61
commit a3f0f35e49
  1. 6
      app/proguard-rules.pro
  2. 2
      app/src/main/java/com/github/tvbox/osc/api/ApiConfig.java
  3. 18
      app/src/main/java/com/github/tvbox/osc/ui/activity/DetailActivity.java
  4. 4
      app/src/main/java/com/github/tvbox/osc/ui/activity/HomeActivity.java
  5. 15
      app/src/main/java/com/github/tvbox/osc/ui/activity/PlayActivity.java
  6. 15
      app/src/main/java/com/github/tvbox/osc/ui/fragment/PlayFragment.java
  7. 47
      app/src/main/java/com/github/tvbox/osc/util/DefaultConfig.java
  8. 5
      app/src/main/java/com/github/tvbox/osc/util/VideoParseRuler.java

@ -201,5 +201,7 @@
-keep class com.github.catvod.crawler.*{*;}
# 迅雷下载模块
-keep class com.xunlei.downloadlib.** {*;}
-keep class com.github.tvbox.quickjs.** {*;}
# quickjs引擎
-keep class com.github.tvbox.quickjs.** {*;}
# 支持影视的ali相关的jar
-keep class com.google.gson.**{*;}

@ -62,7 +62,7 @@ public class ApiConfig {
private JarLoader jarLoader = new JarLoader();
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 String userAgent = "okhttp/3.15";
private String requestAccept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9";

@ -604,16 +604,16 @@ public class DetailActivity extends BaseActivity {
if (event.obj != null) {
if (event.obj instanceof Integer) {
int index = (int) event.obj;
if (index != vodInfo.playIndex) {
seriesAdapter.getData().get(vodInfo.playIndex).selected = false;
seriesAdapter.notifyItemChanged(vodInfo.playIndex);
seriesAdapter.getData().get(index).selected = true;
seriesAdapter.notifyItemChanged(index);
mGridView.setSelection(index);
vodInfo.playIndex = index;
//保存历史
insertVod(sourceKey, vodInfo);
for (int j = 0; j < vodInfo.seriesMap.get(vodInfo.playFlag).size(); j++) {
seriesAdapter.getData().get(j).selected = false;
seriesAdapter.notifyItemChanged(j);
}
seriesAdapter.getData().get(index).selected = true;
seriesAdapter.notifyItemChanged(index);
mGridView.setSelection(index);
vodInfo.playIndex = index;
//保存历史
insertVod(sourceKey, vodInfo);
} else if (event.obj instanceof JSONObject) {
vodInfo.playerCfg = ((JSONObject) event.obj).toString();
//保存历史

@ -619,7 +619,7 @@ public class HomeActivity extends BaseActivity {
dialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
@Override
public void onDismiss(DialogInterface dialog) {
if (homeSourceKey != null && !homeSourceKey.equals(Hawk.get(HawkConfig.HOME_API, ""))) {
// if (homeSourceKey != null && !homeSourceKey.equals(Hawk.get(HawkConfig.HOME_API, ""))) {
// Intent intent = getApplicationContext().getPackageManager().getLaunchIntentForPackage(getApplication().getPackageName());
// intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP
// | Intent.FLAG_ACTIVITY_CLEAR_TASK);
@ -638,7 +638,7 @@ public class HomeActivity extends BaseActivity {
// HomeActivity.this.startActivity(intent);
}
// }
}
});
dialog.show();

@ -149,11 +149,7 @@ public class PlayActivity extends BaseActivity {
ProgressManager progressManager = new ProgressManager() {
@Override
public void saveProgress(String url, long progress) {
if (videoDuration != -1) {
if (videoDuration <= 6000) {
return;
}
}
if (videoDuration ==0) return;
CacheManager.save(MD5.string2MD5(url), progress);
}
@ -238,13 +234,20 @@ public class PlayActivity extends BaseActivity {
void initVideoDurationSomeThing() {
videoDuration = mVideoView.getMediaPlayer().getDuration();
if (videoDuration <= 6000) {
if (videoDuration ==0) {
mController.mPlayerSpeedBtn.setVisibility(View.GONE);
mController.mPlayerTimeStartEndText.setVisibility(View.GONE);
mController.mPlayerTimeStartBtn.setVisibility(View.GONE);
mController.mPlayerTimeSkipBtn.setVisibility(View.GONE);
mController.mPlayerTimeStepBtn.setVisibility(View.GONE);
mController.mPlayerTimeResetBtn.setVisibility(View.GONE);
}else {
mController.mPlayerSpeedBtn.setVisibility(View.VISIBLE);
mController.mPlayerTimeStartEndText.setVisibility(View.VISIBLE);
mController.mPlayerTimeStartBtn.setVisibility(View.VISIBLE);
mController.mPlayerTimeSkipBtn.setVisibility(View.VISIBLE);
mController.mPlayerTimeStepBtn.setVisibility(View.VISIBLE);
mController.mPlayerTimeResetBtn.setVisibility(View.VISIBLE);
}
}

@ -149,11 +149,7 @@ public class PlayFragment extends BaseLazyFragment {
ProgressManager progressManager = new ProgressManager() {
@Override
public void saveProgress(String url, long progress) {
if (videoDuration != -1) {
if (videoDuration <= 6000) {
return;
}
}
if (videoDuration ==0) return;
CacheManager.save(MD5.string2MD5(url), progress);
}
@ -238,13 +234,20 @@ public class PlayFragment extends BaseLazyFragment {
void initVideoDurationSomeThing() {
videoDuration = mVideoView.getMediaPlayer().getDuration();
if (videoDuration <= 6000) {
if (videoDuration == 0) {
mController.mPlayerSpeedBtn.setVisibility(View.GONE);
mController.mPlayerTimeStartEndText.setVisibility(View.GONE);
mController.mPlayerTimeStartBtn.setVisibility(View.GONE);
mController.mPlayerTimeSkipBtn.setVisibility(View.GONE);
mController.mPlayerTimeStepBtn.setVisibility(View.GONE);
mController.mPlayerTimeResetBtn.setVisibility(View.GONE);
}else {
mController.mPlayerSpeedBtn.setVisibility(View.VISIBLE);
mController.mPlayerTimeStartEndText.setVisibility(View.VISIBLE);
mController.mPlayerTimeStartBtn.setVisibility(View.VISIBLE);
mController.mPlayerTimeSkipBtn.setVisibility(View.VISIBLE);
mController.mPlayerTimeStepBtn.setVisibility(View.VISIBLE);
mController.mPlayerTimeResetBtn.setVisibility(View.VISIBLE);
}
}

@ -106,28 +106,37 @@ public class DefaultConfig {
return start > -1 ? fileName.substring(0, start) : fileName;
}
private static final String[] videoSuffix = {"m3u8","mp4","flv","avi","mkv","rm","wmv","mpg"};
// private static final String[] videoSuffix = {"m3u8","mp4","flv","avi","mkv","rm","wmv","mpg"};
// public static boolean isVideoFormat(String url) {
// if (url.contains("=http")) {
// return false;
// }
// Uri uri = Uri.parse(url);
// String path = uri.getPath();
// if (path == null || path.isEmpty()) {
// return false;
// }
// if (path.endsWith(".js") || path.endsWith(".css") || path.endsWith(".html")) {
// return false;
// }
// String query = uri.getQuery();
// if (query != null && query.startsWith("http")) {
// return false;
// }
// for(String oneSubfix : videoSuffix) {
// if (path.contains("." + oneSubfix)) {
// return true;
// }
// }
// return false;
// }
private static final Pattern snifferMatch = Pattern.compile("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")) {
return false;
}
Uri uri = Uri.parse(url);
String path = uri.getPath();
if (path == null || path.isEmpty()) {
return false;
}
if (path.endsWith(".js") || path.endsWith(".css") || path.endsWith(".html")) {
if (url.contains("=http") || url.contains(".html")) {
return false;
}
String query = uri.getQuery();
if (query != null && query.startsWith("http")) {
return false;
}
for(String oneSubfix : videoSuffix) {
if (path.endsWith("." + oneSubfix)) {
return true;
}
}
if (snifferMatch.matcher(url).find()) return true;
return false;
}

@ -27,10 +27,7 @@ public class VideoParseRuler {
public static boolean checkIsVideoForParse(String webUrl, String url) {
try {
boolean isVideo = DefaultConfig.isVideoFormat(url);
if (webUrl == null || webUrl.isEmpty()) {
return isVideo;
}
if (!isVideo) {
if (!HOSTS_RULE.isEmpty() && !isVideo && webUrl != null) {
Uri uri = Uri.parse(webUrl);
isVideo = checkVideoForOneHostRules(uri.getHost(), url);
if (!isVideo) {

Loading…
Cancel
Save