From dc74084439b22030092d64a78fbdcd4d6d5a4980 Mon Sep 17 00:00:00 2001 From: FongMi Date: Fri, 28 Mar 2025 17:59:21 +0800 Subject: [PATCH] Add libass - part 4 --- .../tv/ui/activity/SettingPlayerActivity.java | 7 +++++ .../res/layout/activity_setting_player.xml | 29 +++++++++++++++++++ .../java/com/fongmi/android/tv/Setting.java | 8 +++++ .../com/fongmi/android/tv/player/Players.java | 2 +- .../tv/player/exo/MediaSourceFactory.java | 7 ++++- app/src/main/res/values-zh-rCN/strings.xml | 1 + app/src/main/res/values-zh-rTW/strings.xml | 1 + app/src/main/res/values/strings.xml | 1 + .../tv/ui/fragment/SettingPlayerFragment.java | 7 +++++ .../res/layout/fragment_setting_player.xml | 29 +++++++++++++++++++ 10 files changed, 90 insertions(+), 2 deletions(-) diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/SettingPlayerActivity.java b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/SettingPlayerActivity.java index 6b2633b9a..b4af4931e 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/SettingPlayerActivity.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/SettingPlayerActivity.java @@ -49,6 +49,7 @@ public class SettingPlayerActivity extends BaseActivity implements UaCallback, B format = new DecimalFormat("0.#"); mBinding.render.requestFocus(); mBinding.uaText.setText(Setting.getUa()); + mBinding.libassText.setText(getSwitch(Setting.isLibAss())); mBinding.tunnelText.setText(getSwitch(Setting.isTunnel())); mBinding.speedText.setText(format.format(Setting.getSpeed())); mBinding.bufferText.setText(String.valueOf(Setting.getBuffer())); @@ -68,6 +69,7 @@ public class SettingPlayerActivity extends BaseActivity implements UaCallback, B mBinding.scale.setOnClickListener(this::setScale); mBinding.speed.setOnClickListener(this::onSpeed); mBinding.buffer.setOnClickListener(this::onBuffer); + mBinding.libass.setOnClickListener(this::setLibAss); mBinding.render.setOnClickListener(this::setRender); mBinding.tunnel.setOnClickListener(this::setTunnel); mBinding.caption.setOnClickListener(this::setCaption); @@ -124,6 +126,11 @@ public class SettingPlayerActivity extends BaseActivity implements UaCallback, B Setting.putBuffer(times); } + private void setLibAss(View view) { + Setting.putLibAss(!Setting.isLibAss()); + mBinding.libassText.setText(getSwitch(Setting.isLibAss())); + } + private void setRender(View view) { int index = Setting.getRender(); Setting.putRender(index = index == render.length - 1 ? 0 : ++index); diff --git a/app/src/leanback/res/layout/activity_setting_player.xml b/app/src/leanback/res/layout/activity_setting_player.xml index b14a26884..c0abb35ad 100644 --- a/app/src/leanback/res/layout/activity_setting_player.xml +++ b/app/src/leanback/res/layout/activity_setting_player.xml @@ -96,6 +96,35 @@ android:gravity="end" android:textColor="@color/white" android:textSize="18sp" + tools:text="預設" /> + + + + + + + + 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 eb80ab7d5..2338be87d 100644 --- a/app/src/main/java/com/fongmi/android/tv/Setting.java +++ b/app/src/main/java/com/fongmi/android/tv/Setting.java @@ -217,6 +217,14 @@ public class Setting { Prefers.put("caption", caption); } + public static boolean isLibAss() { + return Prefers.getBoolean("libass"); + } + + public static void putLibAss(boolean libass) { + Prefers.put("libass", libass); + } + public static boolean isTunnel() { return Prefers.getBoolean("tunnel"); } 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 a2ac019d6..9bf0d812f 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 @@ -138,12 +138,12 @@ public class Players implements Player.Listener, ParseCallback, DrawHandler.Call AssSubtitleParserFactory subtitleParserFactory = new AssSubtitleParserFactory(assHandler); exoPlayer = new ExoPlayer.Builder(App.get()).setLoadControl(ExoUtil.buildLoadControl()).setTrackSelector(ExoUtil.buildTrackSelector()).setRenderersFactory(ExoUtil.buildRenderersFactory(isHard() ? EXTENSION_RENDERER_MODE_ON : EXTENSION_RENDERER_MODE_PREFER)).setMediaSourceFactory(ExoUtil.buildMediaSourceFactory(assHandler, subtitleParserFactory)).build(); exoPlayer.setAudioAttributes(AudioAttributes.DEFAULT, true); + if (Setting.isLibAss()) assHandler.init(exoPlayer); exoPlayer.addAnalyticsListener(new EventLogger()); exoPlayer.setHandleAudioBecomingNoisy(true); view.setRender(Setting.getRender()); exoPlayer.setPlayWhenReady(true); exoPlayer.addListener(this); - assHandler.init(exoPlayer); view.setPlayer(exoPlayer); this.view = view; } diff --git a/app/src/main/java/com/fongmi/android/tv/player/exo/MediaSourceFactory.java b/app/src/main/java/com/fongmi/android/tv/player/exo/MediaSourceFactory.java index 52a1a23c0..85ca020ef 100644 --- a/app/src/main/java/com/fongmi/android/tv/player/exo/MediaSourceFactory.java +++ b/app/src/main/java/com/fongmi/android/tv/player/exo/MediaSourceFactory.java @@ -22,6 +22,7 @@ import androidx.media3.extractor.ExtractorsFactory; import androidx.media3.extractor.ts.TsExtractor; import com.fongmi.android.tv.App; +import com.fongmi.android.tv.Setting; import com.github.catvod.net.OkHttp; import java.util.HashMap; @@ -39,7 +40,11 @@ public class MediaSourceFactory implements MediaSource.Factory { private ExtractorsFactory extractorsFactory; public MediaSourceFactory(AssHandler assHandler, AssSubtitleParserFactory subtitleParserFactory) { - defaultMediaSourceFactory = new DefaultMediaSourceFactory(getDataSourceFactory(), AssPlayerKt.withAssMkvSupport(getExtractorsFactory(), subtitleParserFactory, assHandler)).setSubtitleParserFactory(subtitleParserFactory); + if (Setting.isLibAss()) { + defaultMediaSourceFactory = new DefaultMediaSourceFactory(getDataSourceFactory(), AssPlayerKt.withAssMkvSupport(getExtractorsFactory(), subtitleParserFactory, assHandler)).setSubtitleParserFactory(subtitleParserFactory); + } else { + defaultMediaSourceFactory = new DefaultMediaSourceFactory(getDataSourceFactory(), getExtractorsFactory()); + } } @NonNull diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 63a15083c..ea488072f 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -93,6 +93,7 @@ 播放核心 渲染方式 缩放比例 + 字幕渲染 字幕样式 后台播放 音频软解 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 42e7a3b59..1e4d5b510 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -93,6 +93,7 @@ 播放核心 渲染方式 縮放比例 + 字幕渲染 字幕樣式 背景播放 音訊軟解 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 3de00fb6b..11dd89abb 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -94,6 +94,7 @@ Player Render Scale + libass Caption style Background play Audio software decode diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/SettingPlayerFragment.java b/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/SettingPlayerFragment.java index 7146b4bd3..6b2dd4206 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/SettingPlayerFragment.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/SettingPlayerFragment.java @@ -52,6 +52,7 @@ public class SettingPlayerFragment extends BaseFragment implements UaCallback, B protected void initView() { format = new DecimalFormat("0.#"); mBinding.uaText.setText(Setting.getUa()); + mBinding.libassText.setText(getSwitch(Setting.isLibAss())); mBinding.tunnelText.setText(getSwitch(Setting.isTunnel())); mBinding.speedText.setText(format.format(Setting.getSpeed())); mBinding.bufferText.setText(String.valueOf(Setting.getBuffer())); @@ -72,6 +73,7 @@ public class SettingPlayerFragment extends BaseFragment implements UaCallback, B mBinding.scale.setOnClickListener(this::onScale); mBinding.speed.setOnClickListener(this::onSpeed); mBinding.buffer.setOnClickListener(this::onBuffer); + mBinding.libass.setOnClickListener(this::setLibAss); mBinding.render.setOnClickListener(this::setRender); mBinding.tunnel.setOnClickListener(this::setTunnel); mBinding.caption.setOnClickListener(this::setCaption); @@ -125,6 +127,11 @@ public class SettingPlayerFragment extends BaseFragment implements UaCallback, B Setting.putBuffer(times); } + private void setLibAss(View view) { + Setting.putLibAss(!Setting.isLibAss()); + mBinding.libassText.setText(getSwitch(Setting.isLibAss())); + } + private void setRender(View view) { int index = Setting.getRender(); Setting.putRender(index = index == render.length - 1 ? 0 : ++index); diff --git a/app/src/mobile/res/layout/fragment_setting_player.xml b/app/src/mobile/res/layout/fragment_setting_player.xml index e78a558d5..4369cf656 100644 --- a/app/src/mobile/res/layout/fragment_setting_player.xml +++ b/app/src/mobile/res/layout/fragment_setting_player.xml @@ -123,6 +123,35 @@ + + + + + + + +