diff --git a/library/common/src/main/java/com/google/android/exoplayer2/MediaItem.java b/library/common/src/main/java/com/google/android/exoplayer2/MediaItem.java index ce6adde1b8..f891bb9662 100644 --- a/library/common/src/main/java/com/google/android/exoplayer2/MediaItem.java +++ b/library/common/src/main/java/com/google/android/exoplayer2/MediaItem.java @@ -1189,8 +1189,8 @@ public final class MediaItem implements Bundleable { /** The {@link Uri} to the subtitle file. */ public final Uri uri; - /** The MIME type. */ - public final String mimeType; + /** The optional MIME type of the subtitle file, or {@code null} if unspecified. */ + @Nullable public final String mimeType; /** The language. */ @Nullable public final String language; /** The selection flags. */ @@ -1261,7 +1261,7 @@ public final class MediaItem implements Bundleable { Subtitle other = (Subtitle) obj; return uri.equals(other.uri) - && mimeType.equals(other.mimeType) + && Util.areEqual(mimeType, other.mimeType) && Util.areEqual(language, other.language) && selectionFlags == other.selectionFlags && roleFlags == other.roleFlags @@ -1271,7 +1271,7 @@ public final class MediaItem implements Bundleable { @Override public int hashCode() { int result = uri.hashCode(); - result = 31 * result + mimeType.hashCode(); + result = 31 * result + (mimeType == null ? 0 : mimeType.hashCode()); result = 31 * result + (language == null ? 0 : language.hashCode()); result = 31 * result + selectionFlags; result = 31 * result + roleFlags; diff --git a/library/common/src/main/java/com/google/android/exoplayer2/util/MimeTypes.java b/library/common/src/main/java/com/google/android/exoplayer2/util/MimeTypes.java index 3e82accd71..493485133a 100644 --- a/library/common/src/main/java/com/google/android/exoplayer2/util/MimeTypes.java +++ b/library/common/src/main/java/com/google/android/exoplayer2/util/MimeTypes.java @@ -98,6 +98,8 @@ public final class MimeTypes { public static final String TEXT_EXOPLAYER_CUES = BASE_TYPE_TEXT + "/x-exoplayer-cues"; + public static final String TEXT_UNKNOWN = BASE_TYPE_TEXT + "/x-unknown"; + // application/ MIME types public static final String APPLICATION_MP4 = BASE_TYPE_APPLICATION + "/mp4"; 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 72039bce80..a5ffff4998 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 @@ -381,7 +381,7 @@ public final class DefaultMediaSourceFactory implements MediaSourceFactory { mediaSources[0] = mediaSource; for (int i = 0; i < subtitles.size(); i++) { if (useProgressiveMediaSourceForSubtitles - && subtitles.get(i).mimeType.equals(MimeTypes.TEXT_VTT)) { + && MimeTypes.TEXT_VTT.equals(subtitles.get(i).mimeType)) { int index = i; ProgressiveMediaSource.Factory progressiveMediaSourceFactory = new ProgressiveMediaSource.Factory( 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 c0d34d0ff3..887ce26463 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 @@ -16,6 +16,7 @@ package com.google.android.exoplayer2.source; import static com.google.android.exoplayer2.util.Assertions.checkNotNull; +import static com.google.common.base.MoreObjects.firstNonNull; import android.net.Uri; import androidx.annotation.Nullable; @@ -28,6 +29,7 @@ import com.google.android.exoplayer2.upstream.DataSpec; 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; /** @@ -163,7 +165,7 @@ public final class SingleSampleMediaSource extends BaseMediaSource { format = new Format.Builder() .setId(trackId) - .setSampleMimeType(subtitle.mimeType) + .setSampleMimeType(firstNonNull(subtitle.mimeType, MimeTypes.TEXT_UNKNOWN)) .setLanguage(subtitle.language) .setSelectionFlags(subtitle.selectionFlags) .setRoleFlags(subtitle.roleFlags)