优化自动切换播放器的时机;

兼容type3类型的需要独立jar支持的直播;
pull/144/head
于俊 9 months ago
parent 1b69e1bcb0
commit 4f54caa7ad
  1. 12
      app/src/main/java/com/github/catvod/crawler/JarLoader.java
  2. 20
      app/src/main/java/com/github/tvbox/osc/api/ApiConfig.java
  3. 8
      app/src/main/java/com/github/tvbox/osc/ui/activity/LivePlayActivity.java
  4. 9
      app/src/main/java/com/github/tvbox/osc/ui/activity/PlayActivity.java
  5. 10
      app/src/main/java/com/github/tvbox/osc/ui/fragment/PlayFragment.java

@ -52,6 +52,18 @@ public class JarLoader {
return loadClassLoader(cache, recentJarKey);
}
public void setRecentJarKey(String key) {
recentJarKey = key;
}
public void loadLiveJar(String jarUrl) {
String[] urls = jarUrl.split(";md5;");
jarUrl = urls[0];
String jarKey = MD5.string2MD5(jarUrl);
String jarMd5 = urls.length > 1 ? urls[1].trim() : "";
loadJarInternal(jarUrl,jarMd5,jarKey);
}
public void clear() {
spiders.clear();
proxyMethods.clear();

@ -639,8 +639,12 @@ public class ApiConfig {
bReader.close();
parseLiveJson(apiUrl, sb.toString());
}
private String liveSpider="";
private void parseLiveJson(String apiUrl, String jsonStr) {
JsonObject infoJson = gson.fromJson(jsonStr, JsonObject.class);
// spider
liveSpider = DefaultConfig.safeJsonString(infoJson, "spider", "");
// 直播源
initLiveSettings();
if(infoJson.has("lives")){
@ -789,7 +793,7 @@ public class ApiConfig {
}
} else {
String type= livesOBJ.get("type").getAsString();
if(type.equals("0")){
if(type.equals("0") || type.equals("3")){
url = livesOBJ.get("url").getAsString();
if(!url.startsWith("http://127.0.0.1")){
if(url.startsWith("http")){
@ -797,6 +801,14 @@ public class ApiConfig {
}
url ="http://127.0.0.1:9978/proxy?do=live&type=txt&ext="+url;
}
if(type.equals("3")){
String jarUrl = livesOBJ.get("jar").getAsString().trim();
if(!jarUrl.isEmpty()){
jarLoader.loadLiveJar(jarUrl);
}else if(!liveSpider.isEmpty()){
jarLoader.loadLiveJar(liveSpider);
}
}
LOG.i("echo-live-proxy-url:"+url);
}else {
return;
@ -830,6 +842,12 @@ public class ApiConfig {
}
}
public void setLiveJar(String liveJar)
{
String jarUrl=!liveJar.isEmpty()?liveJar:liveSpider;
jarLoader.setRecentJarKey(MD5.string2MD5(jarUrl));
}
public String getSpider() {
return spider;
}

@ -921,6 +921,8 @@ public class LivePlayActivity extends BaseActivity {
int position=Hawk.get(HawkConfig.LIVE_GROUP_INDEX, 0);
JsonArray live_groups=Hawk.get(HawkConfig.LIVE_GROUP_LIST,new JsonArray());
JsonObject livesOBJ = live_groups.get(position).getAsJsonObject();
String type = livesOBJ.has("type")?livesOBJ.get("type").getAsString():"0";
if(livesOBJ.has("catchup")){
catchup = livesOBJ.getAsJsonObject("catchup");
LOG.i("echo-catchup :"+ catchup.toString());
@ -929,6 +931,10 @@ public class LivePlayActivity extends BaseActivity {
if(livesOBJ.has("logo")){
logoUrl = livesOBJ.get("logo").getAsString();
}
if(type.equals("3")){
String jarUrl=livesOBJ.has("jar")?livesOBJ.get("jar").getAsString():"";
ApiConfig.get().setLiveJar(jarUrl);
}
}
private HashMap<String,String> liveWebHeader()
@ -1773,7 +1779,7 @@ public class LivePlayActivity extends BaseActivity {
JsonObject livesOBJ = live_groups.get(position).getAsJsonObject();
if(livesOBJ.has("type")){
String type= livesOBJ.get("type").getAsString();
if(!type.equals("0")){
if(!type.equals("0") && !type.equals("3")){
Toast.makeText(App.getInstance(), "暂不支持该直播类型", Toast.LENGTH_SHORT).show();
break;
}

@ -874,20 +874,17 @@ public class PlayActivity extends BaseActivity {
play(false);
autoRetryCount++;
}else {
if(mController.switchPlayer()){
autoRetryCount++;
// webPlayUrl=mController.getWebPlayUrlIfNeeded(webPlayUrl);
}else {
// Toast.makeText(mContext, "自动切换播放器重试", Toast.LENGTH_SHORT).show();
}
//第一次重试直接带着原地址继续播放
if(webPlayUrl!=null){
//切换播放器不占用重试次数
if(mController.switchPlayer())autoRetryCount++;
stopParse();
initParseLoadFound();
if(mVideoView!=null) mVideoView.release();
playUrl(webPlayUrl, webHeaderMap);
}else {
play(false);
autoRetryCount++;
}
}
return true;

@ -904,21 +904,17 @@ public class PlayFragment extends BaseLazyFragment {
play(false);
autoRetryCount++;
}else {
//切换播放器不占用重试次数
if(mController.switchPlayer()){
// webPlayUrl=mController.getWebPlayUrlIfNeeded(webPlayUrl);
autoRetryCount++;
}else {
// Toast.makeText(mContext, "自动切换播放器重试", Toast.LENGTH_SHORT).show();
}
//第一次重试直接带着原地址继续播放
if(webPlayUrl!=null){
//切换播放器不占用重试次数
if(mController.switchPlayer())autoRetryCount++;
stopParse();
initParseLoadFound();
if(mVideoView!=null) mVideoView.release();
playUrl(webPlayUrl, webHeaderMap);
}else {
play(false);
autoRetryCount++;
}
}
return true;

Loading…
Cancel
Save