Add libass - part 4

pull/589/head
FongMi 1 year ago
parent ddc5e1eae2
commit dc74084439
  1. 7
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/SettingPlayerActivity.java
  2. 29
      app/src/leanback/res/layout/activity_setting_player.xml
  3. 8
      app/src/main/java/com/fongmi/android/tv/Setting.java
  4. 2
      app/src/main/java/com/fongmi/android/tv/player/Players.java
  5. 7
      app/src/main/java/com/fongmi/android/tv/player/exo/MediaSourceFactory.java
  6. 1
      app/src/main/res/values-zh-rCN/strings.xml
  7. 1
      app/src/main/res/values-zh-rTW/strings.xml
  8. 1
      app/src/main/res/values/strings.xml
  9. 7
      app/src/mobile/java/com/fongmi/android/tv/ui/fragment/SettingPlayerFragment.java
  10. 29
      app/src/mobile/res/layout/fragment_setting_player.xml

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

@ -96,6 +96,35 @@
android:gravity="end"
android:textColor="@color/white"
android:textSize="18sp"
tools:text="預設" />
</LinearLayout>
<LinearLayout
android:id="@+id/libass"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:background="@drawable/selector_item"
android:focusable="true"
android:focusableInTouchMode="true"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:text="@string/player_libass"
android:textColor="@color/white"
android:textSize="18sp" />
<TextView
android:id="@+id/libassText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="end"
android:textColor="@color/white"
android:textSize="18sp"
tools:text="開" />
</LinearLayout>

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

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

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

@ -93,6 +93,7 @@
<string name="player">播放核心</string>
<string name="player_render">渲染方式</string>
<string name="player_scale">缩放比例</string>
<string name="player_libass">字幕渲染</string>
<string name="player_caption">字幕样式</string>
<string name="player_background">后台播放</string>
<string name="player_audio_decode">音频软解</string>

@ -93,6 +93,7 @@
<string name="player">播放核心</string>
<string name="player_render">渲染方式</string>
<string name="player_scale">縮放比例</string>
<string name="player_libass">字幕渲染</string>
<string name="player_caption">字幕樣式</string>
<string name="player_background">背景播放</string>
<string name="player_audio_decode">音訊軟解</string>

@ -94,6 +94,7 @@
<string name="player">Player</string>
<string name="player_render">Render</string>
<string name="player_scale">Scale</string>
<string name="player_libass">libass</string>
<string name="player_caption">Caption style</string>
<string name="player_background">Background play</string>
<string name="player_audio_decode">Audio software decode</string>

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

@ -123,6 +123,35 @@
</LinearLayout>
<LinearLayout
android:id="@+id/libass"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:background="@drawable/shape_item"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:text="@string/player_libass"
android:textColor="@color/white"
android:textSize="16sp" />
<TextView
android:id="@+id/libassText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="middle"
android:gravity="end"
android:singleLine="true"
android:textColor="@color/white"
android:textSize="16sp"
tools:text="開" />
</LinearLayout>
<LinearLayout
android:id="@+id/buffer"
android:layout_width="match_parent"

Loading…
Cancel
Save