Migrate usages of MediaItem.PlaybackProperties to LocalConfiguration

PiperOrigin-RevId: 399206106
This commit is contained in:
ibaker 2021-09-27 17:14:24 +01:00 committed by bachinger
parent e373e0cbaf
commit a04f1d1726
39 changed files with 257 additions and 258 deletions

View File

@ -98,7 +98,7 @@ public class DownloadTracker {
}
public boolean isDownloaded(MediaItem mediaItem) {
@Nullable Download download = downloads.get(checkNotNull(mediaItem.playbackProperties).uri);
@Nullable Download download = downloads.get(checkNotNull(mediaItem.localConfiguration).uri);
return download != null && download.state != Download.STATE_FAILED;
}
@ -110,7 +110,7 @@ public class DownloadTracker {
public void toggleDownload(
FragmentManager fragmentManager, MediaItem mediaItem, RenderersFactory renderersFactory) {
@Nullable Download download = downloads.get(checkNotNull(mediaItem.playbackProperties).uri);
@Nullable Download download = downloads.get(checkNotNull(mediaItem.localConfiguration).uri);
if (download != null && download.state != Download.STATE_FAILED) {
DownloadService.sendRemoveDownload(
context, DemoDownloadService.class, download.request.id, /* foreground= */ false);
@ -223,7 +223,7 @@ public class DownloadTracker {
widevineOfflineLicenseFetchTask =
new WidevineOfflineLicenseFetchTask(
format,
mediaItem.playbackProperties.drmConfiguration,
mediaItem.localConfiguration.drmConfiguration,
httpDataSourceFactory,
/* dialogHelper= */ this,
helper);

View File

@ -88,22 +88,22 @@ public class IntentUtil {
Assertions.checkArgument(!mediaItems.isEmpty());
if (mediaItems.size() == 1) {
MediaItem mediaItem = mediaItems.get(0);
MediaItem.PlaybackProperties playbackProperties = checkNotNull(mediaItem.playbackProperties);
intent.setAction(ACTION_VIEW).setData(mediaItem.playbackProperties.uri);
MediaItem.LocalConfiguration localConfiguration = checkNotNull(mediaItem.localConfiguration);
intent.setAction(ACTION_VIEW).setData(mediaItem.localConfiguration.uri);
if (mediaItem.mediaMetadata.title != null) {
intent.putExtra(TITLE_EXTRA, mediaItem.mediaMetadata.title);
}
addPlaybackPropertiesToIntent(playbackProperties, intent, /* extrasKeySuffix= */ "");
addPlaybackPropertiesToIntent(localConfiguration, intent, /* extrasKeySuffix= */ "");
addClippingPropertiesToIntent(
mediaItem.clippingProperties, intent, /* extrasKeySuffix= */ "");
} else {
intent.setAction(ACTION_VIEW_LIST);
for (int i = 0; i < mediaItems.size(); i++) {
MediaItem mediaItem = mediaItems.get(i);
MediaItem.PlaybackProperties playbackProperties =
checkNotNull(mediaItem.playbackProperties);
intent.putExtra(URI_EXTRA + ("_" + i), playbackProperties.uri.toString());
addPlaybackPropertiesToIntent(playbackProperties, intent, /* extrasKeySuffix= */ "_" + i);
MediaItem.LocalConfiguration localConfiguration =
checkNotNull(mediaItem.localConfiguration);
intent.putExtra(URI_EXTRA + ("_" + i), localConfiguration.uri.toString());
addPlaybackPropertiesToIntent(localConfiguration, intent, /* extrasKeySuffix= */ "_" + i);
addClippingPropertiesToIntent(
mediaItem.clippingProperties, intent, /* extrasKeySuffix= */ "_" + i);
if (mediaItem.mediaMetadata.title != null) {
@ -185,20 +185,20 @@ public class IntentUtil {
}
private static void addPlaybackPropertiesToIntent(
MediaItem.PlaybackProperties playbackProperties, Intent intent, String extrasKeySuffix) {
MediaItem.LocalConfiguration localConfiguration, Intent intent, String extrasKeySuffix) {
intent
.putExtra(MIME_TYPE_EXTRA + extrasKeySuffix, playbackProperties.mimeType)
.putExtra(MIME_TYPE_EXTRA + extrasKeySuffix, localConfiguration.mimeType)
.putExtra(
AD_TAG_URI_EXTRA + extrasKeySuffix,
playbackProperties.adsConfiguration != null
? playbackProperties.adsConfiguration.adTagUri.toString()
localConfiguration.adsConfiguration != null
? localConfiguration.adsConfiguration.adTagUri.toString()
: null);
if (playbackProperties.drmConfiguration != null) {
addDrmConfigurationToIntent(playbackProperties.drmConfiguration, intent, extrasKeySuffix);
if (localConfiguration.drmConfiguration != null) {
addDrmConfigurationToIntent(localConfiguration.drmConfiguration, intent, extrasKeySuffix);
}
if (!playbackProperties.subtitles.isEmpty()) {
checkState(playbackProperties.subtitles.size() == 1);
MediaItem.Subtitle subtitle = playbackProperties.subtitles.get(0);
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);

View File

@ -323,7 +323,7 @@ public class PlayerActivity extends AppCompatActivity
}
MediaItem.DrmConfiguration drmConfiguration =
checkNotNull(mediaItem.playbackProperties).drmConfiguration;
checkNotNull(mediaItem.localConfiguration).drmConfiguration;
if (drmConfiguration != null) {
if (Util.SDK_INT < 18) {
showToast(R.string.error_drm_unsupported_before_api_18);
@ -335,7 +335,7 @@ public class PlayerActivity extends AppCompatActivity
return Collections.emptyList();
}
}
hasAds |= mediaItem.playbackProperties.adsConfiguration != null;
hasAds |= mediaItem.localConfiguration.adsConfiguration != null;
}
if (!hasAds) {
releaseAdsLoader();
@ -496,7 +496,7 @@ public class PlayerActivity extends AppCompatActivity
for (MediaItem item : IntentUtil.createMediaItemsFromIntent(intent)) {
@Nullable
DownloadRequest downloadRequest =
downloadTracker.getDownloadRequest(checkNotNull(item.playbackProperties).uri);
downloadTracker.getDownloadRequest(checkNotNull(item.localConfiguration).uri);
if (downloadRequest != null) {
MediaItem.Builder builder = item.buildUpon();
builder
@ -506,7 +506,7 @@ public class PlayerActivity extends AppCompatActivity
.setMimeType(downloadRequest.mimeType)
.setStreamKeys(downloadRequest.streamKeys);
@Nullable
MediaItem.DrmConfiguration drmConfiguration = item.playbackProperties.drmConfiguration;
MediaItem.DrmConfiguration drmConfiguration = item.localConfiguration.drmConfiguration;
if (drmConfiguration != null) {
builder.setDrmConfiguration(
drmConfiguration
@ -526,7 +526,7 @@ public class PlayerActivity extends AppCompatActivity
@Nullable
private static Map<String, String> getDrmRequestHeaders(MediaItem item) {
MediaItem.DrmConfiguration drmConfiguration = item.playbackProperties.drmConfiguration;
MediaItem.DrmConfiguration drmConfiguration = item.localConfiguration.drmConfiguration;
return drmConfiguration != null ? drmConfiguration.licenseRequestHeaders : null;
}
}

View File

@ -249,12 +249,12 @@ public class SampleChooserActivity extends AppCompatActivity
if (playlistHolder.mediaItems.size() > 1) {
return R.string.download_playlist_unsupported;
}
MediaItem.PlaybackProperties playbackProperties =
checkNotNull(playlistHolder.mediaItems.get(0).playbackProperties);
if (playbackProperties.adsConfiguration != null) {
MediaItem.LocalConfiguration localConfiguration =
checkNotNull(playlistHolder.mediaItems.get(0).localConfiguration);
if (localConfiguration.adsConfiguration != null) {
return R.string.download_ads_unsupported;
}
String scheme = playbackProperties.uri.getScheme();
String scheme = localConfiguration.uri.getScheme();
if (!("http".equals(scheme) || "https".equals(scheme))) {
return R.string.download_scheme_unsupported;
}

View File

@ -215,7 +215,7 @@ new PlaybackStatsListener(
/* keepHistory= */ false, (eventTime, playbackStats) -> {
Object mediaTag =
eventTime.timeline.getWindow(eventTime.windowIndex, new Window())
.mediaItem.playbackProperties.tag;
.mediaItem.localConfiguration.tag;
// Report playbackStats with mediaTag metadata.
});
~~~

View File

@ -124,8 +124,8 @@ custom tags, then an implementation might look like:
public void onMediaItemTransition(
@Nullable MediaItem mediaItem, @MediaItemTransitionReason int reason) {
@Nullable CustomMetadata metadata = null;
if (mediaItem != null && mediaItem.playbackProperties != null) {
metadata = (CustomMetadata) mediaItem.playbackProperties.tag;
if (mediaItem != null && mediaItem.localConfiguration != null) {
metadata = (CustomMetadata) mediaItem.localConfiguration.tag;
}
updateUiForPlayingMediaItem(metadata);
}

View File

@ -52,8 +52,8 @@ public final class DefaultMediaItemConverter implements MediaItemConverter {
@Override
public MediaQueueItem toMediaQueueItem(MediaItem mediaItem) {
Assertions.checkNotNull(mediaItem.playbackProperties);
if (mediaItem.playbackProperties.mimeType == null) {
Assertions.checkNotNull(mediaItem.localConfiguration);
if (mediaItem.localConfiguration.mimeType == null) {
throw new IllegalArgumentException("The item must specify its mimeType");
}
MediaMetadata metadata = new MediaMetadata(MediaMetadata.MEDIA_TYPE_MOVIE);
@ -61,9 +61,9 @@ public final class DefaultMediaItemConverter implements MediaItemConverter {
metadata.putString(MediaMetadata.KEY_TITLE, mediaItem.mediaMetadata.title.toString());
}
MediaInfo mediaInfo =
new MediaInfo.Builder(mediaItem.playbackProperties.uri.toString())
new MediaInfo.Builder(mediaItem.localConfiguration.uri.toString())
.setStreamType(MediaInfo.STREAM_TYPE_BUFFERED)
.setContentType(mediaItem.playbackProperties.mimeType)
.setContentType(mediaItem.localConfiguration.mimeType)
.setMetadata(metadata)
.setCustomData(getCustomData(mediaItem))
.build();
@ -128,15 +128,15 @@ public final class DefaultMediaItemConverter implements MediaItemConverter {
}
private static JSONObject getMediaItemJson(MediaItem mediaItem) throws JSONException {
Assertions.checkNotNull(mediaItem.playbackProperties);
Assertions.checkNotNull(mediaItem.localConfiguration);
JSONObject json = new JSONObject();
json.put(KEY_TITLE, mediaItem.mediaMetadata.title);
json.put(KEY_URI, mediaItem.playbackProperties.uri.toString());
json.put(KEY_MIME_TYPE, mediaItem.playbackProperties.mimeType);
if (mediaItem.playbackProperties.drmConfiguration != null) {
json.put(KEY_URI, mediaItem.localConfiguration.uri.toString());
json.put(KEY_MIME_TYPE, mediaItem.localConfiguration.mimeType);
if (mediaItem.localConfiguration.drmConfiguration != null) {
json.put(
KEY_DRM_CONFIGURATION,
getDrmConfigurationJson(mediaItem.playbackProperties.drmConfiguration));
getDrmConfigurationJson(mediaItem.localConfiguration.drmConfiguration));
}
return json;
}
@ -152,11 +152,11 @@ public final class DefaultMediaItemConverter implements MediaItemConverter {
@Nullable
private static JSONObject getPlayerConfigJson(MediaItem mediaItem) throws JSONException {
if (mediaItem.playbackProperties == null
|| mediaItem.playbackProperties.drmConfiguration == null) {
if (mediaItem.localConfiguration == null
|| mediaItem.localConfiguration.drmConfiguration == null) {
return null;
}
MediaItem.DrmConfiguration drmConfiguration = mediaItem.playbackProperties.drmConfiguration;
MediaItem.DrmConfiguration drmConfiguration = mediaItem.localConfiguration.drmConfiguration;
String drmScheme;
if (C.WIDEVINE_UUID.equals(drmConfiguration.scheme)) {

View File

@ -423,7 +423,7 @@ public class CastPlayerTest {
.onMediaItemTransition(
mediaItemCaptor.capture(), eq(MEDIA_ITEM_TRANSITION_REASON_PLAYLIST_CHANGED));
inOrder.verify(mockListener, never()).onMediaItemTransition(any(), anyInt());
assertThat(mediaItemCaptor.getAllValues().get(1).playbackProperties.tag).isEqualTo(3);
assertThat(mediaItemCaptor.getAllValues().get(1).localConfiguration.tag).isEqualTo(3);
}
@SuppressWarnings("deprecation") // Verifies deprecated callback being called correctly.
@ -533,7 +533,7 @@ public class CastPlayerTest {
verify(mockRemoteMediaClient)
.queueInsertItems(
queueItemsArgumentCaptor.capture(),
eq((int) mediaItems.get(index).playbackProperties.tag),
eq((int) mediaItems.get(index).localConfiguration.tag),
any());
MediaQueueItem[] mediaQueueItems = queueItemsArgumentCaptor.getValue();
@ -677,7 +677,7 @@ public class CastPlayerTest {
Timeline currentTimeline = castPlayer.getCurrentTimeline();
for (int i = 0; i < mediaItems.size(); i++) {
assertThat(currentTimeline.getWindow(/* windowIndex= */ i, window).uid)
.isEqualTo(mediaItems.get(i).playbackProperties.tag);
.isEqualTo(mediaItems.get(i).localConfiguration.tag);
}
}
@ -696,8 +696,8 @@ public class CastPlayerTest {
.onMediaItemTransition(
mediaItemCaptor.capture(), eq(Player.MEDIA_ITEM_TRANSITION_REASON_PLAYLIST_CHANGED));
inOrder.verify(mockListener, never()).onMediaItemTransition(any(), anyInt());
assertThat(mediaItemCaptor.getValue().playbackProperties.tag)
.isEqualTo(mediaItem.playbackProperties.tag);
assertThat(mediaItemCaptor.getValue().localConfiguration.tag)
.isEqualTo(mediaItem.localConfiguration.tag);
}
@Test
@ -801,10 +801,10 @@ public class CastPlayerTest {
.onMediaItemTransition(
mediaItemCaptor.capture(), eq(Player.MEDIA_ITEM_TRANSITION_REASON_PLAYLIST_CHANGED));
inOrder.verify(mockListener, never()).onMediaItemTransition(any(), anyInt());
assertThat(mediaItemCaptor.getAllValues().get(0).playbackProperties.tag)
.isEqualTo(mediaItem1.playbackProperties.tag);
assertThat(mediaItemCaptor.getAllValues().get(1).playbackProperties.tag)
.isEqualTo(mediaItem2.playbackProperties.tag);
assertThat(mediaItemCaptor.getAllValues().get(0).localConfiguration.tag)
.isEqualTo(mediaItem1.localConfiguration.tag);
assertThat(mediaItemCaptor.getAllValues().get(1).localConfiguration.tag)
.isEqualTo(mediaItem2.localConfiguration.tag);
}
@Test
@ -886,10 +886,10 @@ public class CastPlayerTest {
mediaItemCaptor.capture(), eq(Player.MEDIA_ITEM_TRANSITION_REASON_PLAYLIST_CHANGED));
inOrder.verify(mockListener, never()).onMediaItemTransition(any(), anyInt());
List<MediaItem> capturedMediaItems = mediaItemCaptor.getAllValues();
assertThat(capturedMediaItems.get(0).playbackProperties.tag)
.isEqualTo(mediaItem1.playbackProperties.tag);
assertThat(capturedMediaItems.get(1).playbackProperties.tag)
.isEqualTo(mediaItem2.playbackProperties.tag);
assertThat(capturedMediaItems.get(0).localConfiguration.tag)
.isEqualTo(mediaItem1.localConfiguration.tag);
assertThat(capturedMediaItems.get(1).localConfiguration.tag)
.isEqualTo(mediaItem2.localConfiguration.tag);
}
@Test
@ -1012,8 +1012,8 @@ public class CastPlayerTest {
.onMediaItemTransition(
mediaItemCaptor.capture(), eq(Player.MEDIA_ITEM_TRANSITION_REASON_SEEK));
inOrder.verify(mockListener, never()).onPositionDiscontinuity(any(), any(), anyInt());
assertThat(mediaItemCaptor.getValue().playbackProperties.tag)
.isEqualTo(mediaItem2.playbackProperties.tag);
assertThat(mediaItemCaptor.getValue().localConfiguration.tag)
.isEqualTo(mediaItem2.localConfiguration.tag);
}
@Test
@ -1144,7 +1144,7 @@ public class CastPlayerTest {
.onMediaItemTransition(
mediaItemCaptor.capture(), eq(Player.MEDIA_ITEM_TRANSITION_REASON_AUTO));
inOrder.verify(mockListener, never()).onMediaItemTransition(any(), anyInt());
assertThat(mediaItemCaptor.getValue().playbackProperties.tag).isEqualTo(2);
assertThat(mediaItemCaptor.getValue().localConfiguration.tag).isEqualTo(2);
}
@Test
@ -1788,9 +1788,9 @@ public class CastPlayerTest {
int streamType = streamTypes[i];
long durationMs = durationsMs[i];
MediaInfo.Builder mediaInfoBuilder =
new MediaInfo.Builder(mediaItem.playbackProperties.uri.toString())
new MediaInfo.Builder(mediaItem.localConfiguration.uri.toString())
.setStreamType(streamType)
.setContentType(mediaItem.playbackProperties.mimeType);
.setContentType(mediaItem.localConfiguration.mimeType);
if (durationMs != C.TIME_UNSET) {
mediaInfoBuilder.setStreamDuration(durationMs);
}

View File

@ -96,10 +96,10 @@ public class DefaultMediaItemConverter implements MediaItemConverter {
@Override
public androidx.media2.common.MediaItem convertToMedia2MediaItem(MediaItem exoPlayerMediaItem) {
Assertions.checkNotNull(exoPlayerMediaItem);
MediaItem.PlaybackProperties playbackProperties =
Assertions.checkNotNull(exoPlayerMediaItem.playbackProperties);
MediaItem.LocalConfiguration localConfiguration =
Assertions.checkNotNull(exoPlayerMediaItem.localConfiguration);
@Nullable Object tag = playbackProperties.tag;
@Nullable Object tag = localConfiguration.tag;
if (tag instanceof androidx.media2.common.MediaItem) {
return (androidx.media2.common.MediaItem) tag;
}

View File

@ -272,8 +272,8 @@ public abstract class Timeline implements Bundleable {
this.uid = uid;
this.mediaItem = mediaItem != null ? mediaItem : EMPTY_MEDIA_ITEM;
this.tag =
mediaItem != null && mediaItem.playbackProperties != null
? mediaItem.playbackProperties.tag
mediaItem != null && mediaItem.localConfiguration != null
? mediaItem.localConfiguration.tag
: null;
this.manifest = manifest;
this.presentationStartTimeMs = presentationStartTimeMs;

View File

@ -227,14 +227,14 @@ public final class Util {
return false;
}
for (MediaItem mediaItem : mediaItems) {
if (mediaItem.playbackProperties == null) {
if (mediaItem.localConfiguration == null) {
continue;
}
if (isLocalFileUri(mediaItem.playbackProperties.uri)) {
if (isLocalFileUri(mediaItem.localConfiguration.uri)) {
return requestExternalStoragePermission(activity);
}
for (int i = 0; i < mediaItem.playbackProperties.subtitles.size(); i++) {
if (isLocalFileUri(mediaItem.playbackProperties.subtitles.get(i).uri)) {
for (int i = 0; i < mediaItem.localConfiguration.subtitles.size(); i++) {
if (isLocalFileUri(mediaItem.localConfiguration.subtitles.get(i).uri)) {
return requestExternalStoragePermission(activity);
}
}
@ -255,14 +255,14 @@ public final class Util {
return true;
}
for (MediaItem mediaItem : mediaItems) {
if (mediaItem.playbackProperties == null) {
if (mediaItem.localConfiguration == null) {
continue;
}
if (isTrafficRestricted(mediaItem.playbackProperties.uri)) {
if (isTrafficRestricted(mediaItem.localConfiguration.uri)) {
return false;
}
for (int i = 0; i < mediaItem.playbackProperties.subtitles.size(); i++) {
if (isTrafficRestricted(mediaItem.playbackProperties.subtitles.get(i).uri)) {
for (int i = 0; i < mediaItem.localConfiguration.subtitles.size(); i++) {
if (isTrafficRestricted(mediaItem.localConfiguration.subtitles.get(i).uri)) {
return false;
}
}

View File

@ -122,7 +122,7 @@ public class TimelineTest {
otherWindow.positionInFirstPeriodUs = C.TIME_UNSET;
assertThat(window).isNotEqualTo(otherWindow);
window = populateWindow(mediaItem, mediaItem.playbackProperties.tag);
window = populateWindow(mediaItem, mediaItem.localConfiguration.tag);
otherWindow =
otherWindow.set(
window.uid,

View File

@ -74,9 +74,9 @@ public final class DefaultDrmSessionManagerProvider implements DrmSessionManager
@Override
public DrmSessionManager get(MediaItem mediaItem) {
checkNotNull(mediaItem.playbackProperties);
checkNotNull(mediaItem.localConfiguration);
@Nullable
MediaItem.DrmConfiguration drmConfiguration = mediaItem.playbackProperties.drmConfiguration;
MediaItem.DrmConfiguration drmConfiguration = mediaItem.localConfiguration.drmConfiguration;
if (drmConfiguration == null || Util.SDK_INT < 18) {
return DrmSessionManager.DRM_UNSUPPORTED;
}

View File

@ -321,7 +321,7 @@ public final class DownloadHelper {
* @throws IllegalStateException If the media item is of type DASH, HLS or SmoothStreaming.
*/
public static DownloadHelper forMediaItem(Context context, MediaItem mediaItem) {
Assertions.checkArgument(isProgressive(checkNotNull(mediaItem.playbackProperties)));
Assertions.checkArgument(isProgressive(checkNotNull(mediaItem.localConfiguration)));
return forMediaItem(
mediaItem,
getDefaultTrackSelectorParameters(context),
@ -411,7 +411,7 @@ public final class DownloadHelper {
@Nullable RenderersFactory renderersFactory,
@Nullable DataSource.Factory dataSourceFactory,
@Nullable DrmSessionManager drmSessionManager) {
boolean isProgressive = isProgressive(checkNotNull(mediaItem.playbackProperties));
boolean isProgressive = isProgressive(checkNotNull(mediaItem.localConfiguration));
Assertions.checkArgument(isProgressive || dataSourceFactory != null);
return new DownloadHelper(
mediaItem,
@ -452,7 +452,7 @@ public final class DownloadHelper {
downloadRequest.toMediaItem(), dataSourceFactory, drmSessionManager);
}
private final MediaItem.PlaybackProperties playbackProperties;
private final MediaItem.LocalConfiguration localConfiguration;
@Nullable private final MediaSource mediaSource;
private final DefaultTrackSelector trackSelector;
private final RendererCapabilities[] rendererCapabilities;
@ -485,7 +485,7 @@ public final class DownloadHelper {
@Nullable MediaSource mediaSource,
DefaultTrackSelector.Parameters trackSelectorParameters,
RendererCapabilities[] rendererCapabilities) {
this.playbackProperties = checkNotNull(mediaItem.playbackProperties);
this.localConfiguration = checkNotNull(mediaItem.localConfiguration);
this.mediaSource = mediaSource;
this.trackSelector =
new DefaultTrackSelector(trackSelectorParameters, new DownloadTrackSelection.Factory());
@ -726,7 +726,7 @@ public final class DownloadHelper {
* @return The built {@link DownloadRequest}.
*/
public DownloadRequest getDownloadRequest(@Nullable byte[] data) {
return getDownloadRequest(playbackProperties.uri.toString(), data);
return getDownloadRequest(localConfiguration.uri.toString(), data);
}
/**
@ -739,13 +739,13 @@ public final class DownloadHelper {
*/
public DownloadRequest getDownloadRequest(String id, @Nullable byte[] data) {
DownloadRequest.Builder requestBuilder =
new DownloadRequest.Builder(id, playbackProperties.uri)
.setMimeType(playbackProperties.mimeType)
new DownloadRequest.Builder(id, localConfiguration.uri)
.setMimeType(localConfiguration.mimeType)
.setKeySetId(
playbackProperties.drmConfiguration != null
? playbackProperties.drmConfiguration.getKeySetId()
localConfiguration.drmConfiguration != null
? localConfiguration.drmConfiguration.getKeySetId()
: null)
.setCustomCacheKey(playbackProperties.customCacheKey)
.setCustomCacheKey(localConfiguration.customCacheKey)
.setData(data);
if (mediaSource == null) {
return requestBuilder.build();
@ -896,9 +896,9 @@ public final class DownloadHelper {
.createMediaSource(mediaItem);
}
private static boolean isProgressive(MediaItem.PlaybackProperties playbackProperties) {
private static boolean isProgressive(MediaItem.LocalConfiguration localConfiguration) {
return Util.inferContentTypeForUriAndMimeType(
playbackProperties.uri, playbackProperties.mimeType)
localConfiguration.uri, localConfiguration.mimeType)
== C.TYPE_OTHER;
}

View File

@ -69,11 +69,11 @@ public final class ProgressiveDownloader implements Downloader {
public ProgressiveDownloader(
MediaItem mediaItem, CacheDataSource.Factory cacheDataSourceFactory, Executor executor) {
this.executor = Assertions.checkNotNull(executor);
Assertions.checkNotNull(mediaItem.playbackProperties);
Assertions.checkNotNull(mediaItem.localConfiguration);
dataSpec =
new DataSpec.Builder()
.setUri(mediaItem.playbackProperties.uri)
.setKey(mediaItem.playbackProperties.customCacheKey)
.setUri(mediaItem.localConfiguration.uri)
.setKey(mediaItem.localConfiguration.customCacheKey)
.setFlags(DataSpec.FLAG_ALLOW_CACHE_FRAGMENTATION)
.build();
dataSource = cacheDataSourceFactory.createDataSourceForDownloading();

View File

@ -110,10 +110,10 @@ public abstract class SegmentDownloader<M extends FilterableManifest<M>> impleme
Parser<M> manifestParser,
CacheDataSource.Factory cacheDataSourceFactory,
Executor executor) {
checkNotNull(mediaItem.playbackProperties);
this.manifestDataSpec = getCompressibleDataSpec(mediaItem.playbackProperties.uri);
checkNotNull(mediaItem.localConfiguration);
this.manifestDataSpec = getCompressibleDataSpec(mediaItem.localConfiguration.uri);
this.manifestParser = manifestParser;
this.streamKeys = new ArrayList<>(mediaItem.playbackProperties.streamKeys);
this.streamKeys = new ArrayList<>(mediaItem.localConfiguration.streamKeys);
this.cacheDataSourceFactory = cacheDataSourceFactory;
this.executor = executor;
cache = Assertions.checkNotNull(cacheDataSourceFactory.getCache());

View File

@ -54,23 +54,23 @@ import java.util.List;
* factories:
*
* <ul>
* <li>{@code DashMediaSource.Factory} if the item's {@link MediaItem.PlaybackProperties#uri uri}
* ends in '.mpd' or if its {@link MediaItem.PlaybackProperties#mimeType mimeType field} is
* <li>{@code DashMediaSource.Factory} if the item's {@link MediaItem.LocalConfiguration#uri uri}
* ends in '.mpd' or if its {@link MediaItem.LocalConfiguration#mimeType mimeType field} is
* explicitly set to {@link MimeTypes#APPLICATION_MPD} (Requires the <a
* href="https://exoplayer.dev/hello-world.html#add-exoplayer-modules">exoplayer-dash module
* to be added</a> to the app).
* <li>{@code HlsMediaSource.Factory} if the item's {@link MediaItem.PlaybackProperties#uri uri}
* ends in '.m3u8' or if its {@link MediaItem.PlaybackProperties#mimeType mimeType field} is
* <li>{@code HlsMediaSource.Factory} if the item's {@link MediaItem.LocalConfiguration#uri uri}
* ends in '.m3u8' or if its {@link MediaItem.LocalConfiguration#mimeType mimeType field} is
* explicitly set to {@link MimeTypes#APPLICATION_M3U8} (Requires the <a
* href="https://exoplayer.dev/hello-world.html#add-exoplayer-modules">exoplayer-hls module to
* be added</a> to the app).
* <li>{@code SsMediaSource.Factory} if the item's {@link MediaItem.PlaybackProperties#uri uri}
* ends in '.ism', '.ism/Manifest' or if its {@link MediaItem.PlaybackProperties#mimeType
* <li>{@code SsMediaSource.Factory} if the item's {@link MediaItem.LocalConfiguration#uri uri}
* ends in '.ism', '.ism/Manifest' or if its {@link MediaItem.LocalConfiguration#mimeType
* mimeType field} is explicitly set to {@link MimeTypes#APPLICATION_SS} (Requires the <a
* href="https://exoplayer.dev/hello-world.html#add-exoplayer-modules">
* exoplayer-smoothstreaming module to be added</a> to the app).
* <li>{@link ProgressiveMediaSource.Factory} serves as a fallback if the item's {@link
* MediaItem.PlaybackProperties#uri uri} doesn't match one of the above. It tries to infer the
* MediaItem.LocalConfiguration#uri uri} doesn't match one of the above. It tries to infer the
* required extractor by using the {@link DefaultExtractorsFactory} or the {@link
* ExtractorsFactory} provided in the constructor. An {@link UnrecognizedInputFormatException}
* is thrown if none of the available extractors can read the stream.
@ -78,7 +78,7 @@ import java.util.List;
*
* <h2>Ad support for media items with ad tag URIs</h2>
*
* <p>To support media items with {@link MediaItem.PlaybackProperties#adsConfiguration ads
* <p>To support media items with {@link MediaItem.LocalConfiguration#adsConfiguration ads
* configuration}, {@link #setAdsLoaderProvider} and {@link #setAdViewProvider} need to be called to
* configure the factory with the required providers.
*/
@ -86,17 +86,17 @@ public final class DefaultMediaSourceFactory implements MediaSourceFactory {
/**
* Provides {@link AdsLoader} instances for media items that have {@link
* MediaItem.PlaybackProperties#adsConfiguration ad tag URIs}.
* MediaItem.LocalConfiguration#adsConfiguration ad tag URIs}.
*/
public interface AdsLoaderProvider {
/**
* Returns an {@link AdsLoader} for the given {@link
* MediaItem.PlaybackProperties#adsConfiguration ads configuration}, or {@code null} if no ads
* MediaItem.LocalConfiguration#adsConfiguration ads configuration}, or {@code null} if no ads
* loader is available for the given ads configuration.
*
* <p>This method is called each time a {@link MediaSource} is created from a {@link MediaItem}
* that defines an {@link MediaItem.PlaybackProperties#adsConfiguration ads configuration}.
* that defines an {@link MediaItem.LocalConfiguration#adsConfiguration ads configuration}.
*/
@Nullable
AdsLoader getAdsLoader(MediaItem.AdsConfiguration adsConfiguration);
@ -173,7 +173,7 @@ public final class DefaultMediaSourceFactory implements MediaSourceFactory {
/**
* Sets whether a {@link ProgressiveMediaSource} or {@link SingleSampleMediaSource} is constructed
* to handle {@link MediaItem.PlaybackProperties#subtitles}. Defaults to false (i.e. {@link
* to handle {@link MediaItem.LocalConfiguration#subtitles}. Defaults to false (i.e. {@link
* SingleSampleMediaSource}.
*
* <p>This method is experimental, and will be renamed or removed in a future release.
@ -190,7 +190,7 @@ public final class DefaultMediaSourceFactory implements MediaSourceFactory {
/**
* Sets the {@link AdsLoaderProvider} that provides {@link AdsLoader} instances for media items
* that have {@link MediaItem.PlaybackProperties#adsConfiguration ads configurations}.
* that have {@link MediaItem.LocalConfiguration#adsConfiguration ads configurations}.
*
* @param adsLoaderProvider A provider for {@link AdsLoader} instances.
* @return This factory, for convenience.
@ -341,11 +341,11 @@ public final class DefaultMediaSourceFactory implements MediaSourceFactory {
@Override
public MediaSource createMediaSource(MediaItem mediaItem) {
Assertions.checkNotNull(mediaItem.playbackProperties);
Assertions.checkNotNull(mediaItem.localConfiguration);
@C.ContentType
int type =
Util.inferContentTypeForUriAndMimeType(
mediaItem.playbackProperties.uri, mediaItem.playbackProperties.mimeType);
mediaItem.localConfiguration.uri, mediaItem.localConfiguration.mimeType);
@Nullable MediaSourceFactory mediaSourceFactory = mediaSourceFactories.get(type);
Assertions.checkNotNull(
mediaSourceFactory, "No suitable media source factory found for content type: " + type);
@ -375,7 +375,7 @@ public final class DefaultMediaSourceFactory implements MediaSourceFactory {
MediaSource mediaSource = mediaSourceFactory.createMediaSource(mediaItem);
List<MediaItem.Subtitle> subtitles = castNonNull(mediaItem.playbackProperties).subtitles;
List<MediaItem.Subtitle> subtitles = castNonNull(mediaItem.localConfiguration).subtitles;
if (!subtitles.isEmpty()) {
MediaSource[] mediaSources = new MediaSource[subtitles.size() + 1];
mediaSources[0] = mediaSource;
@ -434,9 +434,9 @@ public final class DefaultMediaSourceFactory implements MediaSourceFactory {
}
private MediaSource maybeWrapWithAdsMediaSource(MediaItem mediaItem, MediaSource mediaSource) {
Assertions.checkNotNull(mediaItem.playbackProperties);
Assertions.checkNotNull(mediaItem.localConfiguration);
@Nullable
MediaItem.AdsConfiguration adsConfiguration = mediaItem.playbackProperties.adsConfiguration;
MediaItem.AdsConfiguration adsConfiguration = mediaItem.localConfiguration.adsConfiguration;
if (adsConfiguration == null) {
return mediaSource;
}
@ -460,7 +460,7 @@ public final class DefaultMediaSourceFactory implements MediaSourceFactory {
/* adsId= */ adsConfiguration.adsId != null
? adsConfiguration.adsId
: ImmutableList.of(
mediaItem.mediaId, mediaItem.playbackProperties.uri, adsConfiguration.adTagUri),
mediaItem.mediaId, mediaItem.localConfiguration.uri, adsConfiguration.adTagUri),
/* adMediaSourceFactory= */ this,
adsLoader,
adViewProvider);

View File

@ -34,7 +34,7 @@ import java.util.List;
/** Factory for creating {@link MediaSource MediaSources} from {@link MediaItem MediaItems}. */
public interface MediaSourceFactory {
/** @deprecated Use {@link MediaItem.PlaybackProperties#streamKeys} instead. */
/** @deprecated Use {@link MediaItem.LocalConfiguration#streamKeys} instead. */
@Deprecated
default MediaSourceFactory setStreamKeys(@Nullable List<StreamKey> streamKeys) {
return this;

View File

@ -215,14 +215,14 @@ public final class ProgressiveMediaSource extends BaseMediaSource
*
* @param mediaItem The {@link MediaItem}.
* @return The new {@link ProgressiveMediaSource}.
* @throws NullPointerException if {@link MediaItem#playbackProperties} is {@code null}.
* @throws NullPointerException if {@link MediaItem#localConfiguration} is {@code null}.
*/
@Override
public ProgressiveMediaSource createMediaSource(MediaItem mediaItem) {
checkNotNull(mediaItem.playbackProperties);
boolean needsTag = mediaItem.playbackProperties.tag == null && tag != null;
checkNotNull(mediaItem.localConfiguration);
boolean needsTag = mediaItem.localConfiguration.tag == null && tag != null;
boolean needsCustomCacheKey =
mediaItem.playbackProperties.customCacheKey == null && customCacheKey != null;
mediaItem.localConfiguration.customCacheKey == null && customCacheKey != null;
if (needsTag && needsCustomCacheKey) {
mediaItem = mediaItem.buildUpon().setTag(tag).setCustomCacheKey(customCacheKey).build();
} else if (needsTag) {
@ -252,7 +252,7 @@ public final class ProgressiveMediaSource extends BaseMediaSource
public static final int DEFAULT_LOADING_CHECK_INTERVAL_BYTES = 1024 * 1024;
private final MediaItem mediaItem;
private final MediaItem.PlaybackProperties playbackProperties;
private final MediaItem.LocalConfiguration localConfiguration;
private final DataSource.Factory dataSourceFactory;
private final ProgressiveMediaExtractor.Factory progressiveMediaExtractorFactory;
private final DrmSessionManager drmSessionManager;
@ -272,7 +272,7 @@ public final class ProgressiveMediaSource extends BaseMediaSource
DrmSessionManager drmSessionManager,
LoadErrorHandlingPolicy loadableLoadErrorHandlingPolicy,
int continueLoadingCheckIntervalBytes) {
this.playbackProperties = checkNotNull(mediaItem.playbackProperties);
this.localConfiguration = checkNotNull(mediaItem.localConfiguration);
this.mediaItem = mediaItem;
this.dataSourceFactory = dataSourceFactory;
this.progressiveMediaExtractorFactory = progressiveMediaExtractorFactory;
@ -307,7 +307,7 @@ public final class ProgressiveMediaSource extends BaseMediaSource
dataSource.addTransferListener(transferListener);
}
return new ProgressiveMediaPeriod(
playbackProperties.uri,
localConfiguration.uri,
dataSource,
progressiveMediaExtractorFactory.createProgressiveMediaExtractor(),
drmSessionManager,
@ -316,7 +316,7 @@ public final class ProgressiveMediaSource extends BaseMediaSource
createEventDispatcher(id),
this,
allocator,
playbackProperties.customCacheKey,
localConfiguration.customCacheKey,
continueLoadingCheckIntervalBytes);
}

View File

@ -58,8 +58,7 @@ public final class SilenceMediaSource extends BaseMediaSource {
/**
* Sets a tag for the media source which will be published in the {@link
* com.google.android.exoplayer2.Timeline} of the source as {@link
* com.google.android.exoplayer2.MediaItem.PlaybackProperties#tag
* Window#mediaItem.playbackProperties.tag}.
* MediaItem.LocalConfiguration#tag Window#mediaItem.localConfiguration.tag}.
*
* @param tag A tag for the media source.
* @return This factory, for convenience.

View File

@ -61,8 +61,7 @@ public final class SingleSampleMediaSource extends BaseMediaSource {
/**
* Sets a tag for the media source which will be published in the {@link Timeline} of the source
* as {@link com.google.android.exoplayer2.MediaItem.PlaybackProperties#tag
* Window#mediaItem.playbackProperties.tag}.
* as {@link MediaItem.LocalConfiguration#tag Window#mediaItem.localConfiguration.tag}.
*
* @param tag A tag for the media source.
* @return This factory, for convenience.

View File

@ -314,10 +314,10 @@ public final class AdsMediaSource extends CompositeMediaSource<MediaPeriodId> {
MediaItem.Builder adMediaItem = new MediaItem.Builder().setUri(adUri);
// Propagate the content's DRM config into the ad media source.
@Nullable
MediaItem.PlaybackProperties contentPlaybackProperties =
contentMediaSource.getMediaItem().playbackProperties;
if (contentPlaybackProperties != null) {
adMediaItem.setDrmConfiguration(contentPlaybackProperties.drmConfiguration);
MediaItem.LocalConfiguration contentLocalConfiguration =
contentMediaSource.getMediaItem().localConfiguration;
if (contentLocalConfiguration != null) {
adMediaItem.setDrmConfiguration(contentLocalConfiguration.drmConfiguration);
}
MediaSource adMediaSource = adMediaSourceFactory.createMediaSource(adMediaItem.build());
adMediaSourceHolder.initializeWithMediaSource(adMediaSource, adUri);

View File

@ -7953,11 +7953,11 @@ public final class ExoPlayerTest {
.blockUntilActionScheduleFinished(TIMEOUT_MS)
.blockUntilEnded(TIMEOUT_MS);
assertThat(currentMediaItems.get(0).playbackProperties.uri.toString())
assertThat(currentMediaItems.get(0).localConfiguration.uri.toString())
.isEqualTo("http://foo.bar/fake1");
assertThat(currentMediaItems.get(1).playbackProperties.uri.toString())
assertThat(currentMediaItems.get(1).localConfiguration.uri.toString())
.isEqualTo("http://foo.bar/fake2");
assertThat(currentMediaItems.get(2).playbackProperties.uri.toString())
assertThat(currentMediaItems.get(2).localConfiguration.uri.toString())
.isEqualTo("http://foo.bar/fake3");
assertThat(mediaItemsInTimeline).containsExactlyElementsIn(currentMediaItems);
}
@ -9767,7 +9767,7 @@ public final class ExoPlayerTest {
assertThat(oldPositionInfo.periodUid).isEqualTo(newPositionInfo.periodUid);
assertThat(oldPositionInfo.periodIndex).isEqualTo(newPositionInfo.periodIndex);
assertThat(oldPositionInfo.windowIndex).isEqualTo(newPositionInfo.windowIndex);
assertThat(oldPositionInfo.mediaItem.playbackProperties.tag).isEqualTo(1);
assertThat(oldPositionInfo.mediaItem.localConfiguration.tag).isEqualTo(1);
assertThat(oldPositionInfo.windowUid).isEqualTo(newPositionInfo.windowUid);
assertThat(oldPositionInfo.positionMs).isEqualTo(10_000);
assertThat(oldPositionInfo.contentPositionMs).isEqualTo(10_000);
@ -9789,7 +9789,7 @@ public final class ExoPlayerTest {
assertThat(oldPositionInfo.periodUid).isEqualTo(newPositionInfo.periodUid);
assertThat(oldPositionInfo.periodIndex).isEqualTo(newPositionInfo.periodIndex);
assertThat(oldPositionInfo.windowIndex).isEqualTo(newPositionInfo.windowIndex);
assertThat(oldPositionInfo.mediaItem.playbackProperties.tag).isEqualTo(1);
assertThat(oldPositionInfo.mediaItem.localConfiguration.tag).isEqualTo(1);
assertThat(oldPositionInfo.windowUid).isEqualTo(newPositionInfo.windowUid);
assertThat(oldPositionInfo.positionMs).isEqualTo(10_000);
assertThat(oldPositionInfo.contentPositionMs).isEqualTo(10_000);
@ -9809,7 +9809,7 @@ public final class ExoPlayerTest {
oldPositionInfo = oldPosition.getValue();
newPositionInfo = newPosition.getValue();
assertThat(oldPositionInfo.windowIndex).isEqualTo(1);
assertThat(oldPositionInfo.mediaItem.playbackProperties.tag).isEqualTo(2);
assertThat(oldPositionInfo.mediaItem.localConfiguration.tag).isEqualTo(2);
assertThat(oldPositionInfo.windowUid).isNotEqualTo(newPositionInfo.windowUid);
assertThat(oldPositionInfo.positionMs).isEqualTo(20_000);
assertThat(oldPositionInfo.contentPositionMs).isEqualTo(20_000);
@ -10131,7 +10131,7 @@ public final class ExoPlayerTest {
assertThat(oldPosition.getValue().windowUid)
.isEqualTo(player.getCurrentTimeline().getWindow(0, window).uid);
assertThat(oldPosition.getValue().windowIndex).isEqualTo(0);
assertThat(oldPosition.getValue().mediaItem.playbackProperties.tag).isEqualTo("id-0");
assertThat(oldPosition.getValue().mediaItem.localConfiguration.tag).isEqualTo("id-0");
assertThat(oldPosition.getValue().positionMs).isEqualTo(10_000);
assertThat(oldPosition.getValue().contentPositionMs).isEqualTo(10_000);
assertThat(oldPosition.getValue().adGroupIndex).isEqualTo(-1);
@ -10139,7 +10139,7 @@ public final class ExoPlayerTest {
assertThat(newPosition.getValue().windowUid)
.isEqualTo(player.getCurrentTimeline().getWindow(1, window).uid);
assertThat(newPosition.getValue().windowIndex).isEqualTo(1);
assertThat(newPosition.getValue().mediaItem.playbackProperties.tag).isEqualTo("id-1");
assertThat(newPosition.getValue().mediaItem.localConfiguration.tag).isEqualTo("id-1");
assertThat(newPosition.getValue().positionMs).isEqualTo(0);
assertThat(newPosition.getValue().contentPositionMs).isEqualTo(0);
assertThat(newPosition.getValue().adGroupIndex).isEqualTo(-1);
@ -10159,13 +10159,13 @@ public final class ExoPlayerTest {
assertThat(newPosition.getValue().windowUid)
.isEqualTo(player.getCurrentTimeline().getWindow(2, window).uid);
assertThat(oldPosition.getValue().windowIndex).isEqualTo(1);
assertThat(oldPosition.getValue().mediaItem.playbackProperties.tag).isEqualTo("id-1");
assertThat(oldPosition.getValue().mediaItem.localConfiguration.tag).isEqualTo("id-1");
assertThat(oldPosition.getValue().positionMs).isEqualTo(15_000);
assertThat(oldPosition.getValue().contentPositionMs).isEqualTo(15_000);
assertThat(oldPosition.getValue().adGroupIndex).isEqualTo(-1);
assertThat(oldPosition.getValue().adIndexInAdGroup).isEqualTo(-1);
assertThat(newPosition.getValue().windowIndex).isEqualTo(2);
assertThat(newPosition.getValue().mediaItem.playbackProperties.tag).isEqualTo("id-2");
assertThat(newPosition.getValue().mediaItem.localConfiguration.tag).isEqualTo("id-2");
assertThat(newPosition.getValue().positionMs).isEqualTo(0);
assertThat(newPosition.getValue().contentPositionMs).isEqualTo(0);
assertThat(newPosition.getValue().adGroupIndex).isEqualTo(-1);
@ -10179,14 +10179,14 @@ public final class ExoPlayerTest {
newPosition.capture(),
eq(Player.DISCONTINUITY_REASON_AUTO_TRANSITION));
assertThat(oldPosition.getValue().windowIndex).isEqualTo(2);
assertThat(oldPosition.getValue().mediaItem.playbackProperties.tag).isEqualTo("id-2");
assertThat(oldPosition.getValue().mediaItem.localConfiguration.tag).isEqualTo("id-2");
assertThat(oldPosition.getValue().windowUid).isEqualTo(lastNewWindowUid);
assertThat(oldPosition.getValue().positionMs).isEqualTo(20_000);
assertThat(oldPosition.getValue().contentPositionMs).isEqualTo(20_000);
assertThat(oldPosition.getValue().adGroupIndex).isEqualTo(-1);
assertThat(oldPosition.getValue().adIndexInAdGroup).isEqualTo(-1);
assertThat(newPosition.getValue().windowIndex).isEqualTo(2);
assertThat(newPosition.getValue().mediaItem.playbackProperties.tag).isEqualTo("id-2");
assertThat(newPosition.getValue().mediaItem.localConfiguration.tag).isEqualTo("id-2");
assertThat(newPosition.getValue().positionMs).isEqualTo(0);
assertThat(newPosition.getValue().contentPositionMs).isEqualTo(20_000);
assertThat(newPosition.getValue().adGroupIndex).isEqualTo(0);
@ -10201,14 +10201,14 @@ public final class ExoPlayerTest {
eq(Player.DISCONTINUITY_REASON_AUTO_TRANSITION));
assertThat(oldPosition.getValue().windowUid).isEqualTo(lastNewWindowUid);
assertThat(oldPosition.getValue().windowIndex).isEqualTo(2);
assertThat(oldPosition.getValue().mediaItem.playbackProperties.tag).isEqualTo("id-2");
assertThat(oldPosition.getValue().mediaItem.localConfiguration.tag).isEqualTo("id-2");
assertThat(oldPosition.getValue().positionMs).isEqualTo(5_000);
assertThat(oldPosition.getValue().contentPositionMs).isEqualTo(20_000);
assertThat(oldPosition.getValue().adGroupIndex).isEqualTo(0);
assertThat(oldPosition.getValue().adIndexInAdGroup).isEqualTo(0);
assertThat(newPosition.getValue().windowUid).isEqualTo(oldPosition.getValue().windowUid);
assertThat(newPosition.getValue().windowIndex).isEqualTo(2);
assertThat(newPosition.getValue().mediaItem.playbackProperties.tag).isEqualTo("id-2");
assertThat(newPosition.getValue().mediaItem.localConfiguration.tag).isEqualTo("id-2");
assertThat(newPosition.getValue().positionMs).isEqualTo(19_999);
assertThat(newPosition.getValue().contentPositionMs).isEqualTo(19_999);
assertThat(newPosition.getValue().adGroupIndex).isEqualTo(-1);
@ -10226,14 +10226,14 @@ public final class ExoPlayerTest {
.onMediaItemTransition(any(), eq(Player.MEDIA_ITEM_TRANSITION_REASON_AUTO));
assertThat(oldPosition.getValue().windowUid).isEqualTo(lastNewWindowUid);
assertThat(oldPosition.getValue().windowIndex).isEqualTo(2);
assertThat(oldPosition.getValue().mediaItem.playbackProperties.tag).isEqualTo("id-2");
assertThat(oldPosition.getValue().mediaItem.localConfiguration.tag).isEqualTo("id-2");
assertThat(oldPosition.getValue().positionMs).isEqualTo(20_000);
assertThat(oldPosition.getValue().contentPositionMs).isEqualTo(20_000);
assertThat(oldPosition.getValue().adGroupIndex).isEqualTo(-1);
assertThat(oldPosition.getValue().adIndexInAdGroup).isEqualTo(-1);
assertThat(newPosition.getValue().windowUid).isNotEqualTo(oldPosition.getValue().windowUid);
assertThat(newPosition.getValue().windowIndex).isEqualTo(3);
assertThat(newPosition.getValue().mediaItem.playbackProperties.tag).isEqualTo("id-3");
assertThat(newPosition.getValue().mediaItem.localConfiguration.tag).isEqualTo("id-3");
assertThat(newPosition.getValue().positionMs).isEqualTo(0);
assertThat(newPosition.getValue().contentPositionMs).isEqualTo(0);
assertThat(newPosition.getValue().adGroupIndex).isEqualTo(0);
@ -10248,14 +10248,14 @@ public final class ExoPlayerTest {
eq(Player.DISCONTINUITY_REASON_AUTO_TRANSITION));
assertThat(oldPosition.getValue().windowUid).isEqualTo(lastNewWindowUid);
assertThat(oldPosition.getValue().windowIndex).isEqualTo(3);
assertThat(oldPosition.getValue().mediaItem.playbackProperties.tag).isEqualTo("id-3");
assertThat(oldPosition.getValue().mediaItem.localConfiguration.tag).isEqualTo("id-3");
assertThat(oldPosition.getValue().positionMs).isEqualTo(5_000);
assertThat(oldPosition.getValue().contentPositionMs).isEqualTo(0);
assertThat(oldPosition.getValue().adGroupIndex).isEqualTo(0);
assertThat(oldPosition.getValue().adIndexInAdGroup).isEqualTo(0);
assertThat(newPosition.getValue().windowUid).isEqualTo(oldPosition.getValue().windowUid);
assertThat(newPosition.getValue().windowIndex).isEqualTo(3);
assertThat(newPosition.getValue().mediaItem.playbackProperties.tag).isEqualTo("id-3");
assertThat(newPosition.getValue().mediaItem.localConfiguration.tag).isEqualTo("id-3");
assertThat(newPosition.getValue().positionMs).isEqualTo(0);
assertThat(newPosition.getValue().contentPositionMs).isEqualTo(0);
assertThat(newPosition.getValue().adGroupIndex).isEqualTo(-1);
@ -10379,14 +10379,14 @@ public final class ExoPlayerTest {
any(), newPositionArgumentCaptor.capture(), eq(Player.DISCONTINUITY_REASON_REMOVE));
// The state at auto-transition event time.
assertThat(mediaItemCount[0]).isEqualTo(2);
assertThat(currentMediaItems[0].playbackProperties.tag).isEqualTo("id-1");
assertThat(currentMediaItems[0].localConfiguration.tag).isEqualTo("id-1");
// The masked state after id-1 has been removed.
assertThat(mediaItemCount[1]).isEqualTo(1);
assertThat(currentMediaItems[1].playbackProperties.tag).isEqualTo("id-0");
assertThat(currentMediaItems[1].localConfiguration.tag).isEqualTo("id-0");
// PositionInfo reports the media item at event time.
assertThat(newPositionArgumentCaptor.getAllValues().get(0).mediaItem.playbackProperties.tag)
assertThat(newPositionArgumentCaptor.getAllValues().get(0).mediaItem.localConfiguration.tag)
.isEqualTo("id-1");
assertThat(newPositionArgumentCaptor.getAllValues().get(1).mediaItem.playbackProperties.tag)
assertThat(newPositionArgumentCaptor.getAllValues().get(1).mediaItem.localConfiguration.tag)
.isEqualTo("id-0");
player.release();
}
@ -10717,20 +10717,20 @@ public final class ExoPlayerTest {
List<Player.PositionInfo> newPositions = newPosition.getAllValues();
assertThat(oldPositions.get(0).windowUid).isEqualTo(newPositions.get(0).windowUid);
assertThat(newPositions.get(0).windowIndex).isEqualTo(0);
assertThat(newPositions.get(0).mediaItem.playbackProperties.tag).isEqualTo("id-0");
assertThat(newPositions.get(0).mediaItem.localConfiguration.tag).isEqualTo("id-0");
assertThat(oldPositions.get(0).positionMs).isIn(Range.closed(4980L, 5000L));
assertThat(oldPositions.get(0).contentPositionMs).isIn(Range.closed(4980L, 5000L));
assertThat(oldPositions.get(0).windowIndex).isEqualTo(0);
assertThat(oldPositions.get(0).mediaItem.playbackProperties.tag).isEqualTo("id-0");
assertThat(oldPositions.get(0).mediaItem.localConfiguration.tag).isEqualTo("id-0");
assertThat(newPositions.get(0).positionMs).isEqualTo(7_000);
assertThat(newPositions.get(0).contentPositionMs).isEqualTo(7_000);
assertThat(oldPositions.get(1).windowUid).isNotEqualTo(newPositions.get(1).windowUid);
assertThat(oldPositions.get(1).windowIndex).isEqualTo(0);
assertThat(oldPositions.get(1).mediaItem.playbackProperties.tag).isEqualTo("id-0");
assertThat(oldPositions.get(1).mediaItem.localConfiguration.tag).isEqualTo("id-0");
assertThat(oldPositions.get(1).positionMs).isEqualTo(7_000);
assertThat(oldPositions.get(1).contentPositionMs).isEqualTo(7_000);
assertThat(newPositions.get(1).windowIndex).isEqualTo(1);
assertThat(newPositions.get(1).mediaItem.playbackProperties.tag).isEqualTo("id-1");
assertThat(newPositions.get(1).mediaItem.localConfiguration.tag).isEqualTo("id-1");
assertThat(newPositions.get(1).positionMs).isEqualTo(1_000);
assertThat(newPositions.get(1).contentPositionMs).isEqualTo(1_000);
player.release();
@ -11032,7 +11032,7 @@ public final class ExoPlayerTest {
List<Player.PositionInfo> oldPositions = oldPosition.getAllValues();
List<Player.PositionInfo> newPositions = newPosition.getAllValues();
assertThat(oldPositions.get(0).windowIndex).isEqualTo(0);
assertThat(oldPositions.get(0).mediaItem.playbackProperties.tag).isEqualTo(123);
assertThat(oldPositions.get(0).mediaItem.localConfiguration.tag).isEqualTo(123);
assertThat(oldPositions.get(0).positionMs).isIn(Range.closed(4980L, 5000L));
assertThat(oldPositions.get(0).contentPositionMs).isIn(Range.closed(4980L, 5000L));
assertThat(newPositions.get(0).windowUid).isNull();

View File

@ -400,10 +400,10 @@ public class DownloadHelperTest {
DownloadRequest downloadRequest = downloadHelper.getDownloadRequest(data);
assertThat(downloadRequest.uri).isEqualTo(testMediaItem.playbackProperties.uri);
assertThat(downloadRequest.mimeType).isEqualTo(testMediaItem.playbackProperties.mimeType);
assertThat(downloadRequest.uri).isEqualTo(testMediaItem.localConfiguration.uri);
assertThat(downloadRequest.mimeType).isEqualTo(testMediaItem.localConfiguration.mimeType);
assertThat(downloadRequest.customCacheKey)
.isEqualTo(testMediaItem.playbackProperties.customCacheKey);
.isEqualTo(testMediaItem.localConfiguration.customCacheKey);
assertThat(downloadRequest.data).isEqualTo(data);
assertThat(downloadRequest.streamKeys)
.containsExactly(

View File

@ -38,8 +38,8 @@ public class SilenceMediaSourceTest {
assertThat(mediaItem).isNotNull();
assertThat(mediaItem.mediaId).isEqualTo(SilenceMediaSource.MEDIA_ID);
assertThat(mediaItem.playbackProperties.uri).isEqualTo(Uri.EMPTY);
assertThat(mediaItem.playbackProperties.mimeType).isEqualTo(MimeTypes.AUDIO_RAW);
assertThat(mediaItem.localConfiguration.uri).isEqualTo(Uri.EMPTY);
assertThat(mediaItem.localConfiguration.mimeType).isEqualTo(MimeTypes.AUDIO_RAW);
}
@Test
@ -49,7 +49,7 @@ public class SilenceMediaSourceTest {
SilenceMediaSource mediaSource =
new SilenceMediaSource.Factory().setTag(tag).setDurationUs(1_000_000).createMediaSource();
assertThat(mediaSource.getMediaItem().playbackProperties.tag).isEqualTo(tag);
assertThat(mediaSource.getMediaItem().localConfiguration.tag).isEqualTo(tag);
}
@Test
@ -59,7 +59,7 @@ public class SilenceMediaSourceTest {
SilenceMediaSource mediaSource =
new SilenceMediaSource.Factory().setTag(tag).setDurationUs(1_000_000).createMediaSource();
assertThat(mediaSource.getMediaItem().playbackProperties.tag).isEqualTo(tag);
assertThat(mediaSource.getMediaItem().localConfiguration.tag).isEqualTo(tag);
}
@Test
@ -82,7 +82,7 @@ public class SilenceMediaSourceTest {
assertThat(mediaItem).isNotNull();
assertThat(mediaItem.mediaId).isEqualTo(SilenceMediaSource.MEDIA_ID);
assertThat(mediaSource.getMediaItem().playbackProperties.uri).isEqualTo(Uri.EMPTY);
assertThat(mediaItem.playbackProperties.mimeType).isEqualTo(MimeTypes.AUDIO_RAW);
assertThat(mediaSource.getMediaItem().localConfiguration.uri).isEqualTo(Uri.EMPTY);
assertThat(mediaItem.localConfiguration.mimeType).isEqualTo(MimeTypes.AUDIO_RAW);
}
}

View File

@ -101,7 +101,7 @@ public final class SinglePeriodTimelineTest {
new MediaItem.Builder().setUri(Uri.EMPTY).setTag(null).build());
assertThat(timeline.getWindow(/* windowIndex= */ 0, window).tag).isNull();
assertThat(timeline.getWindow(/* windowIndex= */ 0, window).mediaItem.playbackProperties.tag)
assertThat(timeline.getWindow(/* windowIndex= */ 0, window).mediaItem.localConfiguration.tag)
.isNull();
assertThat(timeline.getPeriod(/* periodIndex= */ 0, period, /* setIds= */ false).id).isNull();
assertThat(timeline.getPeriod(/* periodIndex= */ 0, period, /* setIds= */ true).id).isNull();
@ -143,7 +143,7 @@ public final class SinglePeriodTimelineTest {
Window window = timeline.getWindow(/* windowIndex= */ 0, this.window);
assertThat(window.mediaItem).isEqualTo(mediaItem);
assertThat(window.tag).isEqualTo(mediaItem.playbackProperties.tag);
assertThat(window.tag).isEqualTo(mediaItem.localConfiguration.tag);
}
@Test

View File

@ -315,10 +315,10 @@ public final class DashMediaSource extends BaseMediaSource {
Assertions.checkArgument(!manifest.dynamic);
MediaItem.Builder mediaItemBuilder =
mediaItem.buildUpon().setMimeType(MimeTypes.APPLICATION_MPD);
if (mediaItem.playbackProperties == null) {
if (mediaItem.localConfiguration == null) {
mediaItemBuilder.setUri(Uri.EMPTY);
}
if (mediaItem.playbackProperties == null || mediaItem.playbackProperties.tag == null) {
if (mediaItem.localConfiguration == null || mediaItem.localConfiguration.tag == null) {
mediaItemBuilder.setTag(tag);
}
if (mediaItem.liveConfiguration.targetOffsetMs == C.TIME_UNSET) {
@ -329,12 +329,12 @@ public final class DashMediaSource extends BaseMediaSource {
.setTargetOffsetMs(targetLiveOffsetOverrideMs)
.build());
}
if (mediaItem.playbackProperties == null
|| mediaItem.playbackProperties.streamKeys.isEmpty()) {
if (mediaItem.localConfiguration == null
|| mediaItem.localConfiguration.streamKeys.isEmpty()) {
mediaItemBuilder.setStreamKeys(streamKeys);
}
mediaItem = mediaItemBuilder.build();
if (!checkNotNull(mediaItem.playbackProperties).streamKeys.isEmpty()) {
if (!checkNotNull(mediaItem.localConfiguration).streamKeys.isEmpty()) {
manifest = manifest.copy(streamKeys);
}
return new DashMediaSource(
@ -367,26 +367,26 @@ public final class DashMediaSource extends BaseMediaSource {
*
* @param mediaItem The media item of the dash stream.
* @return The new {@link DashMediaSource}.
* @throws NullPointerException if {@link MediaItem#playbackProperties} is {@code null}.
* @throws NullPointerException if {@link MediaItem#localConfiguration} is {@code null}.
*/
@Override
public DashMediaSource createMediaSource(MediaItem mediaItem) {
checkNotNull(mediaItem.playbackProperties);
checkNotNull(mediaItem.localConfiguration);
@Nullable ParsingLoadable.Parser<? extends DashManifest> manifestParser = this.manifestParser;
if (manifestParser == null) {
manifestParser = new DashManifestParser();
}
List<StreamKey> streamKeys =
mediaItem.playbackProperties.streamKeys.isEmpty()
mediaItem.localConfiguration.streamKeys.isEmpty()
? this.streamKeys
: mediaItem.playbackProperties.streamKeys;
: mediaItem.localConfiguration.streamKeys;
if (!streamKeys.isEmpty()) {
manifestParser = new FilteringManifestParser<>(manifestParser, streamKeys);
}
boolean needsTag = mediaItem.playbackProperties.tag == null && tag != null;
boolean needsTag = mediaItem.localConfiguration.tag == null && tag != null;
boolean needsStreamKeys =
mediaItem.playbackProperties.streamKeys.isEmpty() && !streamKeys.isEmpty();
mediaItem.localConfiguration.streamKeys.isEmpty() && !streamKeys.isEmpty();
boolean needsTargetLiveOffset =
mediaItem.liveConfiguration.targetOffsetMs == C.TIME_UNSET
&& targetLiveOffsetOverrideMs != C.TIME_UNSET;
@ -501,8 +501,8 @@ public final class DashMediaSource extends BaseMediaSource {
long fallbackTargetLiveOffsetMs) {
this.mediaItem = mediaItem;
this.liveConfiguration = mediaItem.liveConfiguration;
this.manifestUri = checkNotNull(mediaItem.playbackProperties).uri;
this.initialManifestUri = mediaItem.playbackProperties.uri;
this.manifestUri = checkNotNull(mediaItem.localConfiguration).uri;
this.initialManifestUri = mediaItem.localConfiguration.uri;
this.manifest = manifest;
this.manifestDataSourceFactory = manifestDataSourceFactory;
this.manifestParser = manifestParser;

View File

@ -111,9 +111,9 @@ public final class DashMediaSourceTest {
MediaItem dashMediaItem = factory.createMediaSource(mediaItem).getMediaItem();
assertThat(dashMediaItem.playbackProperties).isNotNull();
assertThat(dashMediaItem.playbackProperties.uri).isEqualTo(mediaItem.playbackProperties.uri);
assertThat(dashMediaItem.playbackProperties.tag).isEqualTo(tag);
assertThat(dashMediaItem.localConfiguration).isNotNull();
assertThat(dashMediaItem.localConfiguration.uri).isEqualTo(mediaItem.localConfiguration.uri);
assertThat(dashMediaItem.localConfiguration.tag).isEqualTo(tag);
}
// Tests backwards compatibility
@ -129,9 +129,9 @@ public final class DashMediaSourceTest {
MediaItem dashMediaItem = factory.createMediaSource(mediaItem).getMediaItem();
assertThat(dashMediaItem.playbackProperties).isNotNull();
assertThat(dashMediaItem.playbackProperties.uri).isEqualTo(mediaItem.playbackProperties.uri);
assertThat(dashMediaItem.playbackProperties.tag).isEqualTo(mediaItemTag);
assertThat(dashMediaItem.localConfiguration).isNotNull();
assertThat(dashMediaItem.localConfiguration.uri).isEqualTo(mediaItem.localConfiguration.uri);
assertThat(dashMediaItem.localConfiguration.tag).isEqualTo(mediaItemTag);
}
// Tests backwards compatibility
@ -146,9 +146,9 @@ public final class DashMediaSourceTest {
MediaItem dashMediaItem = factory.createMediaSource(mediaItem).getMediaItem();
assertThat(dashMediaItem.playbackProperties).isNotNull();
assertThat(dashMediaItem.playbackProperties.uri).isEqualTo(mediaItem.playbackProperties.uri);
assertThat(dashMediaItem.playbackProperties.streamKeys).containsExactly(streamKey);
assertThat(dashMediaItem.localConfiguration).isNotNull();
assertThat(dashMediaItem.localConfiguration.uri).isEqualTo(mediaItem.localConfiguration.uri);
assertThat(dashMediaItem.localConfiguration.streamKeys).containsExactly(streamKey);
}
// Tests backwards compatibility
@ -168,9 +168,9 @@ public final class DashMediaSourceTest {
MediaItem dashMediaItem = factory.createMediaSource(mediaItem).getMediaItem();
assertThat(dashMediaItem.playbackProperties).isNotNull();
assertThat(dashMediaItem.playbackProperties.uri).isEqualTo(mediaItem.playbackProperties.uri);
assertThat(dashMediaItem.playbackProperties.streamKeys).containsExactly(mediaItemStreamKey);
assertThat(dashMediaItem.localConfiguration).isNotNull();
assertThat(dashMediaItem.localConfiguration.uri).isEqualTo(mediaItem.localConfiguration.uri);
assertThat(dashMediaItem.localConfiguration.streamKeys).containsExactly(mediaItemStreamKey);
}
@Test

View File

@ -60,7 +60,7 @@ public class DefaultMediaSourceFactoryTest {
MediaSource mediaSource = defaultMediaSourceFactory.createMediaSource(mediaItem);
assertThat(mediaSource.getMediaItem().playbackProperties.tag).isEqualTo(tag);
assertThat(mediaSource.getMediaItem().localConfiguration.tag).isEqualTo(tag);
}
@Test

View File

@ -365,24 +365,24 @@ public final class HlsMediaSource extends BaseMediaSource
*
* @param mediaItem The {@link MediaItem}.
* @return The new {@link HlsMediaSource}.
* @throws NullPointerException if {@link MediaItem#playbackProperties} is {@code null}.
* @throws NullPointerException if {@link MediaItem#localConfiguration} is {@code null}.
*/
@Override
public HlsMediaSource createMediaSource(MediaItem mediaItem) {
checkNotNull(mediaItem.playbackProperties);
checkNotNull(mediaItem.localConfiguration);
HlsPlaylistParserFactory playlistParserFactory = this.playlistParserFactory;
List<StreamKey> streamKeys =
mediaItem.playbackProperties.streamKeys.isEmpty()
mediaItem.localConfiguration.streamKeys.isEmpty()
? this.streamKeys
: mediaItem.playbackProperties.streamKeys;
: mediaItem.localConfiguration.streamKeys;
if (!streamKeys.isEmpty()) {
playlistParserFactory =
new FilteringHlsPlaylistParserFactory(playlistParserFactory, streamKeys);
}
boolean needsTag = mediaItem.playbackProperties.tag == null && tag != null;
boolean needsTag = mediaItem.localConfiguration.tag == null && tag != null;
boolean needsStreamKeys =
mediaItem.playbackProperties.streamKeys.isEmpty() && !streamKeys.isEmpty();
mediaItem.localConfiguration.streamKeys.isEmpty() && !streamKeys.isEmpty();
if (needsTag && needsStreamKeys) {
mediaItem = mediaItem.buildUpon().setTag(tag).setStreamKeys(streamKeys).build();
} else if (needsTag) {
@ -412,7 +412,7 @@ public final class HlsMediaSource extends BaseMediaSource
}
private final HlsExtractorFactory extractorFactory;
private final MediaItem.PlaybackProperties playbackProperties;
private final MediaItem.LocalConfiguration localConfiguration;
private final HlsDataSourceFactory dataSourceFactory;
private final CompositeSequenceableLoaderFactory compositeSequenceableLoaderFactory;
private final DrmSessionManager drmSessionManager;
@ -439,7 +439,7 @@ public final class HlsMediaSource extends BaseMediaSource
boolean allowChunklessPreparation,
@MetadataType int metadataType,
boolean useSessionKeys) {
this.playbackProperties = checkNotNull(mediaItem.playbackProperties);
this.localConfiguration = checkNotNull(mediaItem.localConfiguration);
this.mediaItem = mediaItem;
this.liveConfiguration = mediaItem.liveConfiguration;
this.dataSourceFactory = dataSourceFactory;
@ -465,7 +465,8 @@ public final class HlsMediaSource extends BaseMediaSource
drmSessionManager.prepare();
MediaSourceEventListener.EventDispatcher eventDispatcher =
createEventDispatcher(/* mediaPeriodId= */ null);
playlistTracker.start(playbackProperties.uri, eventDispatcher, /* listener= */ this);
playlistTracker.start(
localConfiguration.uri, eventDispatcher, /* primaryPlaylistListener= */ this);
}
@Override

View File

@ -60,7 +60,7 @@ public class DefaultMediaSourceFactoryTest {
MediaSource mediaSource = defaultMediaSourceFactory.createMediaSource(mediaItem);
assertThat(mediaSource.getMediaItem().playbackProperties.tag).isEqualTo(tag);
assertThat(mediaSource.getMediaItem().localConfiguration.tag).isEqualTo(tag);
}
@Test

View File

@ -59,9 +59,9 @@ public class HlsMediaSourceTest {
MediaItem hlsMediaItem = factory.createMediaSource(mediaItem).getMediaItem();
assertThat(hlsMediaItem.playbackProperties).isNotNull();
assertThat(hlsMediaItem.playbackProperties.uri).isEqualTo(mediaItem.playbackProperties.uri);
assertThat(hlsMediaItem.playbackProperties.tag).isEqualTo(tag);
assertThat(hlsMediaItem.localConfiguration).isNotNull();
assertThat(hlsMediaItem.localConfiguration.uri).isEqualTo(mediaItem.localConfiguration.uri);
assertThat(hlsMediaItem.localConfiguration.tag).isEqualTo(tag);
}
// Tests backwards compatibility
@ -77,9 +77,9 @@ public class HlsMediaSourceTest {
MediaItem hlsMediaItem = factory.createMediaSource(mediaItem).getMediaItem();
assertThat(hlsMediaItem.playbackProperties).isNotNull();
assertThat(hlsMediaItem.playbackProperties.uri).isEqualTo(mediaItem.playbackProperties.uri);
assertThat(hlsMediaItem.playbackProperties.tag).isEqualTo(mediaItemTag);
assertThat(hlsMediaItem.localConfiguration).isNotNull();
assertThat(hlsMediaItem.localConfiguration.uri).isEqualTo(mediaItem.localConfiguration.uri);
assertThat(hlsMediaItem.localConfiguration.tag).isEqualTo(mediaItemTag);
}
// Tests backwards compatibility
@ -94,9 +94,9 @@ public class HlsMediaSourceTest {
MediaItem hlsMediaItem = factory.createMediaSource(mediaItem).getMediaItem();
assertThat(hlsMediaItem.playbackProperties).isNotNull();
assertThat(hlsMediaItem.playbackProperties.uri).isEqualTo(mediaItem.playbackProperties.uri);
assertThat(hlsMediaItem.playbackProperties.streamKeys).containsExactly(streamKey);
assertThat(hlsMediaItem.localConfiguration).isNotNull();
assertThat(hlsMediaItem.localConfiguration.uri).isEqualTo(mediaItem.localConfiguration.uri);
assertThat(hlsMediaItem.localConfiguration.streamKeys).containsExactly(streamKey);
}
// Tests backwards compatibility
@ -116,9 +116,9 @@ public class HlsMediaSourceTest {
MediaItem hlsMediaItem = factory.createMediaSource(mediaItem).getMediaItem();
assertThat(hlsMediaItem.playbackProperties).isNotNull();
assertThat(hlsMediaItem.playbackProperties.uri).isEqualTo(mediaItem.playbackProperties.uri);
assertThat(hlsMediaItem.playbackProperties.streamKeys).containsExactly(mediaItemStreamKey);
assertThat(hlsMediaItem.localConfiguration).isNotNull();
assertThat(hlsMediaItem.localConfiguration.uri).isEqualTo(mediaItem.localConfiguration.uri);
assertThat(hlsMediaItem.localConfiguration.streamKeys).containsExactly(mediaItemStreamKey);
}
@Test

View File

@ -191,11 +191,11 @@ public final class RtspMediaSource extends BaseMediaSource {
*
* @param mediaItem The {@link MediaItem}.
* @return The new {@link RtspMediaSource}.
* @throws NullPointerException if {@link MediaItem#playbackProperties} is {@code null}.
* @throws NullPointerException if {@link MediaItem#localConfiguration} is {@code null}.
*/
@Override
public RtspMediaSource createMediaSource(MediaItem mediaItem) {
checkNotNull(mediaItem.playbackProperties);
checkNotNull(mediaItem.localConfiguration);
return new RtspMediaSource(
mediaItem,
forceUseRtpTcp
@ -241,7 +241,7 @@ public final class RtspMediaSource extends BaseMediaSource {
this.mediaItem = mediaItem;
this.rtpDataChannelFactory = rtpDataChannelFactory;
this.userAgent = userAgent;
this.uri = checkNotNull(this.mediaItem.playbackProperties).uri;
this.uri = checkNotNull(this.mediaItem.localConfiguration).uri;
this.debugLoggingEnabled = debugLoggingEnabled;
this.timelineDurationUs = C.TIME_UNSET;
this.timelineIsPlaceholder = true;

View File

@ -277,20 +277,20 @@ public final class SsMediaSource extends BaseMediaSource
public SsMediaSource createMediaSource(SsManifest manifest, MediaItem mediaItem) {
Assertions.checkArgument(!manifest.isLive);
List<StreamKey> streamKeys =
mediaItem.playbackProperties != null && !mediaItem.playbackProperties.streamKeys.isEmpty()
? mediaItem.playbackProperties.streamKeys
mediaItem.localConfiguration != null && !mediaItem.localConfiguration.streamKeys.isEmpty()
? mediaItem.localConfiguration.streamKeys
: this.streamKeys;
if (!streamKeys.isEmpty()) {
manifest = manifest.copy(streamKeys);
}
boolean hasUri = mediaItem.playbackProperties != null;
boolean hasTag = hasUri && mediaItem.playbackProperties.tag != null;
boolean hasUri = mediaItem.localConfiguration != null;
boolean hasTag = hasUri && mediaItem.localConfiguration.tag != null;
mediaItem =
mediaItem
.buildUpon()
.setMimeType(MimeTypes.APPLICATION_SS)
.setUri(hasUri ? mediaItem.playbackProperties.uri : Uri.EMPTY)
.setTag(hasTag ? mediaItem.playbackProperties.tag : tag)
.setUri(hasUri ? mediaItem.localConfiguration.uri : Uri.EMPTY)
.setTag(hasTag ? mediaItem.localConfiguration.tag : tag)
.setStreamKeys(streamKeys)
.build();
return new SsMediaSource(
@ -310,26 +310,26 @@ public final class SsMediaSource extends BaseMediaSource
*
* @param mediaItem The {@link MediaItem}.
* @return The new {@link SsMediaSource}.
* @throws NullPointerException if {@link MediaItem#playbackProperties} is {@code null}.
* @throws NullPointerException if {@link MediaItem#localConfiguration} is {@code null}.
*/
@Override
public SsMediaSource createMediaSource(MediaItem mediaItem) {
checkNotNull(mediaItem.playbackProperties);
checkNotNull(mediaItem.localConfiguration);
@Nullable ParsingLoadable.Parser<? extends SsManifest> manifestParser = this.manifestParser;
if (manifestParser == null) {
manifestParser = new SsManifestParser();
}
List<StreamKey> streamKeys =
!mediaItem.playbackProperties.streamKeys.isEmpty()
? mediaItem.playbackProperties.streamKeys
!mediaItem.localConfiguration.streamKeys.isEmpty()
? mediaItem.localConfiguration.streamKeys
: this.streamKeys;
if (!streamKeys.isEmpty()) {
manifestParser = new FilteringManifestParser<>(manifestParser, streamKeys);
}
boolean needsTag = mediaItem.playbackProperties.tag == null && tag != null;
boolean needsTag = mediaItem.localConfiguration.tag == null && tag != null;
boolean needsStreamKeys =
mediaItem.playbackProperties.streamKeys.isEmpty() && !streamKeys.isEmpty();
mediaItem.localConfiguration.streamKeys.isEmpty() && !streamKeys.isEmpty();
if (needsTag && needsStreamKeys) {
mediaItem = mediaItem.buildUpon().setTag(tag).setStreamKeys(streamKeys).build();
} else if (needsTag) {
@ -370,7 +370,7 @@ public final class SsMediaSource extends BaseMediaSource
private final boolean sideloadedManifest;
private final Uri manifestUri;
private final MediaItem.PlaybackProperties playbackProperties;
private final MediaItem.LocalConfiguration localConfiguration;
private final MediaItem mediaItem;
private final DataSource.Factory manifestDataSourceFactory;
private final SsChunkSource.Factory chunkSourceFactory;
@ -404,12 +404,12 @@ public final class SsMediaSource extends BaseMediaSource
long livePresentationDelayMs) {
Assertions.checkState(manifest == null || !manifest.isLive);
this.mediaItem = mediaItem;
playbackProperties = checkNotNull(mediaItem.playbackProperties);
localConfiguration = checkNotNull(mediaItem.localConfiguration);
this.manifest = manifest;
this.manifestUri =
playbackProperties.uri.equals(Uri.EMPTY)
localConfiguration.uri.equals(Uri.EMPTY)
? null
: Util.fixSmoothStreamingIsmManifestUri(playbackProperties.uri);
: Util.fixSmoothStreamingIsmManifestUri(localConfiguration.uri);
this.manifestDataSourceFactory = manifestDataSourceFactory;
this.manifestParser = manifestParser;
this.chunkSourceFactory = chunkSourceFactory;

View File

@ -87,7 +87,7 @@ public final class SsDownloader extends SegmentDownloader<SsManifest> {
.buildUpon()
.setUri(
Util.fixSmoothStreamingIsmManifestUri(
checkNotNull(mediaItem.playbackProperties).uri))
checkNotNull(mediaItem.localConfiguration).uri))
.build(),
new SsManifestParser(),
cacheDataSourceFactory,

View File

@ -60,7 +60,7 @@ public class DefaultMediaSourceFactoryTest {
MediaSource mediaSource = defaultMediaSourceFactory.createMediaSource(mediaItem);
assertThat(mediaSource.getMediaItem().playbackProperties.tag).isEqualTo(tag);
assertThat(mediaSource.getMediaItem().localConfiguration.tag).isEqualTo(tag);
}
@Test

View File

@ -41,10 +41,10 @@ public class SsMediaSourceTest {
MediaItem ssMediaItem = factory.createMediaSource(mediaItem).getMediaItem();
assertThat(ssMediaItem.playbackProperties).isNotNull();
assertThat(ssMediaItem.playbackProperties.uri)
.isEqualTo(castNonNull(mediaItem.playbackProperties).uri);
assertThat(ssMediaItem.playbackProperties.tag).isEqualTo(tag);
assertThat(ssMediaItem.localConfiguration).isNotNull();
assertThat(ssMediaItem.localConfiguration.uri)
.isEqualTo(castNonNull(mediaItem.localConfiguration).uri);
assertThat(ssMediaItem.localConfiguration.tag).isEqualTo(tag);
}
// Tests backwards compatibility
@ -60,10 +60,10 @@ public class SsMediaSourceTest {
MediaItem ssMediaItem = factory.createMediaSource(mediaItem).getMediaItem();
assertThat(ssMediaItem.playbackProperties).isNotNull();
assertThat(ssMediaItem.playbackProperties.uri)
.isEqualTo(castNonNull(mediaItem.playbackProperties).uri);
assertThat(ssMediaItem.playbackProperties.tag).isEqualTo(mediaItemTag);
assertThat(ssMediaItem.localConfiguration).isNotNull();
assertThat(ssMediaItem.localConfiguration.uri)
.isEqualTo(castNonNull(mediaItem.localConfiguration).uri);
assertThat(ssMediaItem.localConfiguration.tag).isEqualTo(mediaItemTag);
}
// Tests backwards compatibility
@ -78,10 +78,10 @@ public class SsMediaSourceTest {
MediaItem ssMediaItem = factory.createMediaSource(mediaItem).getMediaItem();
assertThat(ssMediaItem.playbackProperties).isNotNull();
assertThat(ssMediaItem.playbackProperties.uri)
.isEqualTo(castNonNull(mediaItem.playbackProperties).uri);
assertThat(ssMediaItem.playbackProperties.streamKeys).containsExactly(streamKey);
assertThat(ssMediaItem.localConfiguration).isNotNull();
assertThat(ssMediaItem.localConfiguration.uri)
.isEqualTo(castNonNull(mediaItem.localConfiguration).uri);
assertThat(ssMediaItem.localConfiguration.streamKeys).containsExactly(streamKey);
}
// Tests backwards compatibility
@ -101,9 +101,9 @@ public class SsMediaSourceTest {
MediaItem ssMediaItem = factory.createMediaSource(mediaItem).getMediaItem();
assertThat(ssMediaItem.playbackProperties).isNotNull();
assertThat(ssMediaItem.playbackProperties.uri)
.isEqualTo(castNonNull(mediaItem.playbackProperties).uri);
assertThat(ssMediaItem.playbackProperties.streamKeys).containsExactly(mediaItemStreamKey);
assertThat(ssMediaItem.localConfiguration).isNotNull();
assertThat(ssMediaItem.localConfiguration.uri)
.isEqualTo(castNonNull(mediaItem.localConfiguration).uri);
assertThat(ssMediaItem.localConfiguration.streamKeys).containsExactly(mediaItemStreamKey);
}
}

View File

@ -85,7 +85,7 @@ public class FakeMediaSource extends BaseMediaSource {
new MediaItem.Builder().setMediaId("FakeMediaSource").setUri("http://manifest.uri").build();
private static final DataSpec FAKE_DATA_SPEC =
new DataSpec(castNonNull(FAKE_MEDIA_ITEM.playbackProperties).uri);
new DataSpec(castNonNull(FAKE_MEDIA_ITEM.localConfiguration).uri);
private static final int MANIFEST_LOAD_BYTES = 100;
private final TrackGroupArray trackGroupArray;

View File

@ -58,9 +58,9 @@ public final class TimelineAsserts {
for (int i = 0; i < timeline.getWindowCount(); i++) {
timeline.getWindow(i, window);
if (expectedWindowTags[i] != null) {
MediaItem.PlaybackProperties playbackProperties = window.mediaItem.playbackProperties;
assertThat(playbackProperties).isNotNull();
assertThat(Util.castNonNull(playbackProperties).tag).isEqualTo(expectedWindowTags[i]);
MediaItem.LocalConfiguration localConfiguration = window.mediaItem.localConfiguration;
assertThat(localConfiguration).isNotNull();
assertThat(Util.castNonNull(localConfiguration).tag).isEqualTo(expectedWindowTags[i]);
}
}
}