From 18fbbc7da89f04559e9d5d307636fef6054735c5 Mon Sep 17 00:00:00 2001 From: jun <215613905@qq.com> Date: Tue, 4 Mar 2025 00:05:27 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=92=AD=E6=94=BE=E9=87=8D=E8=AF=95bu?= =?UTF-8?q?g?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tvbox/osc/player/IjkMediaPlayer.java | 18 +++++++++--------- .../osc/ui/activity/LivePlayActivity.java | 2 +- .../tvbox/osc/ui/activity/PlayActivity.java | 9 ++++----- .../tvbox/osc/ui/fragment/PlayFragment.java | 8 ++++---- 4 files changed, 18 insertions(+), 19 deletions(-) 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 36dc6bc9..af77a09c 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 @@ -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"; diff --git a/app/src/main/java/com/github/tvbox/osc/ui/activity/LivePlayActivity.java b/app/src/main/java/com/github/tvbox/osc/ui/activity/LivePlayActivity.java index f347b872..b1be38f2 100644 --- a/app/src/main/java/com/github/tvbox/osc/ui/activity/LivePlayActivity.java +++ b/app/src/main/java/com/github/tvbox/osc/ui/activity/LivePlayActivity.java @@ -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: 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 29667767..78ba1f49 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 @@ -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; } 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 cc71a4bd..dd6dd138 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 @@ -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; }