修播放重试bug

pull/142/head
jun 1 year ago
parent 20f04543f1
commit 18fbbc7da8
  1. 18
      app/src/main/java/com/github/tvbox/osc/player/IjkMediaPlayer.java
  2. 2
      app/src/main/java/com/github/tvbox/osc/ui/activity/LivePlayActivity.java
  3. 9
      app/src/main/java/com/github/tvbox/osc/ui/activity/PlayActivity.java
  4. 8
      app/src/main/java/com/github/tvbox/osc/ui/fragment/PlayFragment.java

@ -65,24 +65,24 @@ public class IjkMediaPlayer extends IjkPlayer {
if(Hawk.get(HawkConfig.PLAYER_IS_LIVE)){
LOG.i("echo-type-直播");
// mMediaPlayer.setOption(tv.danmaku.ijk.media.player.IjkMediaPlayer.OPT_CATEGORY_PLAYER, "packet-buffering", 0);
mMediaPlayer.setOption(tv.danmaku.ijk.media.player.IjkMediaPlayer.OPT_CATEGORY_PLAYER, "max_cached_duration", 300);
// 快速追帧(追赶直播流最新位置)
mMediaPlayer.setOption(tv.danmaku.ijk.media.player.IjkMediaPlayer.OPT_CATEGORY_PLAYER, "enable-accurate-seek", 0);
mMediaPlayer.setOption(tv.danmaku.ijk.media.player.IjkMediaPlayer.OPT_CATEGORY_FORMAT, "flush_packets", 1);
mMediaPlayer.setOption(tv.danmaku.ijk.media.player.IjkMediaPlayer.OPT_CATEGORY_PLAYER, "min-frames", 1);
mMediaPlayer.setOption(tv.danmaku.ijk.media.player.IjkMediaPlayer.OPT_CATEGORY_CODEC, "threads", "1");
// 限制视频缓冲队列大小
mMediaPlayer.setOption(tv.danmaku.ijk.media.player.IjkMediaPlayer.OPT_CATEGORY_PLAYER, "max-buffer-size", 1024 * 512);
}else{
LOG.i("echo-type-点播");
// 降低延迟
mMediaPlayer.setOption(tv.danmaku.ijk.media.player.IjkMediaPlayer.OPT_CATEGORY_PLAYER, "max_cached_duration", 3000);
mMediaPlayer.setOption(tv.danmaku.ijk.media.player.IjkMediaPlayer.OPT_CATEGORY_FORMAT, "infbuf", 0);
mMediaPlayer.setOption(tv.danmaku.ijk.media.player.IjkMediaPlayer.OPT_CATEGORY_PLAYER, "min-frames", 1);
mMediaPlayer.setOption(tv.danmaku.ijk.media.player.IjkMediaPlayer.OPT_CATEGORY_PLAYER, "min-frames", 5);
mMediaPlayer.setOption(tv.danmaku.ijk.media.player.IjkMediaPlayer.OPT_CATEGORY_CODEC, "threads", "2");
// 限制视频缓冲队列大小
mMediaPlayer.setOption(tv.danmaku.ijk.media.player.IjkMediaPlayer.OPT_CATEGORY_PLAYER, "max-buffer-size", 1024 * 512 * 4);
}
// 动态调整码率(ABR)
// mMediaPlayer.setOption(tv.danmaku.ijk.media.player.IjkMediaPlayer.OPT_CATEGORY_PLAYER, "sync-av-start", 1);
// mMediaPlayer.setOption(tv.danmaku.ijk.media.player.IjkMediaPlayer.OPT_CATEGORY_PLAYER, "sync-av-start", 1);//强制音画同步
mMediaPlayer.setOption(tv.danmaku.ijk.media.player.IjkMediaPlayer.OPT_CATEGORY_FORMAT, "reconnect", 1);
mMediaPlayer.setOption(tv.danmaku.ijk.media.player.IjkMediaPlayer.OPT_CATEGORY_CODEC, "threads", "2");
// 限制视频缓冲队列大小
mMediaPlayer.setOption(tv.danmaku.ijk.media.player.IjkMediaPlayer.OPT_CATEGORY_PLAYER, "max-buffer-size", 1024 * 512);
}
private static final String ITV_TARGET_DOMAIN = "gslbserv.itv.cmvideo.cn";

