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 fe20519c4..36fd3067f 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 @@ -62,6 +62,10 @@ import java.util.List; import java.util.Locale; 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 { private static final String TAG = Players.class.getSimpleName(); @@ -116,13 +120,16 @@ public class Players implements Player.Listener, ParseCallback { } 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.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/ExoUtil.java b/app/src/main/java/com/fongmi/android/tv/player/exo/ExoUtil.java index 181373950..f88089ace 100644 --- a/app/src/main/java/com/fongmi/android/tv/player/exo/ExoUtil.java +++ b/app/src/main/java/com/fongmi/android/tv/player/exo/ExoUtil.java @@ -36,6 +36,8 @@ import java.util.Locale; import java.util.Map; 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 { @@ -57,8 +59,8 @@ public class ExoUtil { return new NextRenderersFactory(App.get()).setAudioPrefer(Setting.isAudioPrefer()).setEnableDecoderFallback(true).setExtensionRendererMode(renderMode); } - public static MediaSource.Factory buildMediaSourceFactory() { - return new MediaSourceFactory(); + public static MediaSource.Factory buildMediaSourceFactory(AssHandler assHandler, AssSubtitleParserFactory subtitleParserFactory) { + return new MediaSourceFactory(assHandler, subtitleParserFactory); } public static CaptionStyleCompat getCaptionStyle() { 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 5945f9992..b555016b5 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 @@ -27,6 +27,10 @@ import com.github.catvod.net.OkHttp; import java.util.HashMap; 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 { private final DefaultMediaSourceFactory defaultMediaSourceFactory; @@ -34,8 +38,9 @@ public class MediaSourceFactory implements MediaSource.Factory { private DataSource.Factory dataSourceFactory; private ExtractorsFactory extractorsFactory; - public MediaSourceFactory() { - defaultMediaSourceFactory = new DefaultMediaSourceFactory(getDataSourceFactory(), getExtractorsFactory()); + public MediaSourceFactory(AssHandler assHandler, AssSubtitleParserFactory subtitleParserFactory) { + //defaultMediaSourceFactory = new DefaultMediaSourceFactory(getDataSourceFactory(), getExtractorsFactory()); + defaultMediaSourceFactory = new DefaultMediaSourceFactory(getDataSourceFactory(), ExoPlayerKtKt.withAssMkvSupport(getExtractorsFactory(), subtitleParserFactory, assHandler)); } @NonNull