From b34e0fe6b77acbf2f394280f3e688267b187beb5 Mon Sep 17 00:00:00 2001 From: okjack Date: Tue, 4 Jun 2024 18:26:20 +0800 Subject: [PATCH] Danmaku Sync --- .../java/com/fongmi/android/tv/Setting.java | 8 ------ .../com/fongmi/android/tv/player/Players.java | 10 ++----- .../android/tv/player/danmu/Parser.java | 22 ++++++--------- .../tv/ui/fragment/SettingCustomFragment.java | 13 --------- .../res/layout/fragment_setting_custom.xml | 28 ------------------- 5 files changed, 12 insertions(+), 69 deletions(-) diff --git a/app/src/main/java/com/fongmi/android/tv/Setting.java b/app/src/main/java/com/fongmi/android/tv/Setting.java index 8652d4c89..f5596a26a 100644 --- a/app/src/main/java/com/fongmi/android/tv/Setting.java +++ b/app/src/main/java/com/fongmi/android/tv/Setting.java @@ -286,14 +286,6 @@ public class Setting { return Math.min(Math.max(Prefers.getInt("danmu_alpha", 90), 10), 100); } - public static void putDanmuSync(boolean sync) { - Prefers.put("danmu_sync", sync); - } - - public static boolean isDanmuSync() { - return Prefers.getBoolean("danmu_sync", false); - } - public static void putDanmuAlpha(int alpha) { Prefers.put("danmu_alpha", alpha); } diff --git a/app/src/main/java/com/fongmi/android/tv/player/Players.java b/app/src/main/java/com/fongmi/android/tv/player/Players.java index 620435b3d..8f1059b9a 100644 --- a/app/src/main/java/com/fongmi/android/tv/player/Players.java +++ b/app/src/main/java/com/fongmi/android/tv/player/Players.java @@ -81,11 +81,9 @@ public class Players implements Player.Listener, IMediaPlayer.Listener, Analytic private Sub sub; private long position; - private float speed; private int player; private int error; private int retry; - private boolean danmuSync; public static boolean isExo(int type) { return type == EXO; @@ -112,7 +110,6 @@ public class Players implements Player.Listener, IMediaPlayer.Listener, Analytic builder = new StringBuilder(); runnable = ErrorEvent::timeout; formatter = new Formatter(builder, Locale.getDefault()); - danmuSync = Setting.isDanmuSync(); createSession(activity); return this; } @@ -308,8 +305,8 @@ public class Players implements Player.Listener, IMediaPlayer.Listener, Analytic } public String setSpeed(float speed) { - if (exoPlayer != null && !Setting.isTunnel()) exoPlayer.setPlaybackSpeed(this.speed = speed); - if (ijkPlayer != null) ijkPlayer.setSpeed(this.speed = speed); + if (exoPlayer != null && !Setting.isTunnel()) exoPlayer.setPlaybackSpeed(speed); + if (ijkPlayer != null) ijkPlayer.setSpeed(speed); return getSpeedText(); } @@ -689,8 +686,7 @@ public class Players implements Player.Listener, IMediaPlayer.Listener, Analytic @Override public void updateTimer(DanmakuTimer timer) { - if (danmuSync) App.post(() -> timer.update(getPosition())); - else if (speed != 1) timer.add((long) (timer.lastInterval() * (speed - 1))); + } @Override diff --git a/app/src/main/java/com/fongmi/android/tv/player/danmu/Parser.java b/app/src/main/java/com/fongmi/android/tv/player/danmu/Parser.java index cf6d8b5d5..72318e239 100644 --- a/app/src/main/java/com/fongmi/android/tv/player/danmu/Parser.java +++ b/app/src/main/java/com/fongmi/android/tv/player/danmu/Parser.java @@ -24,10 +24,8 @@ import master.flame.danmaku.danmaku.util.DanmakuUtils; public class Parser extends BaseDanmakuParser { private final Danmu danmu; - private BaseDanmaku item; private float scaleX; private float scaleY; - private int index; public Parser(String path) { this.danmu = Danmu.fromXml(getContent(path)); @@ -45,11 +43,9 @@ public class Parser extends BaseDanmakuParser { for (Danmu.Data data : danmu.getData()) { String[] values = data.getParam().split(","); if (values.length < 4) continue; - setParam(values); - setText(data.getText()); - synchronized (result.obtainSynchronizer()) { - result.addItem(item); - } + BaseDanmaku item = createDanmaku(values); + setText(item, data.getText()); + result.addItem(item); } return result; } @@ -62,27 +58,27 @@ public class Parser extends BaseDanmakuParser { return this; } - private void setParam(String[] values) { + private BaseDanmaku createDanmaku(String[] values) { int type = Integer.parseInt(values[1]); long time = (long) (Float.parseFloat(values[0]) * 1000); float size = Float.parseFloat(values[2]) * (mDispDensity - 0.6f); int color = (int) ((0x00000000ff000000L | Long.parseLong(values[3])) & 0x00000000ffffffffL); - item = mContext.mDanmakuFactory.createDanmaku(type, mContext); + BaseDanmaku item = mContext.mDanmakuFactory.createDanmaku(type, mContext); item.setTime(time); item.setTimer(mTimer); item.textSize = size; item.textColor = color; item.textShadowColor = color <= Color.BLACK ? Color.WHITE : Color.BLACK; item.flags = mContext.mGlobalFlagValues; + return item; } - private void setText(String text) { - item.index = index++; + private void setText(BaseDanmaku item, String text) { DanmakuUtils.fillText(item, decodeXmlString(text)); - if (item.getType() == BaseDanmaku.TYPE_SPECIAL && text.startsWith("[") && text.endsWith("]")) setSpecial(); + if (item.getType() == BaseDanmaku.TYPE_SPECIAL && text.startsWith("[") && text.endsWith("]")) setSpecial(item); } - private void setSpecial() { + private void setSpecial(BaseDanmaku item) { String[] textArr = null; try { JSONArray jsonArray = new JSONArray(item.text); diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/SettingCustomFragment.java b/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/SettingCustomFragment.java index 9e103adc3..dce98d730 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/SettingCustomFragment.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/SettingCustomFragment.java @@ -45,7 +45,6 @@ public class SettingCustomFragment extends BaseFragment { @Override protected void initView() { mBinding.sizeText.setText((size = ResUtil.getStringArray(R.array.select_size))[Setting.getSize()]); - mBinding.danmuSyncText.setText(getSwitch(Setting.isDanmuSync())); mBinding.speedText.setText(getSpeedText()); mBinding.incognitoText.setText(getSwitch(Setting.isIncognito())); mBinding.aggregatedSearchText.setText(getSwitch(Setting.isAggregatedSearch())); @@ -57,9 +56,7 @@ public class SettingCustomFragment extends BaseFragment { @Override protected void initEvent() { - mBinding.title.setOnLongClickListener(this::onTitle); mBinding.size.setOnClickListener(this::setSize); - mBinding.danmuSync.setOnClickListener(this::setDanmuSync); mBinding.speed.setOnClickListener(this::setSpeed); mBinding.speed.setOnLongClickListener(this::resetSpeed); mBinding.incognito.setOnClickListener(this::setIncognito); @@ -72,11 +69,6 @@ public class SettingCustomFragment extends BaseFragment { } - private boolean onTitle(View view) { - mBinding.danmuSync.setVisibility(View.VISIBLE); - return true; - } - private void setSize(View view) { new MaterialAlertDialogBuilder(getActivity()).setTitle(R.string.setting_size).setNegativeButton(R.string.dialog_negative, null).setSingleChoiceItems(size, Setting.getSize(), (dialog, which) -> { mBinding.sizeText.setText(size[which]); @@ -86,11 +78,6 @@ public class SettingCustomFragment extends BaseFragment { }).show(); } - private void setDanmuSync(View view) { - Setting.putDanmuSync(!Setting.isDanmuSync()); - mBinding.danmuSyncText.setText(getSwitch(Setting.isDanmuSync())); - } - private String getSpeedText() { return String.format(Locale.getDefault(), "%.2f", Setting.getPlaySpeed()); } diff --git a/app/src/mobile/res/layout/fragment_setting_custom.xml b/app/src/mobile/res/layout/fragment_setting_custom.xml index b7cb91fed..1a8c0090b 100644 --- a/app/src/mobile/res/layout/fragment_setting_custom.xml +++ b/app/src/mobile/res/layout/fragment_setting_custom.xml @@ -70,34 +70,6 @@ - - - - - - - -