Update sub format

pull/123/head
FongMi 3 years ago
parent 655a73f5b2
commit 7eb98d5347
  1. 6
      app/src/main/java/com/fongmi/android/tv/bean/Result.java
  2. 39
      app/src/main/java/com/fongmi/android/tv/bean/Sub.java
  3. 19
      app/src/main/java/com/fongmi/android/tv/player/ExoUtil.java

@ -52,7 +52,7 @@ public class Result {
@SerializedName("url")
private String url;
@SerializedName("sub")
private String sub;
private List<Sub> sub;
public static Result fromJson(String str) {
try {
@ -165,8 +165,8 @@ public class Result {
this.url = url;
}
public String getSub() {
return TextUtils.isEmpty(sub) ? "" : sub;
public List<Sub> getSub() {
return sub == null ? Collections.emptyList() : sub;
}
public void clear() {

@ -0,0 +1,39 @@
package com.fongmi.android.tv.bean;
import android.net.Uri;
import android.text.TextUtils;
import com.google.android.exoplayer2.MediaItem;
import com.google.gson.annotations.SerializedName;
public class Sub {
@SerializedName("url")
private String url;
@SerializedName("name")
private String name;
@SerializedName("lang")
private String lang;
@SerializedName("format")
private String format;
public String getUrl() {
return TextUtils.isEmpty(url) ? "" : url;
}
public String getName() {
return TextUtils.isEmpty(name) ? "" : name;
}
public String getLang() {
return TextUtils.isEmpty(lang) ? "zh" : lang;
}
public String getFormat() {
return TextUtils.isEmpty(format) ? "" : format;
}
public MediaItem.SubtitleConfiguration getExoSub() {
return new MediaItem.SubtitleConfiguration.Builder(Uri.parse(getUrl())).setLabel(getName()).setMimeType(getFormat()).setLanguage(getLang()).build();
}
}

@ -2,10 +2,10 @@ package com.fongmi.android.tv.player;
import android.graphics.Color;
import android.net.Uri;
import android.text.TextUtils;
import com.fongmi.android.tv.App;
import com.fongmi.android.tv.bean.Result;
import com.fongmi.android.tv.bean.Sub;
import com.fongmi.android.tv.utils.FileUtil;
import com.fongmi.android.tv.utils.Prefers;
import com.google.android.exoplayer2.DefaultRenderersFactory;
@ -34,6 +34,7 @@ import com.google.android.exoplayer2.upstream.cache.SimpleCache;
import com.google.android.exoplayer2.util.MimeTypes;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
@ -64,32 +65,28 @@ public class ExoUtil {
}
public static MediaSource getSource(Map<String, String> headers, String url, int errorCode) {
return getSource(headers, url, null, errorCode);
return getSource(headers, url, Collections.emptyList(), errorCode);
}
private static MediaSource getSource(Map<String, String> headers, String url, String sub, int errorCode) {
private static MediaSource getSource(Map<String, String> headers, String url, List<Sub> sub, int errorCode) {
return new DefaultMediaSourceFactory(getDataSourceFactory(headers), getExtractorsFactory()).createMediaSource(getMediaItem(url, sub, errorCode));
}
private static MediaItem getMediaItem(String url, String sub, int errorCode) {
private static MediaItem getMediaItem(String url, List<Sub> sub, int errorCode) {
MediaItem.Builder builder = new MediaItem.Builder().setUri(Uri.parse(url.trim()));
if (errorCode == PlaybackException.ERROR_CODE_PARSING_MANIFEST_MALFORMED) builder.setMimeType(MimeTypes.APPLICATION_OCTET);
else if (errorCode == PlaybackException.ERROR_CODE_PARSING_CONTAINER_UNSUPPORTED) builder.setMimeType(MimeTypes.APPLICATION_M3U8);
if (!TextUtils.isEmpty(sub)) builder.setSubtitleConfigurations(getSubtitles(sub));
if (sub.size() > 0) builder.setSubtitleConfigurations(getSubtitles(sub));
builder.setAllowChunklessPreparation(Prefers.getDecode() == 1);
return builder.build();
}
private static List<MediaItem.SubtitleConfiguration> getSubtitles(String sub) {
private static List<MediaItem.SubtitleConfiguration> getSubtitles(List<Sub> sub) {
List<MediaItem.SubtitleConfiguration> items = new ArrayList<>();
for (String text : sub.split("\\$\\$\\$")) items.add(getSubtitle(text.split("#")));
for (Sub item : sub) items.add(item.getExoSub());
return items;
}
private static MediaItem.SubtitleConfiguration getSubtitle(String[] split) {
return new MediaItem.SubtitleConfiguration.Builder(Uri.parse(split[2])).setLabel(split[0]).setMimeType(split[1]).setLanguage("zh").build();
}
private static synchronized ExtractorsFactory getExtractorsFactory() {
if (extractorsFactory == null) extractorsFactory = new DefaultExtractorsFactory().setTsExtractorFlags(DefaultTsPayloadReaderFactory.FLAG_ENABLE_HDMV_DTS_AUDIO_STREAMS).setTsExtractorTimestampSearchBytes(TsExtractor.DEFAULT_TIMESTAMP_SEARCH_BYTES * 3);
return extractorsFactory;

Loading…
Cancel
Save