diff --git a/demos/main/src/main/java/com/google/android/exoplayer2/demo/IntentUtil.java b/demos/main/src/main/java/com/google/android/exoplayer2/demo/IntentUtil.java
index 15c365bdad..71ad113ff9 100644
--- a/demos/main/src/main/java/com/google/android/exoplayer2/demo/IntentUtil.java
+++ b/demos/main/src/main/java/com/google/android/exoplayer2/demo/IntentUtil.java
@@ -196,12 +196,13 @@ public class IntentUtil {
if (localConfiguration.drmConfiguration != null) {
addDrmConfigurationToIntent(localConfiguration.drmConfiguration, intent, extrasKeySuffix);
}
- if (!localConfiguration.subtitles.isEmpty()) {
- checkState(localConfiguration.subtitles.size() == 1);
- MediaItem.Subtitle subtitle = localConfiguration.subtitles.get(0);
- intent.putExtra(SUBTITLE_URI_EXTRA + extrasKeySuffix, subtitle.uri.toString());
- intent.putExtra(SUBTITLE_MIME_TYPE_EXTRA + extrasKeySuffix, subtitle.mimeType);
- intent.putExtra(SUBTITLE_LANGUAGE_EXTRA + extrasKeySuffix, subtitle.language);
+ if (!localConfiguration.subtitleConfigurations.isEmpty()) {
+ checkState(localConfiguration.subtitleConfigurations.size() == 1);
+ MediaItem.SubtitleConfiguration subtitleConfiguration =
+ localConfiguration.subtitleConfigurations.get(0);
+ intent.putExtra(SUBTITLE_URI_EXTRA + extrasKeySuffix, subtitleConfiguration.uri.toString());
+ intent.putExtra(SUBTITLE_MIME_TYPE_EXTRA + extrasKeySuffix, subtitleConfiguration.mimeType);
+ intent.putExtra(SUBTITLE_LANGUAGE_EXTRA + extrasKeySuffix, subtitleConfiguration.language);
}
}
diff --git a/library/common/src/main/java/com/google/android/exoplayer2/util/Util.java b/library/common/src/main/java/com/google/android/exoplayer2/util/Util.java
index 8520fff8c9..e5bd28aca2 100644
--- a/library/common/src/main/java/com/google/android/exoplayer2/util/Util.java
+++ b/library/common/src/main/java/com/google/android/exoplayer2/util/Util.java
@@ -233,8 +233,8 @@ public final class Util {
if (isLocalFileUri(mediaItem.localConfiguration.uri)) {
return requestExternalStoragePermission(activity);
}
- for (int i = 0; i < mediaItem.localConfiguration.subtitles.size(); i++) {
- if (isLocalFileUri(mediaItem.localConfiguration.subtitles.get(i).uri)) {
+ for (int i = 0; i < mediaItem.localConfiguration.subtitleConfigurations.size(); i++) {
+ if (isLocalFileUri(mediaItem.localConfiguration.subtitleConfigurations.get(i).uri)) {
return requestExternalStoragePermission(activity);
}
}
@@ -261,8 +261,8 @@ public final class Util {
if (isTrafficRestricted(mediaItem.localConfiguration.uri)) {
return false;
}
- for (int i = 0; i < mediaItem.localConfiguration.subtitles.size(); i++) {
- if (isTrafficRestricted(mediaItem.localConfiguration.subtitles.get(i).uri)) {
+ for (int i = 0; i < mediaItem.localConfiguration.subtitleConfigurations.size(); i++) {
+ if (isTrafficRestricted(mediaItem.localConfiguration.subtitleConfigurations.get(i).uri)) {
return false;
}
}
diff --git a/library/core/src/main/java/com/google/android/exoplayer2/source/DefaultMediaSourceFactory.java b/library/core/src/main/java/com/google/android/exoplayer2/source/DefaultMediaSourceFactory.java
index bdba5330c1..a216e3ad82 100644
--- a/library/core/src/main/java/com/google/android/exoplayer2/source/DefaultMediaSourceFactory.java
+++ b/library/core/src/main/java/com/google/android/exoplayer2/source/DefaultMediaSourceFactory.java
@@ -173,8 +173,8 @@ public final class DefaultMediaSourceFactory implements MediaSourceFactory {
/**
* Sets whether a {@link ProgressiveMediaSource} or {@link SingleSampleMediaSource} is constructed
- * to handle {@link MediaItem.LocalConfiguration#subtitles}. Defaults to false (i.e. {@link
- * SingleSampleMediaSource}.
+ * to handle {@link MediaItem.LocalConfiguration#subtitleConfigurations}. Defaults to false (i.e.
+ * {@link SingleSampleMediaSource}.
*
*
This method is experimental, and will be renamed or removed in a future release.
*
@@ -375,13 +375,14 @@ public final class DefaultMediaSourceFactory implements MediaSourceFactory {
MediaSource mediaSource = mediaSourceFactory.createMediaSource(mediaItem);
- List subtitles = castNonNull(mediaItem.localConfiguration).subtitles;
- if (!subtitles.isEmpty()) {
- MediaSource[] mediaSources = new MediaSource[subtitles.size() + 1];
+ List subtitleConfigurations =
+ castNonNull(mediaItem.localConfiguration).subtitleConfigurations;
+ if (!subtitleConfigurations.isEmpty()) {
+ MediaSource[] mediaSources = new MediaSource[subtitleConfigurations.size() + 1];
mediaSources[0] = mediaSource;
- for (int i = 0; i < subtitles.size(); i++) {
+ for (int i = 0; i < subtitleConfigurations.size(); i++) {
if (useProgressiveMediaSourceForSubtitles
- && MimeTypes.TEXT_VTT.equals(subtitles.get(i).mimeType)) {
+ && MimeTypes.TEXT_VTT.equals(subtitleConfigurations.get(i).mimeType)) {
int index = i;
ProgressiveMediaSource.Factory progressiveMediaSourceFactory =
new ProgressiveMediaSource.Factory(
@@ -391,23 +392,23 @@ public final class DefaultMediaSourceFactory implements MediaSourceFactory {
new SubtitleExtractor(
new WebvttDecoder(),
new Format.Builder()
- .setSampleMimeType(subtitles.get(index).mimeType)
- .setLanguage(subtitles.get(index).language)
- .setSelectionFlags(subtitles.get(index).selectionFlags)
- .setRoleFlags(subtitles.get(index).roleFlags)
- .setLabel(subtitles.get(index).label)
+ .setSampleMimeType(subtitleConfigurations.get(index).mimeType)
+ .setLanguage(subtitleConfigurations.get(index).language)
+ .setSelectionFlags(subtitleConfigurations.get(index).selectionFlags)
+ .setRoleFlags(subtitleConfigurations.get(index).roleFlags)
+ .setLabel(subtitleConfigurations.get(index).label)
.build())
});
mediaSources[i + 1] =
progressiveMediaSourceFactory.createMediaSource(
- MediaItem.fromUri(subtitles.get(i).uri.toString()));
+ MediaItem.fromUri(subtitleConfigurations.get(i).uri.toString()));
} else {
SingleSampleMediaSource.Factory singleSampleSourceFactory =
new SingleSampleMediaSource.Factory(dataSourceFactory)
.setLoadErrorHandlingPolicy(loadErrorHandlingPolicy);
mediaSources[i + 1] =
singleSampleSourceFactory.createMediaSource(
- subtitles.get(i), /* durationUs= */ C.TIME_UNSET);
+ subtitleConfigurations.get(i), /* durationUs= */ C.TIME_UNSET);
}
}
diff --git a/library/core/src/main/java/com/google/android/exoplayer2/source/SingleSampleMediaSource.java b/library/core/src/main/java/com/google/android/exoplayer2/source/SingleSampleMediaSource.java
index 607f4208d1..e5cb2bb976 100644
--- a/library/core/src/main/java/com/google/android/exoplayer2/source/SingleSampleMediaSource.java
+++ b/library/core/src/main/java/com/google/android/exoplayer2/source/SingleSampleMediaSource.java
@@ -30,7 +30,7 @@ import com.google.android.exoplayer2.upstream.DefaultLoadErrorHandlingPolicy;
import com.google.android.exoplayer2.upstream.LoadErrorHandlingPolicy;
import com.google.android.exoplayer2.upstream.TransferListener;
import com.google.android.exoplayer2.util.MimeTypes;
-import java.util.Collections;
+import com.google.common.collect.ImmutableList;
/**
* Loads data at a given {@link Uri} as a single sample belonging to a single {@link MediaPeriod}.
@@ -115,14 +115,15 @@ public final class SingleSampleMediaSource extends BaseMediaSource {
/**
* Returns a new {@link SingleSampleMediaSource} using the current parameters.
*
- * @param subtitle The {@link MediaItem.Subtitle}.
+ * @param subtitleConfiguration The {@link MediaItem.SubtitleConfiguration}.
* @param durationUs The duration of the media stream in microseconds.
* @return The new {@link SingleSampleMediaSource}.
*/
- public SingleSampleMediaSource createMediaSource(MediaItem.Subtitle subtitle, long durationUs) {
+ public SingleSampleMediaSource createMediaSource(
+ MediaItem.SubtitleConfiguration subtitleConfiguration, long durationUs) {
return new SingleSampleMediaSource(
trackId,
- subtitle,
+ subtitleConfiguration,
dataSourceFactory,
durationUs,
loadErrorHandlingPolicy,
@@ -144,7 +145,7 @@ public final class SingleSampleMediaSource extends BaseMediaSource {
private SingleSampleMediaSource(
@Nullable String trackId,
- MediaItem.Subtitle subtitle,
+ MediaItem.SubtitleConfiguration subtitleConfiguration,
DataSource.Factory dataSourceFactory,
long durationUs,
LoadErrorHandlingPolicy loadErrorHandlingPolicy,
@@ -157,21 +158,24 @@ public final class SingleSampleMediaSource extends BaseMediaSource {
mediaItem =
new MediaItem.Builder()
.setUri(Uri.EMPTY)
- .setMediaId(subtitle.uri.toString())
- .setSubtitles(Collections.singletonList(subtitle))
+ .setMediaId(subtitleConfiguration.uri.toString())
+ .setSubtitleConfigurations(ImmutableList.of(subtitleConfiguration))
.setTag(tag)
.build();
format =
new Format.Builder()
.setId(trackId)
- .setSampleMimeType(firstNonNull(subtitle.mimeType, MimeTypes.TEXT_UNKNOWN))
- .setLanguage(subtitle.language)
- .setSelectionFlags(subtitle.selectionFlags)
- .setRoleFlags(subtitle.roleFlags)
- .setLabel(subtitle.label)
+ .setSampleMimeType(firstNonNull(subtitleConfiguration.mimeType, MimeTypes.TEXT_UNKNOWN))
+ .setLanguage(subtitleConfiguration.language)
+ .setSelectionFlags(subtitleConfiguration.selectionFlags)
+ .setRoleFlags(subtitleConfiguration.roleFlags)
+ .setLabel(subtitleConfiguration.label)
.build();
dataSpec =
- new DataSpec.Builder().setUri(subtitle.uri).setFlags(DataSpec.FLAG_ALLOW_GZIP).build();
+ new DataSpec.Builder()
+ .setUri(subtitleConfiguration.uri)
+ .setFlags(DataSpec.FLAG_ALLOW_GZIP)
+ .build();
timeline =
new SinglePeriodTimeline(
durationUs,