Support libass

pull/587/head
FongMi 10 months ago
parent 58b016bc61
commit c3e251774e
  1. 9
      app/src/main/java/com/fongmi/android/tv/player/Players.java
  2. 6
      app/src/main/java/com/fongmi/android/tv/player/exo/ExoUtil.java
  3. 9
      app/src/main/java/com/fongmi/android/tv/player/exo/MediaSourceFactory.java

@ -62,6 +62,10 @@ import java.util.List;
import java.util.Locale; import java.util.Locale;
import java.util.Map; import java.util.Map;
import io.github.peerless2012.ass.media.AssHandler;
import io.github.peerless2012.ass.media.parser.AssSubtitleParserFactory;
import io.github.peerless2012.ass.media.type.AssRenderType;
public class Players implements Player.Listener, ParseCallback { public class Players implements Player.Listener, ParseCallback {
private static final String TAG = Players.class.getSimpleName(); private static final String TAG = Players.class.getSimpleName();
@ -116,13 +120,16 @@ public class Players implements Player.Listener, ParseCallback {
} }
private void setPlayer(PlayerView view) { private void setPlayer(PlayerView view) {
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()).build(); AssHandler assHandler = new AssHandler(AssRenderType.LEGACY);
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); exoPlayer.setAudioAttributes(AudioAttributes.DEFAULT, true);
exoPlayer.addAnalyticsListener(new EventLogger()); exoPlayer.addAnalyticsListener(new EventLogger());
exoPlayer.setHandleAudioBecomingNoisy(true); exoPlayer.setHandleAudioBecomingNoisy(true);
view.setRender(Setting.getRender()); view.setRender(Setting.getRender());
exoPlayer.setPlayWhenReady(true); exoPlayer.setPlayWhenReady(true);
exoPlayer.addListener(this); exoPlayer.addListener(this);
assHandler.init(exoPlayer);
view.setPlayer(exoPlayer); view.setPlayer(exoPlayer);
this.view = view; this.view = view;
} }

@ -36,6 +36,8 @@ import java.util.Locale;
import java.util.Map; import java.util.Map;
import io.github.anilbeesetti.nextlib.media3ext.ffdecoder.NextRenderersFactory; import io.github.anilbeesetti.nextlib.media3ext.ffdecoder.NextRenderersFactory;
import io.github.peerless2012.ass.media.AssHandler;
import io.github.peerless2012.ass.media.parser.AssSubtitleParserFactory;
public class ExoUtil { public class ExoUtil {
@ -57,8 +59,8 @@ public class ExoUtil {
return new NextRenderersFactory(App.get()).setAudioPrefer(Setting.isAudioPrefer()).setEnableDecoderFallback(true).setExtensionRendererMode(renderMode); return new NextRenderersFactory(App.get()).setAudioPrefer(Setting.isAudioPrefer()).setEnableDecoderFallback(true).setExtensionRendererMode(renderMode);
} }
public static MediaSource.Factory buildMediaSourceFactory() { public static MediaSource.Factory buildMediaSourceFactory(AssHandler assHandler, AssSubtitleParserFactory subtitleParserFactory) {
return new MediaSourceFactory(); return new MediaSourceFactory(assHandler, subtitleParserFactory);
} }
public static CaptionStyleCompat getCaptionStyle() { public static CaptionStyleCompat getCaptionStyle() {

@ -27,6 +27,10 @@ import com.github.catvod.net.OkHttp;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import io.github.peerless2012.ass.media.AssHandler;
import io.github.peerless2012.ass.media.kt.ExoPlayerKtKt;
import io.github.peerless2012.ass.media.parser.AssSubtitleParserFactory;
public class MediaSourceFactory implements MediaSource.Factory { public class MediaSourceFactory implements MediaSource.Factory {
private final DefaultMediaSourceFactory defaultMediaSourceFactory; private final DefaultMediaSourceFactory defaultMediaSourceFactory;
@ -34,8 +38,9 @@ public class MediaSourceFactory implements MediaSource.Factory {
private DataSource.Factory dataSourceFactory; private DataSource.Factory dataSourceFactory;
private ExtractorsFactory extractorsFactory; private ExtractorsFactory extractorsFactory;
public MediaSourceFactory() { public MediaSourceFactory(AssHandler assHandler, AssSubtitleParserFactory subtitleParserFactory) {
defaultMediaSourceFactory = new DefaultMediaSourceFactory(getDataSourceFactory(), getExtractorsFactory()); //defaultMediaSourceFactory = new DefaultMediaSourceFactory(getDataSourceFactory(), getExtractorsFactory());
defaultMediaSourceFactory = new DefaultMediaSourceFactory(getDataSourceFactory(), ExoPlayerKtKt.withAssMkvSupport(getExtractorsFactory(), subtitleParserFactory, assHandler));
} }
@NonNull @NonNull

Loading…
Cancel
Save