ijk播放器优化;

pull/142/head
21561 1 year ago
parent 6a90b05769
commit dc3c36e94f
  1. 21
      app/src/main/java/com/github/tvbox/osc/player/IjkMediaPlayer.java
  2. 9
      app/src/main/java/com/github/tvbox/osc/ui/activity/PlayActivity.java
  3. 9
      app/src/main/java/com/github/tvbox/osc/ui/fragment/PlayFragment.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";

@ -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; // 更新上次调用时间

@ -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;
}

Loading…
Cancel
Save