diff --git a/app/src/main/java/com/github/tvbox/osc/player/IjkMediaPlayer.java b/app/src/main/java/com/github/tvbox/osc/player/IjkMediaPlayer.java index 2599f260..753c7742 100644 --- a/app/src/main/java/com/github/tvbox/osc/player/IjkMediaPlayer.java +++ b/app/src/main/java/com/github/tvbox/osc/player/IjkMediaPlayer.java @@ -52,29 +52,36 @@ public class IjkMediaPlayer extends IjkPlayer { } } } - mMediaPlayer.setOption(tv.danmaku.ijk.media.player.IjkMediaPlayer.OPT_CATEGORY_PLAYER, "max-fps", 60); + mMediaPlayer.setOption(tv.danmaku.ijk.media.player.IjkMediaPlayer.OPT_CATEGORY_PLAYER, "max-fps", 30); // 设置视频流格式 - mMediaPlayer.setOption(tv.danmaku.ijk.media.player.IjkMediaPlayer.OPT_CATEGORY_PLAYER, "overlay-format", tv.danmaku.ijk.media.player.IjkMediaPlayer.SDL_FCC_RV32); +// mMediaPlayer.setOption(tv.danmaku.ijk.media.player.IjkMediaPlayer.OPT_CATEGORY_PLAYER, "overlay-format", tv.danmaku.ijk.media.player.IjkMediaPlayer.SDL_FCC_RV32); //开启内置字幕 mMediaPlayer.setOption(tv.danmaku.ijk.media.player.IjkMediaPlayer.OPT_CATEGORY_PLAYER, "subtitle", 1); - mMediaPlayer.setOption(tv.danmaku.ijk.media.player.IjkMediaPlayer.OPT_CATEGORY_FORMAT, "dns_cache_clear", 1); mMediaPlayer.setOption(tv.danmaku.ijk.media.player.IjkMediaPlayer.OPT_CATEGORY_FORMAT, "dns_cache_timeout", -1); - mMediaPlayer.setOption(tv.danmaku.ijk.media.player.IjkMediaPlayer.OPT_CATEGORY_FORMAT,"safe",0); if(Hawk.get(HawkConfig.PLAYER_IS_LIVE)){ LOG.i("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_FORMAT, "fflags", "nobuffer"); // 减少协议层缓冲 + // 快速追帧(追赶直播流最新位置) + 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); }else{ LOG.i("type-点播"); -// mMediaPlayer.setOption(tv.danmaku.ijk.media.player.IjkMediaPlayer.OPT_CATEGORY_PLAYER, "max_cached_duration", 100); + // 降低延迟 + 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", 5); + mMediaPlayer.setOption(tv.danmaku.ijk.media.player.IjkMediaPlayer.OPT_CATEGORY_PLAYER, "min-frames", 1); } + // 动态调整码率(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_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"; 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 c4705c77..71cce5db 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 @@ -688,10 +688,10 @@ public class PlayActivity extends BaseActivity { } catch (Throwable th) { } } else { - setTip("获取播放信息错误", false, true); +// setTip("获取播放信息错误", false, true); // 获取播放信息错误后只需再重试一次 -// autoRetryCount=2; -// errorWithRetry("获取播放信息错误", true); + autoRetryCount=2; + errorWithRetry("获取播放信息错误", true); } } }); @@ -841,7 +841,8 @@ public class PlayActivity extends BaseActivity { boolean autoRetry() { long currentTime = System.currentTimeMillis(); // 如果距离上次重试超过 10 秒(10000 毫秒),重置重试次数 - if (autoRetryCount < 2 && currentTime - lastRetryTime > 10_000) { + if (autoRetryCount < 2 && currentTime - lastRetryTime > 20_000) { + LOG.i("echo-reset-autoRetryCount"); autoRetryCount = 0; } lastRetryTime = currentTime; // 更新上次调用时间 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 32a705a4..6feda055 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 @@ -703,14 +703,11 @@ public class PlayFragment extends BaseLazyFragment { playUrl(playUrl + url, headers); } } catch (Throwable th) { -// errorWithRetry("获取播放信息错误", true); -// Toast.makeText(mContext, "获取播放信息错误1", Toast.LENGTH_SHORT).show(); } } else { - setTip("获取播放信息错误", false, true); // 获取播放信息错误后只需再重试一次 -// autoRetryCount=2; -// errorWithRetry("获取播放信息错误", true); + autoRetryCount=2; + errorWithRetry("获取播放信息错误", true); } } }); @@ -872,7 +869,7 @@ public class PlayFragment extends BaseLazyFragment { private long lastRetryTime = 0; // 记录上次调用时间(毫秒) boolean autoRetry() { long currentTime = System.currentTimeMillis(); - if (autoRetryCount<2 && currentTime - lastRetryTime > 10_000){ + if (autoRetryCount<2 && currentTime - lastRetryTime > 20_000){ LOG.i("echo-reset-autoRetryCount"); autoRetryCount = 0; }