@ -1191,7 +1191,7 @@ public class LivePlayActivity extends BaseActivity {
case VideoView.STATE_ERROR:
case VideoView.STATE_PLAYBACK_COMPLETED:
mHandler.removeCallbacks(mConnectTimeoutChangeSourceRun);
mHandler.postDelayed(mConnectTimeoutChangeSourceRun, 1500);
mHandler.postDelayed(mConnectTimeoutChangeSourceRun, 3000);
break;
case VideoView.STATE_PREPARING:
case VideoView.STATE_BUFFERING:

@ -218,7 +218,7 @@ public class PlayActivity extends BaseActivity {
play(true);
}else {
if(webPlayUrl!=null && !webPlayUrl.isEmpty()) {
playUrl(webPlayUrl,webHeaderMap);
goPlayUrl(webPlayUrl,webHeaderMap);
}else {
play(false);
}
@ -500,6 +500,7 @@ public class PlayActivity extends BaseActivity {
@Override
public void run() {
if (finish) {
setTip(err, false, true);
Toast.makeText(mContext, err, Toast.LENGTH_SHORT).show();
finish();
} else {
@ -515,7 +516,7 @@ public class PlayActivity extends BaseActivity {
goPlayUrl(url,headers);
return;
}
if (url.contains("://127.0.0.1/") || !url.contains(".m3u8")) {
if (url.startsWith("http://127.0.0.1") || !url.contains(".m3u8")) {
goPlayUrl(url,headers);
return;
}
@ -706,8 +707,6 @@ public class PlayActivity extends BaseActivity {
}
} else {
// setTip("获取播放信息错误", false, true);
// 获取播放信息错误后只需再重试一次
autoRetryCount=2;
errorWithRetry("获取播放信息错误", true);
}
}
@ -858,7 +857,7 @@ public class PlayActivity extends BaseActivity {
boolean autoRetry() {
long currentTime = System.currentTimeMillis();
// 如果距离上次重试超过 10 秒(10000 毫秒),重置重试次数
if (autoRetryCount >0 && currentTime - lastRetryTime > 20_000) {
if (currentTime - lastRetryTime > 60_000) {
LOG.i("echo-reset-autoRetryCount");
autoRetryCount = 0;
}

@ -236,7 +236,7 @@ public class PlayFragment extends BaseLazyFragment {
play(true);
}else {
if(webPlayUrl!=null && !webPlayUrl.isEmpty()) {
playUrl(webPlayUrl,webHeaderMap);
goPlayUrl(webPlayUrl,webHeaderMap);
}else {
play(false);
}
@ -510,6 +510,7 @@ public class PlayFragment extends BaseLazyFragment {
@Override
public void run() {
if (finish) {
setTip(err, false, true);
Toast.makeText(mContext, err, Toast.LENGTH_SHORT).show();
} else {
setTip(err, false, true);
@ -524,7 +525,7 @@ public class PlayFragment extends BaseLazyFragment {
goPlayUrl(url,headers);
return;
}
if (url.contains("://127.0.0.1/") || !url.contains(".m3u8")) {
if (url.startsWith("http://127.0.0.1") || !url.contains(".m3u8")) {
goPlayUrl(url,headers);
return;
}
@ -722,7 +723,6 @@ public class PlayFragment extends BaseLazyFragment {
}
} else {
// 获取播放信息错误后只需再重试一次
autoRetryCount=2;
errorWithRetry("获取播放信息错误", true);
}
}
@ -885,7 +885,7 @@ public class PlayFragment extends BaseLazyFragment {
private long lastRetryTime = 0; // 记录上次调用时间(毫秒)
boolean autoRetry() {
long currentTime = System.currentTimeMillis();
if (autoRetryCount>0 && currentTime - lastRetryTime > 20_000){
if (currentTime - lastRetryTime > 60_000){
LOG.i("echo-reset-autoRetryCount");
autoRetryCount = 0;
}

Loading…
Cancel
Save