Support multiple subs

pull/137/head
FongMi 4 years ago
parent 31c2e32879
commit 2dab6cabdc
  1. 2
      app/src/main/java/com/fongmi/android/tv/bean/Result.java
  2. 20
      app/src/main/java/com/fongmi/android/tv/player/ExoUtil.java

@ -58,7 +58,7 @@ public class Result {
private String flag;
@SerializedName("url")
private String url;
@SerializedName("subt")
@SerializedName("sub")
private String sub;
public static Result fromJson(String str) {

@ -6,7 +6,6 @@ import android.net.Uri;
import com.fongmi.android.tv.App;
import com.fongmi.android.tv.bean.Result;
import com.github.catvod.crawler.SpiderDebug;
import com.google.android.exoplayer2.C;
import com.google.android.exoplayer2.DefaultRenderersFactory;
import com.google.android.exoplayer2.ExoPlayer;
import com.google.android.exoplayer2.MediaItem;
@ -20,8 +19,10 @@ import com.google.android.exoplayer2.upstream.DefaultDataSource;
import com.google.android.exoplayer2.upstream.DefaultHttpDataSource;
import com.google.android.exoplayer2.upstream.HttpDataSource;
import com.google.android.exoplayer2.util.MimeTypes;
import com.google.common.collect.ImmutableList;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
public class ExoUtil {
@ -44,18 +45,25 @@ public class ExoUtil {
return getSource(headers, url, null);
}
private static MediaSource getSource(Map<String, String> headers, String url, MediaItem.SubtitleConfiguration config) {
private static MediaSource getSource(Map<String, String> headers, String url, List<MediaItem.SubtitleConfiguration> config) {
SpiderDebug.log(url);
Uri videoUri = Uri.parse(url);
DataSource.Factory factory = getFactory(headers, url);
MediaItem.Builder builder = new MediaItem.Builder().setUri(videoUri);
if (url.contains("php") || url.contains("m3u8")) builder.setMimeType(MimeTypes.APPLICATION_M3U8);
if (config != null) builder.setSubtitleConfigurations(ImmutableList.of(config));
if (config.size() > 0) builder.setSubtitleConfigurations(config);
return new DefaultMediaSourceFactory(factory).createMediaSource(builder.build());
}
private static MediaItem.SubtitleConfiguration getConfig(Result result) {
return result.getSub().isEmpty() ? null : new MediaItem.SubtitleConfiguration.Builder(Uri.parse(result.getSub())).setLabel("Spider").setMimeType(MimeTypes.APPLICATION_SUBRIP).setSelectionFlags(C.SELECTION_FLAG_DEFAULT).build();
private static List<MediaItem.SubtitleConfiguration> getConfig(Result result) {
if (result.getSub().isEmpty()) return Collections.emptyList();
List<MediaItem.SubtitleConfiguration> items = new ArrayList<>();
String[] subs = result.getSub().split("\\$\\$\\$");
for (String sub : subs) {
String[] divide = sub.split("#");
items.add(new MediaItem.SubtitleConfiguration.Builder(Uri.parse(divide[2])).setLabel(divide[0]).setMimeType(divide[1]).build());
}
return items;
}
private static DataSource.Factory getFactory(Map<String, String> headers, String url) {

Loading…
Cancel
Save