Migrate usages of MediaItem.Subtitle to SubtitleConfiguration
Usages of the (already deprecated) Subtitle constructors were not migrated, as it would require migrating to the Builder which is a more involved change. PiperOrigin-RevId: 400153139
This commit is contained in:
parent
d4343ed858
commit
b192465bba
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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}.
|
||||
*
|
||||
* <p>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<MediaItem.Subtitle> subtitles = castNonNull(mediaItem.localConfiguration).subtitles;
|
||||
if (!subtitles.isEmpty()) {
|
||||
MediaSource[] mediaSources = new MediaSource[subtitles.size() + 1];
|
||||
List<MediaItem.SubtitleConfiguration> 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);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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,
|
||||
|
Loading…
x
Reference in New Issue
Block a user