mirror of
https://github.com/androidx/media.git
synced 2025-04-30 06:46:50 +08:00
Migrate usages of MediaItem.PlaybackProperties to LocalConfiguration
PiperOrigin-RevId: 399206106
This commit is contained in:
parent
e373e0cbaf
commit
a04f1d1726
@ -98,7 +98,7 @@ public class DownloadTracker {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public boolean isDownloaded(MediaItem mediaItem) {
|
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;
|
return download != null && download.state != Download.STATE_FAILED;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -110,7 +110,7 @@ public class DownloadTracker {
|
|||||||
|
|
||||||
public void toggleDownload(
|
public void toggleDownload(
|
||||||
FragmentManager fragmentManager, MediaItem mediaItem, RenderersFactory renderersFactory) {
|
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) {
|
if (download != null && download.state != Download.STATE_FAILED) {
|
||||||
DownloadService.sendRemoveDownload(
|
DownloadService.sendRemoveDownload(
|
||||||
context, DemoDownloadService.class, download.request.id, /* foreground= */ false);
|
context, DemoDownloadService.class, download.request.id, /* foreground= */ false);
|
||||||
@ -223,7 +223,7 @@ public class DownloadTracker {
|
|||||||
widevineOfflineLicenseFetchTask =
|
widevineOfflineLicenseFetchTask =
|
||||||
new WidevineOfflineLicenseFetchTask(
|
new WidevineOfflineLicenseFetchTask(
|
||||||
format,
|
format,
|
||||||
mediaItem.playbackProperties.drmConfiguration,
|
mediaItem.localConfiguration.drmConfiguration,
|
||||||
httpDataSourceFactory,
|
httpDataSourceFactory,
|
||||||
/* dialogHelper= */ this,
|
/* dialogHelper= */ this,
|
||||||
helper);
|
helper);
|
||||||
|
@ -88,22 +88,22 @@ public class IntentUtil {
|
|||||||
Assertions.checkArgument(!mediaItems.isEmpty());
|
Assertions.checkArgument(!mediaItems.isEmpty());
|
||||||
if (mediaItems.size() == 1) {
|
if (mediaItems.size() == 1) {
|
||||||
MediaItem mediaItem = mediaItems.get(0);
|
MediaItem mediaItem = mediaItems.get(0);
|
||||||
MediaItem.PlaybackProperties playbackProperties = checkNotNull(mediaItem.playbackProperties);
|
MediaItem.LocalConfiguration localConfiguration = checkNotNull(mediaItem.localConfiguration);
|
||||||
intent.setAction(ACTION_VIEW).setData(mediaItem.playbackProperties.uri);
|
intent.setAction(ACTION_VIEW).setData(mediaItem.localConfiguration.uri);
|
||||||
if (mediaItem.mediaMetadata.title != null) {
|
if (mediaItem.mediaMetadata.title != null) {
|
||||||
intent.putExtra(TITLE_EXTRA, mediaItem.mediaMetadata.title);
|
intent.putExtra(TITLE_EXTRA, mediaItem.mediaMetadata.title);
|
||||||
}
|
}
|
||||||
addPlaybackPropertiesToIntent(playbackProperties, intent, /* extrasKeySuffix= */ "");
|
addPlaybackPropertiesToIntent(localConfiguration, intent, /* extrasKeySuffix= */ "");
|
||||||
addClippingPropertiesToIntent(
|
addClippingPropertiesToIntent(
|
||||||
mediaItem.clippingProperties, intent, /* extrasKeySuffix= */ "");
|
mediaItem.clippingProperties, intent, /* extrasKeySuffix= */ "");
|
||||||
} else {
|
} else {
|
||||||
intent.setAction(ACTION_VIEW_LIST);
|
intent.setAction(ACTION_VIEW_LIST);
|
||||||
for (int i = 0; i < mediaItems.size(); i++) {
|
for (int i = 0; i < mediaItems.size(); i++) {
|
||||||
MediaItem mediaItem = mediaItems.get(i);
|
MediaItem mediaItem = mediaItems.get(i);
|
||||||
MediaItem.PlaybackProperties playbackProperties =
|
MediaItem.LocalConfiguration localConfiguration =
|
||||||
checkNotNull(mediaItem.playbackProperties);
|
checkNotNull(mediaItem.localConfiguration);
|
||||||
intent.putExtra(URI_EXTRA + ("_" + i), playbackProperties.uri.toString());
|
intent.putExtra(URI_EXTRA + ("_" + i), localConfiguration.uri.toString());
|
||||||
addPlaybackPropertiesToIntent(playbackProperties, intent, /* extrasKeySuffix= */ "_" + i);
|
addPlaybackPropertiesToIntent(localConfiguration, intent, /* extrasKeySuffix= */ "_" + i);
|
||||||
addClippingPropertiesToIntent(
|
addClippingPropertiesToIntent(
|
||||||
mediaItem.clippingProperties, intent, /* extrasKeySuffix= */ "_" + i);
|
mediaItem.clippingProperties, intent, /* extrasKeySuffix= */ "_" + i);
|
||||||
if (mediaItem.mediaMetadata.title != null) {
|
if (mediaItem.mediaMetadata.title != null) {
|
||||||
@ -185,20 +185,20 @@ public class IntentUtil {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static void addPlaybackPropertiesToIntent(
|
private static void addPlaybackPropertiesToIntent(
|
||||||
MediaItem.PlaybackProperties playbackProperties, Intent intent, String extrasKeySuffix) {
|
MediaItem.LocalConfiguration localConfiguration, Intent intent, String extrasKeySuffix) {
|
||||||
intent
|
intent
|
||||||
.putExtra(MIME_TYPE_EXTRA + extrasKeySuffix, playbackProperties.mimeType)
|
.putExtra(MIME_TYPE_EXTRA + extrasKeySuffix, localConfiguration.mimeType)
|
||||||
.putExtra(
|
.putExtra(
|
||||||
AD_TAG_URI_EXTRA + extrasKeySuffix,
|
AD_TAG_URI_EXTRA + extrasKeySuffix,
|
||||||
playbackProperties.adsConfiguration != null
|
localConfiguration.adsConfiguration != null
|
||||||
? playbackProperties.adsConfiguration.adTagUri.toString()
|
? localConfiguration.adsConfiguration.adTagUri.toString()
|
||||||
: null);
|
: null);
|
||||||
if (playbackProperties.drmConfiguration != null) {
|
if (localConfiguration.drmConfiguration != null) {
|
||||||
addDrmConfigurationToIntent(playbackProperties.drmConfiguration, intent, extrasKeySuffix);
|
addDrmConfigurationToIntent(localConfiguration.drmConfiguration, intent, extrasKeySuffix);
|
||||||
}
|
}
|
||||||
if (!playbackProperties.subtitles.isEmpty()) {
|
if (!localConfiguration.subtitles.isEmpty()) {
|
||||||
checkState(playbackProperties.subtitles.size() == 1);
|
checkState(localConfiguration.subtitles.size() == 1);
|
||||||
MediaItem.Subtitle subtitle = playbackProperties.subtitles.get(0);
|
MediaItem.Subtitle subtitle = localConfiguration.subtitles.get(0);
|
||||||
intent.putExtra(SUBTITLE_URI_EXTRA + extrasKeySuffix, subtitle.uri.toString());
|
intent.putExtra(SUBTITLE_URI_EXTRA + extrasKeySuffix, subtitle.uri.toString());
|
||||||
intent.putExtra(SUBTITLE_MIME_TYPE_EXTRA + extrasKeySuffix, subtitle.mimeType);
|
intent.putExtra(SUBTITLE_MIME_TYPE_EXTRA + extrasKeySuffix, subtitle.mimeType);
|
||||||
intent.putExtra(SUBTITLE_LANGUAGE_EXTRA + extrasKeySuffix, subtitle.language);
|
intent.putExtra(SUBTITLE_LANGUAGE_EXTRA + extrasKeySuffix, subtitle.language);
|
||||||
|
@ -323,7 +323,7 @@ public class PlayerActivity extends AppCompatActivity
|
|||||||
}
|
}
|
||||||
|
|
||||||
MediaItem.DrmConfiguration drmConfiguration =
|
MediaItem.DrmConfiguration drmConfiguration =
|
||||||
checkNotNull(mediaItem.playbackProperties).drmConfiguration;
|
checkNotNull(mediaItem.localConfiguration).drmConfiguration;
|
||||||
if (drmConfiguration != null) {
|
if (drmConfiguration != null) {
|
||||||
if (Util.SDK_INT < 18) {
|
if (Util.SDK_INT < 18) {
|
||||||
showToast(R.string.error_drm_unsupported_before_api_18);
|
showToast(R.string.error_drm_unsupported_before_api_18);
|
||||||
@ -335,7 +335,7 @@ public class PlayerActivity extends AppCompatActivity
|
|||||||
return Collections.emptyList();
|
return Collections.emptyList();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
hasAds |= mediaItem.playbackProperties.adsConfiguration != null;
|
hasAds |= mediaItem.localConfiguration.adsConfiguration != null;
|
||||||
}
|
}
|
||||||
if (!hasAds) {
|
if (!hasAds) {
|
||||||
releaseAdsLoader();
|
releaseAdsLoader();
|
||||||
@ -496,7 +496,7 @@ public class PlayerActivity extends AppCompatActivity
|
|||||||
for (MediaItem item : IntentUtil.createMediaItemsFromIntent(intent)) {
|
for (MediaItem item : IntentUtil.createMediaItemsFromIntent(intent)) {
|
||||||
@Nullable
|
@Nullable
|
||||||
DownloadRequest downloadRequest =
|
DownloadRequest downloadRequest =
|
||||||
downloadTracker.getDownloadRequest(checkNotNull(item.playbackProperties).uri);
|
downloadTracker.getDownloadRequest(checkNotNull(item.localConfiguration).uri);
|
||||||
if (downloadRequest != null) {
|
if (downloadRequest != null) {
|
||||||
MediaItem.Builder builder = item.buildUpon();
|
MediaItem.Builder builder = item.buildUpon();
|
||||||
builder
|
builder
|
||||||
@ -506,7 +506,7 @@ public class PlayerActivity extends AppCompatActivity
|
|||||||
.setMimeType(downloadRequest.mimeType)
|
.setMimeType(downloadRequest.mimeType)
|
||||||
.setStreamKeys(downloadRequest.streamKeys);
|
.setStreamKeys(downloadRequest.streamKeys);
|
||||||
@Nullable
|
@Nullable
|
||||||
MediaItem.DrmConfiguration drmConfiguration = item.playbackProperties.drmConfiguration;
|
MediaItem.DrmConfiguration drmConfiguration = item.localConfiguration.drmConfiguration;
|
||||||
if (drmConfiguration != null) {
|
if (drmConfiguration != null) {
|
||||||
builder.setDrmConfiguration(
|
builder.setDrmConfiguration(
|
||||||
drmConfiguration
|
drmConfiguration
|
||||||
@ -526,7 +526,7 @@ public class PlayerActivity extends AppCompatActivity
|
|||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
private static Map<String, String> getDrmRequestHeaders(MediaItem item) {
|
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;
|
return drmConfiguration != null ? drmConfiguration.licenseRequestHeaders : null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -249,12 +249,12 @@ public class SampleChooserActivity extends AppCompatActivity
|
|||||||
if (playlistHolder.mediaItems.size() > 1) {
|
if (playlistHolder.mediaItems.size() > 1) {
|
||||||
return R.string.download_playlist_unsupported;
|
return R.string.download_playlist_unsupported;
|
||||||
}
|
}
|
||||||
MediaItem.PlaybackProperties playbackProperties =
|
MediaItem.LocalConfiguration localConfiguration =
|
||||||
checkNotNull(playlistHolder.mediaItems.get(0).playbackProperties);
|
checkNotNull(playlistHolder.mediaItems.get(0).localConfiguration);
|
||||||
if (playbackProperties.adsConfiguration != null) {
|
if (localConfiguration.adsConfiguration != null) {
|
||||||
return R.string.download_ads_unsupported;
|
return R.string.download_ads_unsupported;
|
||||||
}
|
}
|
||||||
String scheme = playbackProperties.uri.getScheme();
|
String scheme = localConfiguration.uri.getScheme();
|
||||||
if (!("http".equals(scheme) || "https".equals(scheme))) {
|
if (!("http".equals(scheme) || "https".equals(scheme))) {
|
||||||
return R.string.download_scheme_unsupported;
|
return R.string.download_scheme_unsupported;
|
||||||
}
|
}
|
||||||
|
@ -215,7 +215,7 @@ new PlaybackStatsListener(
|
|||||||
/* keepHistory= */ false, (eventTime, playbackStats) -> {
|
/* keepHistory= */ false, (eventTime, playbackStats) -> {
|
||||||
Object mediaTag =
|
Object mediaTag =
|
||||||
eventTime.timeline.getWindow(eventTime.windowIndex, new Window())
|
eventTime.timeline.getWindow(eventTime.windowIndex, new Window())
|
||||||
.mediaItem.playbackProperties.tag;
|
.mediaItem.localConfiguration.tag;
|
||||||
// Report playbackStats with mediaTag metadata.
|
// Report playbackStats with mediaTag metadata.
|
||||||
});
|
});
|
||||||
~~~
|
~~~
|
||||||
|
@ -124,8 +124,8 @@ custom tags, then an implementation might look like:
|
|||||||
public void onMediaItemTransition(
|
public void onMediaItemTransition(
|
||||||
@Nullable MediaItem mediaItem, @MediaItemTransitionReason int reason) {
|
@Nullable MediaItem mediaItem, @MediaItemTransitionReason int reason) {
|
||||||
@Nullable CustomMetadata metadata = null;
|
@Nullable CustomMetadata metadata = null;
|
||||||
if (mediaItem != null && mediaItem.playbackProperties != null) {
|
if (mediaItem != null && mediaItem.localConfiguration != null) {
|
||||||
metadata = (CustomMetadata) mediaItem.playbackProperties.tag;
|
metadata = (CustomMetadata) mediaItem.localConfiguration.tag;
|
||||||
}
|
}
|
||||||
updateUiForPlayingMediaItem(metadata);
|
updateUiForPlayingMediaItem(metadata);
|
||||||
}
|
}
|
||||||
|
@ -52,8 +52,8 @@ public final class DefaultMediaItemConverter implements MediaItemConverter {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public MediaQueueItem toMediaQueueItem(MediaItem mediaItem) {
|
public MediaQueueItem toMediaQueueItem(MediaItem mediaItem) {
|
||||||
Assertions.checkNotNull(mediaItem.playbackProperties);
|
Assertions.checkNotNull(mediaItem.localConfiguration);
|
||||||
if (mediaItem.playbackProperties.mimeType == null) {
|
if (mediaItem.localConfiguration.mimeType == null) {
|
||||||
throw new IllegalArgumentException("The item must specify its mimeType");
|
throw new IllegalArgumentException("The item must specify its mimeType");
|
||||||
}
|
}
|
||||||
MediaMetadata metadata = new MediaMetadata(MediaMetadata.MEDIA_TYPE_MOVIE);
|
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());
|
metadata.putString(MediaMetadata.KEY_TITLE, mediaItem.mediaMetadata.title.toString());
|
||||||
}
|
}
|
||||||
MediaInfo mediaInfo =
|
MediaInfo mediaInfo =
|
||||||
new MediaInfo.Builder(mediaItem.playbackProperties.uri.toString())
|
new MediaInfo.Builder(mediaItem.localConfiguration.uri.toString())
|
||||||
.setStreamType(MediaInfo.STREAM_TYPE_BUFFERED)
|
.setStreamType(MediaInfo.STREAM_TYPE_BUFFERED)
|
||||||
.setContentType(mediaItem.playbackProperties.mimeType)
|
.setContentType(mediaItem.localConfiguration.mimeType)
|
||||||
.setMetadata(metadata)
|
.setMetadata(metadata)
|
||||||
.setCustomData(getCustomData(mediaItem))
|
.setCustomData(getCustomData(mediaItem))
|
||||||
.build();
|
.build();
|
||||||
@ -128,15 +128,15 @@ public final class DefaultMediaItemConverter implements MediaItemConverter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static JSONObject getMediaItemJson(MediaItem mediaItem) throws JSONException {
|
private static JSONObject getMediaItemJson(MediaItem mediaItem) throws JSONException {
|
||||||
Assertions.checkNotNull(mediaItem.playbackProperties);
|
Assertions.checkNotNull(mediaItem.localConfiguration);
|
||||||
JSONObject json = new JSONObject();
|
JSONObject json = new JSONObject();
|
||||||
json.put(KEY_TITLE, mediaItem.mediaMetadata.title);
|
json.put(KEY_TITLE, mediaItem.mediaMetadata.title);
|
||||||
json.put(KEY_URI, mediaItem.playbackProperties.uri.toString());
|
json.put(KEY_URI, mediaItem.localConfiguration.uri.toString());
|
||||||
json.put(KEY_MIME_TYPE, mediaItem.playbackProperties.mimeType);
|
json.put(KEY_MIME_TYPE, mediaItem.localConfiguration.mimeType);
|
||||||
if (mediaItem.playbackProperties.drmConfiguration != null) {
|
if (mediaItem.localConfiguration.drmConfiguration != null) {
|
||||||
json.put(
|
json.put(
|
||||||
KEY_DRM_CONFIGURATION,
|
KEY_DRM_CONFIGURATION,
|
||||||
getDrmConfigurationJson(mediaItem.playbackProperties.drmConfiguration));
|
getDrmConfigurationJson(mediaItem.localConfiguration.drmConfiguration));
|
||||||
}
|
}
|
||||||
return json;
|
return json;
|
||||||
}
|
}
|
||||||
@ -152,11 +152,11 @@ public final class DefaultMediaItemConverter implements MediaItemConverter {
|
|||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
private static JSONObject getPlayerConfigJson(MediaItem mediaItem) throws JSONException {
|
private static JSONObject getPlayerConfigJson(MediaItem mediaItem) throws JSONException {
|
||||||
if (mediaItem.playbackProperties == null
|
if (mediaItem.localConfiguration == null
|
||||||
|| mediaItem.playbackProperties.drmConfiguration == null) {
|
|| mediaItem.localConfiguration.drmConfiguration == null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
MediaItem.DrmConfiguration drmConfiguration = mediaItem.playbackProperties.drmConfiguration;
|
MediaItem.DrmConfiguration drmConfiguration = mediaItem.localConfiguration.drmConfiguration;
|
||||||
|
|
||||||
String drmScheme;
|
String drmScheme;
|
||||||
if (C.WIDEVINE_UUID.equals(drmConfiguration.scheme)) {
|
if (C.WIDEVINE_UUID.equals(drmConfiguration.scheme)) {
|
||||||
|
@ -423,7 +423,7 @@ public class CastPlayerTest {
|
|||||||
.onMediaItemTransition(
|
.onMediaItemTransition(
|
||||||
mediaItemCaptor.capture(), eq(MEDIA_ITEM_TRANSITION_REASON_PLAYLIST_CHANGED));
|
mediaItemCaptor.capture(), eq(MEDIA_ITEM_TRANSITION_REASON_PLAYLIST_CHANGED));
|
||||||
inOrder.verify(mockListener, never()).onMediaItemTransition(any(), anyInt());
|
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.
|
@SuppressWarnings("deprecation") // Verifies deprecated callback being called correctly.
|
||||||
@ -533,7 +533,7 @@ public class CastPlayerTest {
|
|||||||
verify(mockRemoteMediaClient)
|
verify(mockRemoteMediaClient)
|
||||||
.queueInsertItems(
|
.queueInsertItems(
|
||||||
queueItemsArgumentCaptor.capture(),
|
queueItemsArgumentCaptor.capture(),
|
||||||
eq((int) mediaItems.get(index).playbackProperties.tag),
|
eq((int) mediaItems.get(index).localConfiguration.tag),
|
||||||
any());
|
any());
|
||||||
|
|
||||||
MediaQueueItem[] mediaQueueItems = queueItemsArgumentCaptor.getValue();
|
MediaQueueItem[] mediaQueueItems = queueItemsArgumentCaptor.getValue();
|
||||||
@ -677,7 +677,7 @@ public class CastPlayerTest {
|
|||||||
Timeline currentTimeline = castPlayer.getCurrentTimeline();
|
Timeline currentTimeline = castPlayer.getCurrentTimeline();
|
||||||
for (int i = 0; i < mediaItems.size(); i++) {
|
for (int i = 0; i < mediaItems.size(); i++) {
|
||||||
assertThat(currentTimeline.getWindow(/* windowIndex= */ i, window).uid)
|
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(
|
.onMediaItemTransition(
|
||||||
mediaItemCaptor.capture(), eq(Player.MEDIA_ITEM_TRANSITION_REASON_PLAYLIST_CHANGED));
|
mediaItemCaptor.capture(), eq(Player.MEDIA_ITEM_TRANSITION_REASON_PLAYLIST_CHANGED));
|
||||||
inOrder.verify(mockListener, never()).onMediaItemTransition(any(), anyInt());
|
inOrder.verify(mockListener, never()).onMediaItemTransition(any(), anyInt());
|
||||||
assertThat(mediaItemCaptor.getValue().playbackProperties.tag)
|
assertThat(mediaItemCaptor.getValue().localConfiguration.tag)
|
||||||
.isEqualTo(mediaItem.playbackProperties.tag);
|
.isEqualTo(mediaItem.localConfiguration.tag);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@ -801,10 +801,10 @@ public class CastPlayerTest {
|
|||||||
.onMediaItemTransition(
|
.onMediaItemTransition(
|
||||||
mediaItemCaptor.capture(), eq(Player.MEDIA_ITEM_TRANSITION_REASON_PLAYLIST_CHANGED));
|
mediaItemCaptor.capture(), eq(Player.MEDIA_ITEM_TRANSITION_REASON_PLAYLIST_CHANGED));
|
||||||
inOrder.verify(mockListener, never()).onMediaItemTransition(any(), anyInt());
|
inOrder.verify(mockListener, never()).onMediaItemTransition(any(), anyInt());
|
||||||
assertThat(mediaItemCaptor.getAllValues().get(0).playbackProperties.tag)
|
assertThat(mediaItemCaptor.getAllValues().get(0).localConfiguration.tag)
|
||||||
.isEqualTo(mediaItem1.playbackProperties.tag);
|
.isEqualTo(mediaItem1.localConfiguration.tag);
|
||||||
assertThat(mediaItemCaptor.getAllValues().get(1).playbackProperties.tag)
|
assertThat(mediaItemCaptor.getAllValues().get(1).localConfiguration.tag)
|
||||||
.isEqualTo(mediaItem2.playbackProperties.tag);
|
.isEqualTo(mediaItem2.localConfiguration.tag);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@ -886,10 +886,10 @@ public class CastPlayerTest {
|
|||||||
mediaItemCaptor.capture(), eq(Player.MEDIA_ITEM_TRANSITION_REASON_PLAYLIST_CHANGED));
|
mediaItemCaptor.capture(), eq(Player.MEDIA_ITEM_TRANSITION_REASON_PLAYLIST_CHANGED));
|
||||||
inOrder.verify(mockListener, never()).onMediaItemTransition(any(), anyInt());
|
inOrder.verify(mockListener, never()).onMediaItemTransition(any(), anyInt());
|
||||||
List<MediaItem> capturedMediaItems = mediaItemCaptor.getAllValues();
|
List<MediaItem> capturedMediaItems = mediaItemCaptor.getAllValues();
|
||||||
assertThat(capturedMediaItems.get(0).playbackProperties.tag)
|
assertThat(capturedMediaItems.get(0).localConfiguration.tag)
|
||||||
.isEqualTo(mediaItem1.playbackProperties.tag);
|
.isEqualTo(mediaItem1.localConfiguration.tag);
|
||||||
assertThat(capturedMediaItems.get(1).playbackProperties.tag)
|
assertThat(capturedMediaItems.get(1).localConfiguration.tag)
|
||||||
.isEqualTo(mediaItem2.playbackProperties.tag);
|
.isEqualTo(mediaItem2.localConfiguration.tag);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@ -1012,8 +1012,8 @@ public class CastPlayerTest {
|
|||||||
.onMediaItemTransition(
|
.onMediaItemTransition(
|
||||||
mediaItemCaptor.capture(), eq(Player.MEDIA_ITEM_TRANSITION_REASON_SEEK));
|
mediaItemCaptor.capture(), eq(Player.MEDIA_ITEM_TRANSITION_REASON_SEEK));
|
||||||
inOrder.verify(mockListener, never()).onPositionDiscontinuity(any(), any(), anyInt());
|
inOrder.verify(mockListener, never()).onPositionDiscontinuity(any(), any(), anyInt());
|
||||||
assertThat(mediaItemCaptor.getValue().playbackProperties.tag)
|
assertThat(mediaItemCaptor.getValue().localConfiguration.tag)
|
||||||
.isEqualTo(mediaItem2.playbackProperties.tag);
|
.isEqualTo(mediaItem2.localConfiguration.tag);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@ -1144,7 +1144,7 @@ public class CastPlayerTest {
|
|||||||
.onMediaItemTransition(
|
.onMediaItemTransition(
|
||||||
mediaItemCaptor.capture(), eq(Player.MEDIA_ITEM_TRANSITION_REASON_AUTO));
|
mediaItemCaptor.capture(), eq(Player.MEDIA_ITEM_TRANSITION_REASON_AUTO));
|
||||||
inOrder.verify(mockListener, never()).onMediaItemTransition(any(), anyInt());
|
inOrder.verify(mockListener, never()).onMediaItemTransition(any(), anyInt());
|
||||||
assertThat(mediaItemCaptor.getValue().playbackProperties.tag).isEqualTo(2);
|
assertThat(mediaItemCaptor.getValue().localConfiguration.tag).isEqualTo(2);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@ -1788,9 +1788,9 @@ public class CastPlayerTest {
|
|||||||
int streamType = streamTypes[i];
|
int streamType = streamTypes[i];
|
||||||
long durationMs = durationsMs[i];
|
long durationMs = durationsMs[i];
|
||||||
MediaInfo.Builder mediaInfoBuilder =
|
MediaInfo.Builder mediaInfoBuilder =
|
||||||
new MediaInfo.Builder(mediaItem.playbackProperties.uri.toString())
|
new MediaInfo.Builder(mediaItem.localConfiguration.uri.toString())
|
||||||
.setStreamType(streamType)
|
.setStreamType(streamType)
|
||||||
.setContentType(mediaItem.playbackProperties.mimeType);
|
.setContentType(mediaItem.localConfiguration.mimeType);
|
||||||
if (durationMs != C.TIME_UNSET) {
|
if (durationMs != C.TIME_UNSET) {
|
||||||
mediaInfoBuilder.setStreamDuration(durationMs);
|
mediaInfoBuilder.setStreamDuration(durationMs);
|
||||||
}
|
}
|
||||||
|
@ -96,10 +96,10 @@ public class DefaultMediaItemConverter implements MediaItemConverter {
|
|||||||
@Override
|
@Override
|
||||||
public androidx.media2.common.MediaItem convertToMedia2MediaItem(MediaItem exoPlayerMediaItem) {
|
public androidx.media2.common.MediaItem convertToMedia2MediaItem(MediaItem exoPlayerMediaItem) {
|
||||||
Assertions.checkNotNull(exoPlayerMediaItem);
|
Assertions.checkNotNull(exoPlayerMediaItem);
|
||||||
MediaItem.PlaybackProperties playbackProperties =
|
MediaItem.LocalConfiguration localConfiguration =
|
||||||
Assertions.checkNotNull(exoPlayerMediaItem.playbackProperties);
|
Assertions.checkNotNull(exoPlayerMediaItem.localConfiguration);
|
||||||
|
|
||||||
@Nullable Object tag = playbackProperties.tag;
|
@Nullable Object tag = localConfiguration.tag;
|
||||||
if (tag instanceof androidx.media2.common.MediaItem) {
|
if (tag instanceof androidx.media2.common.MediaItem) {
|
||||||
return (androidx.media2.common.MediaItem) tag;
|
return (androidx.media2.common.MediaItem) tag;
|
||||||
}
|
}
|
||||||
|
@ -272,8 +272,8 @@ public abstract class Timeline implements Bundleable {
|
|||||||
this.uid = uid;
|
this.uid = uid;
|
||||||
this.mediaItem = mediaItem != null ? mediaItem : EMPTY_MEDIA_ITEM;
|
this.mediaItem = mediaItem != null ? mediaItem : EMPTY_MEDIA_ITEM;
|
||||||
this.tag =
|
this.tag =
|
||||||
mediaItem != null && mediaItem.playbackProperties != null
|
mediaItem != null && mediaItem.localConfiguration != null
|
||||||
? mediaItem.playbackProperties.tag
|
? mediaItem.localConfiguration.tag
|
||||||
: null;
|
: null;
|
||||||
this.manifest = manifest;
|
this.manifest = manifest;
|
||||||
this.presentationStartTimeMs = presentationStartTimeMs;
|
this.presentationStartTimeMs = presentationStartTimeMs;
|
||||||
|
@ -227,14 +227,14 @@ public final class Util {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
for (MediaItem mediaItem : mediaItems) {
|
for (MediaItem mediaItem : mediaItems) {
|
||||||
if (mediaItem.playbackProperties == null) {
|
if (mediaItem.localConfiguration == null) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (isLocalFileUri(mediaItem.playbackProperties.uri)) {
|
if (isLocalFileUri(mediaItem.localConfiguration.uri)) {
|
||||||
return requestExternalStoragePermission(activity);
|
return requestExternalStoragePermission(activity);
|
||||||
}
|
}
|
||||||
for (int i = 0; i < mediaItem.playbackProperties.subtitles.size(); i++) {
|
for (int i = 0; i < mediaItem.localConfiguration.subtitles.size(); i++) {
|
||||||
if (isLocalFileUri(mediaItem.playbackProperties.subtitles.get(i).uri)) {
|
if (isLocalFileUri(mediaItem.localConfiguration.subtitles.get(i).uri)) {
|
||||||
return requestExternalStoragePermission(activity);
|
return requestExternalStoragePermission(activity);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -255,14 +255,14 @@ public final class Util {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
for (MediaItem mediaItem : mediaItems) {
|
for (MediaItem mediaItem : mediaItems) {
|
||||||
if (mediaItem.playbackProperties == null) {
|
if (mediaItem.localConfiguration == null) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (isTrafficRestricted(mediaItem.playbackProperties.uri)) {
|
if (isTrafficRestricted(mediaItem.localConfiguration.uri)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
for (int i = 0; i < mediaItem.playbackProperties.subtitles.size(); i++) {
|
for (int i = 0; i < mediaItem.localConfiguration.subtitles.size(); i++) {
|
||||||
if (isTrafficRestricted(mediaItem.playbackProperties.subtitles.get(i).uri)) {
|
if (isTrafficRestricted(mediaItem.localConfiguration.subtitles.get(i).uri)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -122,7 +122,7 @@ public class TimelineTest {
|
|||||||
otherWindow.positionInFirstPeriodUs = C.TIME_UNSET;
|
otherWindow.positionInFirstPeriodUs = C.TIME_UNSET;
|
||||||
assertThat(window).isNotEqualTo(otherWindow);
|
assertThat(window).isNotEqualTo(otherWindow);
|
||||||
|
|
||||||
window = populateWindow(mediaItem, mediaItem.playbackProperties.tag);
|
window = populateWindow(mediaItem, mediaItem.localConfiguration.tag);
|
||||||
otherWindow =
|
otherWindow =
|
||||||
otherWindow.set(
|
otherWindow.set(
|
||||||
window.uid,
|
window.uid,
|
||||||
|
@ -74,9 +74,9 @@ public final class DefaultDrmSessionManagerProvider implements DrmSessionManager
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public DrmSessionManager get(MediaItem mediaItem) {
|
public DrmSessionManager get(MediaItem mediaItem) {
|
||||||
checkNotNull(mediaItem.playbackProperties);
|
checkNotNull(mediaItem.localConfiguration);
|
||||||
@Nullable
|
@Nullable
|
||||||
MediaItem.DrmConfiguration drmConfiguration = mediaItem.playbackProperties.drmConfiguration;
|
MediaItem.DrmConfiguration drmConfiguration = mediaItem.localConfiguration.drmConfiguration;
|
||||||
if (drmConfiguration == null || Util.SDK_INT < 18) {
|
if (drmConfiguration == null || Util.SDK_INT < 18) {
|
||||||
return DrmSessionManager.DRM_UNSUPPORTED;
|
return DrmSessionManager.DRM_UNSUPPORTED;
|
||||||
}
|
}
|
||||||
|
@ -321,7 +321,7 @@ public final class DownloadHelper {
|
|||||||
* @throws IllegalStateException If the media item is of type DASH, HLS or SmoothStreaming.
|
* @throws IllegalStateException If the media item is of type DASH, HLS or SmoothStreaming.
|
||||||
*/
|
*/
|
||||||
public static DownloadHelper forMediaItem(Context context, MediaItem mediaItem) {
|
public static DownloadHelper forMediaItem(Context context, MediaItem mediaItem) {
|
||||||
Assertions.checkArgument(isProgressive(checkNotNull(mediaItem.playbackProperties)));
|
Assertions.checkArgument(isProgressive(checkNotNull(mediaItem.localConfiguration)));
|
||||||
return forMediaItem(
|
return forMediaItem(
|
||||||
mediaItem,
|
mediaItem,
|
||||||
getDefaultTrackSelectorParameters(context),
|
getDefaultTrackSelectorParameters(context),
|
||||||
@ -411,7 +411,7 @@ public final class DownloadHelper {
|
|||||||
@Nullable RenderersFactory renderersFactory,
|
@Nullable RenderersFactory renderersFactory,
|
||||||
@Nullable DataSource.Factory dataSourceFactory,
|
@Nullable DataSource.Factory dataSourceFactory,
|
||||||
@Nullable DrmSessionManager drmSessionManager) {
|
@Nullable DrmSessionManager drmSessionManager) {
|
||||||
boolean isProgressive = isProgressive(checkNotNull(mediaItem.playbackProperties));
|
boolean isProgressive = isProgressive(checkNotNull(mediaItem.localConfiguration));
|
||||||
Assertions.checkArgument(isProgressive || dataSourceFactory != null);
|
Assertions.checkArgument(isProgressive || dataSourceFactory != null);
|
||||||
return new DownloadHelper(
|
return new DownloadHelper(
|
||||||
mediaItem,
|
mediaItem,
|
||||||
@ -452,7 +452,7 @@ public final class DownloadHelper {
|
|||||||
downloadRequest.toMediaItem(), dataSourceFactory, drmSessionManager);
|
downloadRequest.toMediaItem(), dataSourceFactory, drmSessionManager);
|
||||||
}
|
}
|
||||||
|
|
||||||
private final MediaItem.PlaybackProperties playbackProperties;
|
private final MediaItem.LocalConfiguration localConfiguration;
|
||||||
@Nullable private final MediaSource mediaSource;
|
@Nullable private final MediaSource mediaSource;
|
||||||
private final DefaultTrackSelector trackSelector;
|
private final DefaultTrackSelector trackSelector;
|
||||||
private final RendererCapabilities[] rendererCapabilities;
|
private final RendererCapabilities[] rendererCapabilities;
|
||||||
@ -485,7 +485,7 @@ public final class DownloadHelper {
|
|||||||
@Nullable MediaSource mediaSource,
|
@Nullable MediaSource mediaSource,
|
||||||
DefaultTrackSelector.Parameters trackSelectorParameters,
|
DefaultTrackSelector.Parameters trackSelectorParameters,
|
||||||
RendererCapabilities[] rendererCapabilities) {
|
RendererCapabilities[] rendererCapabilities) {
|
||||||
this.playbackProperties = checkNotNull(mediaItem.playbackProperties);
|
this.localConfiguration = checkNotNull(mediaItem.localConfiguration);
|
||||||
this.mediaSource = mediaSource;
|
this.mediaSource = mediaSource;
|
||||||
this.trackSelector =
|
this.trackSelector =
|
||||||
new DefaultTrackSelector(trackSelectorParameters, new DownloadTrackSelection.Factory());
|
new DefaultTrackSelector(trackSelectorParameters, new DownloadTrackSelection.Factory());
|
||||||
@ -726,7 +726,7 @@ public final class DownloadHelper {
|
|||||||
* @return The built {@link DownloadRequest}.
|
* @return The built {@link DownloadRequest}.
|
||||||
*/
|
*/
|
||||||
public DownloadRequest getDownloadRequest(@Nullable byte[] data) {
|
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) {
|
public DownloadRequest getDownloadRequest(String id, @Nullable byte[] data) {
|
||||||
DownloadRequest.Builder requestBuilder =
|
DownloadRequest.Builder requestBuilder =
|
||||||
new DownloadRequest.Builder(id, playbackProperties.uri)
|
new DownloadRequest.Builder(id, localConfiguration.uri)
|
||||||
.setMimeType(playbackProperties.mimeType)
|
.setMimeType(localConfiguration.mimeType)
|
||||||
.setKeySetId(
|
.setKeySetId(
|
||||||
playbackProperties.drmConfiguration != null
|
localConfiguration.drmConfiguration != null
|
||||||
? playbackProperties.drmConfiguration.getKeySetId()
|
? localConfiguration.drmConfiguration.getKeySetId()
|
||||||
: null)
|
: null)
|
||||||
.setCustomCacheKey(playbackProperties.customCacheKey)
|
.setCustomCacheKey(localConfiguration.customCacheKey)
|
||||||
.setData(data);
|
.setData(data);
|
||||||
if (mediaSource == null) {
|
if (mediaSource == null) {
|
||||||
return requestBuilder.build();
|
return requestBuilder.build();
|
||||||
@ -896,9 +896,9 @@ public final class DownloadHelper {
|
|||||||
.createMediaSource(mediaItem);
|
.createMediaSource(mediaItem);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static boolean isProgressive(MediaItem.PlaybackProperties playbackProperties) {
|
private static boolean isProgressive(MediaItem.LocalConfiguration localConfiguration) {
|
||||||
return Util.inferContentTypeForUriAndMimeType(
|
return Util.inferContentTypeForUriAndMimeType(
|
||||||
playbackProperties.uri, playbackProperties.mimeType)
|
localConfiguration.uri, localConfiguration.mimeType)
|
||||||
== C.TYPE_OTHER;
|
== C.TYPE_OTHER;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -69,11 +69,11 @@ public final class ProgressiveDownloader implements Downloader {
|
|||||||
public ProgressiveDownloader(
|
public ProgressiveDownloader(
|
||||||
MediaItem mediaItem, CacheDataSource.Factory cacheDataSourceFactory, Executor executor) {
|
MediaItem mediaItem, CacheDataSource.Factory cacheDataSourceFactory, Executor executor) {
|
||||||
this.executor = Assertions.checkNotNull(executor);
|
this.executor = Assertions.checkNotNull(executor);
|
||||||
Assertions.checkNotNull(mediaItem.playbackProperties);
|
Assertions.checkNotNull(mediaItem.localConfiguration);
|
||||||
dataSpec =
|
dataSpec =
|
||||||
new DataSpec.Builder()
|
new DataSpec.Builder()
|
||||||
.setUri(mediaItem.playbackProperties.uri)
|
.setUri(mediaItem.localConfiguration.uri)
|
||||||
.setKey(mediaItem.playbackProperties.customCacheKey)
|
.setKey(mediaItem.localConfiguration.customCacheKey)
|
||||||
.setFlags(DataSpec.FLAG_ALLOW_CACHE_FRAGMENTATION)
|
.setFlags(DataSpec.FLAG_ALLOW_CACHE_FRAGMENTATION)
|
||||||
.build();
|
.build();
|
||||||
dataSource = cacheDataSourceFactory.createDataSourceForDownloading();
|
dataSource = cacheDataSourceFactory.createDataSourceForDownloading();
|
||||||
|
@ -110,10 +110,10 @@ public abstract class SegmentDownloader<M extends FilterableManifest<M>> impleme
|
|||||||
Parser<M> manifestParser,
|
Parser<M> manifestParser,
|
||||||
CacheDataSource.Factory cacheDataSourceFactory,
|
CacheDataSource.Factory cacheDataSourceFactory,
|
||||||
Executor executor) {
|
Executor executor) {
|
||||||
checkNotNull(mediaItem.playbackProperties);
|
checkNotNull(mediaItem.localConfiguration);
|
||||||
this.manifestDataSpec = getCompressibleDataSpec(mediaItem.playbackProperties.uri);
|
this.manifestDataSpec = getCompressibleDataSpec(mediaItem.localConfiguration.uri);
|
||||||
this.manifestParser = manifestParser;
|
this.manifestParser = manifestParser;
|
||||||
this.streamKeys = new ArrayList<>(mediaItem.playbackProperties.streamKeys);
|
this.streamKeys = new ArrayList<>(mediaItem.localConfiguration.streamKeys);
|
||||||
this.cacheDataSourceFactory = cacheDataSourceFactory;
|
this.cacheDataSourceFactory = cacheDataSourceFactory;
|
||||||
this.executor = executor;
|
this.executor = executor;
|
||||||
cache = Assertions.checkNotNull(cacheDataSourceFactory.getCache());
|
cache = Assertions.checkNotNull(cacheDataSourceFactory.getCache());
|
||||||
|
@ -54,23 +54,23 @@ import java.util.List;
|
|||||||
* factories:
|
* factories:
|
||||||
*
|
*
|
||||||
* <ul>
|
* <ul>
|
||||||
* <li>{@code DashMediaSource.Factory} if the item's {@link MediaItem.PlaybackProperties#uri uri}
|
* <li>{@code DashMediaSource.Factory} if the item's {@link MediaItem.LocalConfiguration#uri uri}
|
||||||
* ends in '.mpd' or if its {@link MediaItem.PlaybackProperties#mimeType mimeType field} is
|
* ends in '.mpd' or if its {@link MediaItem.LocalConfiguration#mimeType mimeType field} is
|
||||||
* explicitly set to {@link MimeTypes#APPLICATION_MPD} (Requires the <a
|
* explicitly set to {@link MimeTypes#APPLICATION_MPD} (Requires the <a
|
||||||
* href="https://exoplayer.dev/hello-world.html#add-exoplayer-modules">exoplayer-dash module
|
* href="https://exoplayer.dev/hello-world.html#add-exoplayer-modules">exoplayer-dash module
|
||||||
* to be added</a> to the app).
|
* to be added</a> to the app).
|
||||||
* <li>{@code HlsMediaSource.Factory} if the item's {@link MediaItem.PlaybackProperties#uri uri}
|
* <li>{@code HlsMediaSource.Factory} if the item's {@link MediaItem.LocalConfiguration#uri uri}
|
||||||
* ends in '.m3u8' or if its {@link MediaItem.PlaybackProperties#mimeType mimeType field} is
|
* ends in '.m3u8' or if its {@link MediaItem.LocalConfiguration#mimeType mimeType field} is
|
||||||
* explicitly set to {@link MimeTypes#APPLICATION_M3U8} (Requires the <a
|
* explicitly set to {@link MimeTypes#APPLICATION_M3U8} (Requires the <a
|
||||||
* href="https://exoplayer.dev/hello-world.html#add-exoplayer-modules">exoplayer-hls module to
|
* href="https://exoplayer.dev/hello-world.html#add-exoplayer-modules">exoplayer-hls module to
|
||||||
* be added</a> to the app).
|
* be added</a> to the app).
|
||||||
* <li>{@code SsMediaSource.Factory} if the item's {@link MediaItem.PlaybackProperties#uri uri}
|
* <li>{@code SsMediaSource.Factory} if the item's {@link MediaItem.LocalConfiguration#uri uri}
|
||||||
* ends in '.ism', '.ism/Manifest' or if its {@link MediaItem.PlaybackProperties#mimeType
|
* 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
|
* mimeType field} is explicitly set to {@link MimeTypes#APPLICATION_SS} (Requires the <a
|
||||||
* href="https://exoplayer.dev/hello-world.html#add-exoplayer-modules">
|
* href="https://exoplayer.dev/hello-world.html#add-exoplayer-modules">
|
||||||
* exoplayer-smoothstreaming module to be added</a> to the app).
|
* exoplayer-smoothstreaming module to be added</a> to the app).
|
||||||
* <li>{@link ProgressiveMediaSource.Factory} serves as a fallback if the item's {@link
|
* <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
|
* required extractor by using the {@link DefaultExtractorsFactory} or the {@link
|
||||||
* ExtractorsFactory} provided in the constructor. An {@link UnrecognizedInputFormatException}
|
* ExtractorsFactory} provided in the constructor. An {@link UnrecognizedInputFormatException}
|
||||||
* is thrown if none of the available extractors can read the stream.
|
* 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>
|
* <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
|
* configuration}, {@link #setAdsLoaderProvider} and {@link #setAdViewProvider} need to be called to
|
||||||
* configure the factory with the required providers.
|
* 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
|
* 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 {
|
public interface AdsLoaderProvider {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns an {@link AdsLoader} for the given {@link
|
* 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.
|
* loader is available for the given ads configuration.
|
||||||
*
|
*
|
||||||
* <p>This method is called each time a {@link MediaSource} is created from a {@link MediaItem}
|
* <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
|
@Nullable
|
||||||
AdsLoader getAdsLoader(MediaItem.AdsConfiguration adsConfiguration);
|
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
|
* 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}.
|
* SingleSampleMediaSource}.
|
||||||
*
|
*
|
||||||
* <p>This method is experimental, and will be renamed or removed in a future release.
|
* <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
|
* 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.
|
* @param adsLoaderProvider A provider for {@link AdsLoader} instances.
|
||||||
* @return This factory, for convenience.
|
* @return This factory, for convenience.
|
||||||
@ -341,11 +341,11 @@ public final class DefaultMediaSourceFactory implements MediaSourceFactory {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public MediaSource createMediaSource(MediaItem mediaItem) {
|
public MediaSource createMediaSource(MediaItem mediaItem) {
|
||||||
Assertions.checkNotNull(mediaItem.playbackProperties);
|
Assertions.checkNotNull(mediaItem.localConfiguration);
|
||||||
@C.ContentType
|
@C.ContentType
|
||||||
int type =
|
int type =
|
||||||
Util.inferContentTypeForUriAndMimeType(
|
Util.inferContentTypeForUriAndMimeType(
|
||||||
mediaItem.playbackProperties.uri, mediaItem.playbackProperties.mimeType);
|
mediaItem.localConfiguration.uri, mediaItem.localConfiguration.mimeType);
|
||||||
@Nullable MediaSourceFactory mediaSourceFactory = mediaSourceFactories.get(type);
|
@Nullable MediaSourceFactory mediaSourceFactory = mediaSourceFactories.get(type);
|
||||||
Assertions.checkNotNull(
|
Assertions.checkNotNull(
|
||||||
mediaSourceFactory, "No suitable media source factory found for content type: " + type);
|
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);
|
MediaSource mediaSource = mediaSourceFactory.createMediaSource(mediaItem);
|
||||||
|
|
||||||
List<MediaItem.Subtitle> subtitles = castNonNull(mediaItem.playbackProperties).subtitles;
|
List<MediaItem.Subtitle> subtitles = castNonNull(mediaItem.localConfiguration).subtitles;
|
||||||
if (!subtitles.isEmpty()) {
|
if (!subtitles.isEmpty()) {
|
||||||
MediaSource[] mediaSources = new MediaSource[subtitles.size() + 1];
|
MediaSource[] mediaSources = new MediaSource[subtitles.size() + 1];
|
||||||
mediaSources[0] = mediaSource;
|
mediaSources[0] = mediaSource;
|
||||||
@ -434,9 +434,9 @@ public final class DefaultMediaSourceFactory implements MediaSourceFactory {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private MediaSource maybeWrapWithAdsMediaSource(MediaItem mediaItem, MediaSource mediaSource) {
|
private MediaSource maybeWrapWithAdsMediaSource(MediaItem mediaItem, MediaSource mediaSource) {
|
||||||
Assertions.checkNotNull(mediaItem.playbackProperties);
|
Assertions.checkNotNull(mediaItem.localConfiguration);
|
||||||
@Nullable
|
@Nullable
|
||||||
MediaItem.AdsConfiguration adsConfiguration = mediaItem.playbackProperties.adsConfiguration;
|
MediaItem.AdsConfiguration adsConfiguration = mediaItem.localConfiguration.adsConfiguration;
|
||||||
if (adsConfiguration == null) {
|
if (adsConfiguration == null) {
|
||||||
return mediaSource;
|
return mediaSource;
|
||||||
}
|
}
|
||||||
@ -460,7 +460,7 @@ public final class DefaultMediaSourceFactory implements MediaSourceFactory {
|
|||||||
/* adsId= */ adsConfiguration.adsId != null
|
/* adsId= */ adsConfiguration.adsId != null
|
||||||
? adsConfiguration.adsId
|
? adsConfiguration.adsId
|
||||||
: ImmutableList.of(
|
: ImmutableList.of(
|
||||||
mediaItem.mediaId, mediaItem.playbackProperties.uri, adsConfiguration.adTagUri),
|
mediaItem.mediaId, mediaItem.localConfiguration.uri, adsConfiguration.adTagUri),
|
||||||
/* adMediaSourceFactory= */ this,
|
/* adMediaSourceFactory= */ this,
|
||||||
adsLoader,
|
adsLoader,
|
||||||
adViewProvider);
|
adViewProvider);
|
||||||
|
@ -34,7 +34,7 @@ import java.util.List;
|
|||||||
/** Factory for creating {@link MediaSource MediaSources} from {@link MediaItem MediaItems}. */
|
/** Factory for creating {@link MediaSource MediaSources} from {@link MediaItem MediaItems}. */
|
||||||
public interface MediaSourceFactory {
|
public interface MediaSourceFactory {
|
||||||
|
|
||||||
/** @deprecated Use {@link MediaItem.PlaybackProperties#streamKeys} instead. */
|
/** @deprecated Use {@link MediaItem.LocalConfiguration#streamKeys} instead. */
|
||||||
@Deprecated
|
@Deprecated
|
||||||
default MediaSourceFactory setStreamKeys(@Nullable List<StreamKey> streamKeys) {
|
default MediaSourceFactory setStreamKeys(@Nullable List<StreamKey> streamKeys) {
|
||||||
return this;
|
return this;
|
||||||
|
@ -215,14 +215,14 @@ public final class ProgressiveMediaSource extends BaseMediaSource
|
|||||||
*
|
*
|
||||||
* @param mediaItem The {@link MediaItem}.
|
* @param mediaItem The {@link MediaItem}.
|
||||||
* @return The new {@link ProgressiveMediaSource}.
|
* @return The new {@link ProgressiveMediaSource}.
|
||||||
* @throws NullPointerException if {@link MediaItem#playbackProperties} is {@code null}.
|
* @throws NullPointerException if {@link MediaItem#localConfiguration} is {@code null}.
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public ProgressiveMediaSource createMediaSource(MediaItem mediaItem) {
|
public ProgressiveMediaSource createMediaSource(MediaItem mediaItem) {
|
||||||
checkNotNull(mediaItem.playbackProperties);
|
checkNotNull(mediaItem.localConfiguration);
|
||||||
boolean needsTag = mediaItem.playbackProperties.tag == null && tag != null;
|
boolean needsTag = mediaItem.localConfiguration.tag == null && tag != null;
|
||||||
boolean needsCustomCacheKey =
|
boolean needsCustomCacheKey =
|
||||||
mediaItem.playbackProperties.customCacheKey == null && customCacheKey != null;
|
mediaItem.localConfiguration.customCacheKey == null && customCacheKey != null;
|
||||||
if (needsTag && needsCustomCacheKey) {
|
if (needsTag && needsCustomCacheKey) {
|
||||||
mediaItem = mediaItem.buildUpon().setTag(tag).setCustomCacheKey(customCacheKey).build();
|
mediaItem = mediaItem.buildUpon().setTag(tag).setCustomCacheKey(customCacheKey).build();
|
||||||
} else if (needsTag) {
|
} else if (needsTag) {
|
||||||
@ -252,7 +252,7 @@ public final class ProgressiveMediaSource extends BaseMediaSource
|
|||||||
public static final int DEFAULT_LOADING_CHECK_INTERVAL_BYTES = 1024 * 1024;
|
public static final int DEFAULT_LOADING_CHECK_INTERVAL_BYTES = 1024 * 1024;
|
||||||
|
|
||||||
private final MediaItem mediaItem;
|
private final MediaItem mediaItem;
|
||||||
private final MediaItem.PlaybackProperties playbackProperties;
|
private final MediaItem.LocalConfiguration localConfiguration;
|
||||||
private final DataSource.Factory dataSourceFactory;
|
private final DataSource.Factory dataSourceFactory;
|
||||||
private final ProgressiveMediaExtractor.Factory progressiveMediaExtractorFactory;
|
private final ProgressiveMediaExtractor.Factory progressiveMediaExtractorFactory;
|
||||||
private final DrmSessionManager drmSessionManager;
|
private final DrmSessionManager drmSessionManager;
|
||||||
@ -272,7 +272,7 @@ public final class ProgressiveMediaSource extends BaseMediaSource
|
|||||||
DrmSessionManager drmSessionManager,
|
DrmSessionManager drmSessionManager,
|
||||||
LoadErrorHandlingPolicy loadableLoadErrorHandlingPolicy,
|
LoadErrorHandlingPolicy loadableLoadErrorHandlingPolicy,
|
||||||
int continueLoadingCheckIntervalBytes) {
|
int continueLoadingCheckIntervalBytes) {
|
||||||
this.playbackProperties = checkNotNull(mediaItem.playbackProperties);
|
this.localConfiguration = checkNotNull(mediaItem.localConfiguration);
|
||||||
this.mediaItem = mediaItem;
|
this.mediaItem = mediaItem;
|
||||||
this.dataSourceFactory = dataSourceFactory;
|
this.dataSourceFactory = dataSourceFactory;
|
||||||
this.progressiveMediaExtractorFactory = progressiveMediaExtractorFactory;
|
this.progressiveMediaExtractorFactory = progressiveMediaExtractorFactory;
|
||||||
@ -307,7 +307,7 @@ public final class ProgressiveMediaSource extends BaseMediaSource
|
|||||||
dataSource.addTransferListener(transferListener);
|
dataSource.addTransferListener(transferListener);
|
||||||
}
|
}
|
||||||
return new ProgressiveMediaPeriod(
|
return new ProgressiveMediaPeriod(
|
||||||
playbackProperties.uri,
|
localConfiguration.uri,
|
||||||
dataSource,
|
dataSource,
|
||||||
progressiveMediaExtractorFactory.createProgressiveMediaExtractor(),
|
progressiveMediaExtractorFactory.createProgressiveMediaExtractor(),
|
||||||
drmSessionManager,
|
drmSessionManager,
|
||||||
@ -316,7 +316,7 @@ public final class ProgressiveMediaSource extends BaseMediaSource
|
|||||||
createEventDispatcher(id),
|
createEventDispatcher(id),
|
||||||
this,
|
this,
|
||||||
allocator,
|
allocator,
|
||||||
playbackProperties.customCacheKey,
|
localConfiguration.customCacheKey,
|
||||||
continueLoadingCheckIntervalBytes);
|
continueLoadingCheckIntervalBytes);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -58,8 +58,7 @@ public final class SilenceMediaSource extends BaseMediaSource {
|
|||||||
/**
|
/**
|
||||||
* Sets a tag for the media source which will be published in the {@link
|
* 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.Timeline} of the source as {@link
|
||||||
* com.google.android.exoplayer2.MediaItem.PlaybackProperties#tag
|
* MediaItem.LocalConfiguration#tag Window#mediaItem.localConfiguration.tag}.
|
||||||
* Window#mediaItem.playbackProperties.tag}.
|
|
||||||
*
|
*
|
||||||
* @param tag A tag for the media source.
|
* @param tag A tag for the media source.
|
||||||
* @return This factory, for convenience.
|
* @return This factory, for convenience.
|
||||||
|
@ -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
|
* 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
|
* as {@link MediaItem.LocalConfiguration#tag Window#mediaItem.localConfiguration.tag}.
|
||||||
* Window#mediaItem.playbackProperties.tag}.
|
|
||||||
*
|
*
|
||||||
* @param tag A tag for the media source.
|
* @param tag A tag for the media source.
|
||||||
* @return This factory, for convenience.
|
* @return This factory, for convenience.
|
||||||
|
@ -314,10 +314,10 @@ public final class AdsMediaSource extends CompositeMediaSource<MediaPeriodId> {
|
|||||||
MediaItem.Builder adMediaItem = new MediaItem.Builder().setUri(adUri);
|
MediaItem.Builder adMediaItem = new MediaItem.Builder().setUri(adUri);
|
||||||
// Propagate the content's DRM config into the ad media source.
|
// Propagate the content's DRM config into the ad media source.
|
||||||
@Nullable
|
@Nullable
|
||||||
MediaItem.PlaybackProperties contentPlaybackProperties =
|
MediaItem.LocalConfiguration contentLocalConfiguration =
|
||||||
contentMediaSource.getMediaItem().playbackProperties;
|
contentMediaSource.getMediaItem().localConfiguration;
|
||||||
if (contentPlaybackProperties != null) {
|
if (contentLocalConfiguration != null) {
|
||||||
adMediaItem.setDrmConfiguration(contentPlaybackProperties.drmConfiguration);
|
adMediaItem.setDrmConfiguration(contentLocalConfiguration.drmConfiguration);
|
||||||
}
|
}
|
||||||
MediaSource adMediaSource = adMediaSourceFactory.createMediaSource(adMediaItem.build());
|
MediaSource adMediaSource = adMediaSourceFactory.createMediaSource(adMediaItem.build());
|
||||||
adMediaSourceHolder.initializeWithMediaSource(adMediaSource, adUri);
|
adMediaSourceHolder.initializeWithMediaSource(adMediaSource, adUri);
|
||||||
|
@ -7953,11 +7953,11 @@ public final class ExoPlayerTest {
|
|||||||
.blockUntilActionScheduleFinished(TIMEOUT_MS)
|
.blockUntilActionScheduleFinished(TIMEOUT_MS)
|
||||||
.blockUntilEnded(TIMEOUT_MS);
|
.blockUntilEnded(TIMEOUT_MS);
|
||||||
|
|
||||||
assertThat(currentMediaItems.get(0).playbackProperties.uri.toString())
|
assertThat(currentMediaItems.get(0).localConfiguration.uri.toString())
|
||||||
.isEqualTo("http://foo.bar/fake1");
|
.isEqualTo("http://foo.bar/fake1");
|
||||||
assertThat(currentMediaItems.get(1).playbackProperties.uri.toString())
|
assertThat(currentMediaItems.get(1).localConfiguration.uri.toString())
|
||||||
.isEqualTo("http://foo.bar/fake2");
|
.isEqualTo("http://foo.bar/fake2");
|
||||||
assertThat(currentMediaItems.get(2).playbackProperties.uri.toString())
|
assertThat(currentMediaItems.get(2).localConfiguration.uri.toString())
|
||||||
.isEqualTo("http://foo.bar/fake3");
|
.isEqualTo("http://foo.bar/fake3");
|
||||||
assertThat(mediaItemsInTimeline).containsExactlyElementsIn(currentMediaItems);
|
assertThat(mediaItemsInTimeline).containsExactlyElementsIn(currentMediaItems);
|
||||||
}
|
}
|
||||||
@ -9767,7 +9767,7 @@ public final class ExoPlayerTest {
|
|||||||
assertThat(oldPositionInfo.periodUid).isEqualTo(newPositionInfo.periodUid);
|
assertThat(oldPositionInfo.periodUid).isEqualTo(newPositionInfo.periodUid);
|
||||||
assertThat(oldPositionInfo.periodIndex).isEqualTo(newPositionInfo.periodIndex);
|
assertThat(oldPositionInfo.periodIndex).isEqualTo(newPositionInfo.periodIndex);
|
||||||
assertThat(oldPositionInfo.windowIndex).isEqualTo(newPositionInfo.windowIndex);
|
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.windowUid).isEqualTo(newPositionInfo.windowUid);
|
||||||
assertThat(oldPositionInfo.positionMs).isEqualTo(10_000);
|
assertThat(oldPositionInfo.positionMs).isEqualTo(10_000);
|
||||||
assertThat(oldPositionInfo.contentPositionMs).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.periodUid).isEqualTo(newPositionInfo.periodUid);
|
||||||
assertThat(oldPositionInfo.periodIndex).isEqualTo(newPositionInfo.periodIndex);
|
assertThat(oldPositionInfo.periodIndex).isEqualTo(newPositionInfo.periodIndex);
|
||||||
assertThat(oldPositionInfo.windowIndex).isEqualTo(newPositionInfo.windowIndex);
|
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.windowUid).isEqualTo(newPositionInfo.windowUid);
|
||||||
assertThat(oldPositionInfo.positionMs).isEqualTo(10_000);
|
assertThat(oldPositionInfo.positionMs).isEqualTo(10_000);
|
||||||
assertThat(oldPositionInfo.contentPositionMs).isEqualTo(10_000);
|
assertThat(oldPositionInfo.contentPositionMs).isEqualTo(10_000);
|
||||||
@ -9809,7 +9809,7 @@ public final class ExoPlayerTest {
|
|||||||
oldPositionInfo = oldPosition.getValue();
|
oldPositionInfo = oldPosition.getValue();
|
||||||
newPositionInfo = newPosition.getValue();
|
newPositionInfo = newPosition.getValue();
|
||||||
assertThat(oldPositionInfo.windowIndex).isEqualTo(1);
|
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.windowUid).isNotEqualTo(newPositionInfo.windowUid);
|
||||||
assertThat(oldPositionInfo.positionMs).isEqualTo(20_000);
|
assertThat(oldPositionInfo.positionMs).isEqualTo(20_000);
|
||||||
assertThat(oldPositionInfo.contentPositionMs).isEqualTo(20_000);
|
assertThat(oldPositionInfo.contentPositionMs).isEqualTo(20_000);
|
||||||
@ -10131,7 +10131,7 @@ public final class ExoPlayerTest {
|
|||||||
assertThat(oldPosition.getValue().windowUid)
|
assertThat(oldPosition.getValue().windowUid)
|
||||||
.isEqualTo(player.getCurrentTimeline().getWindow(0, window).uid);
|
.isEqualTo(player.getCurrentTimeline().getWindow(0, window).uid);
|
||||||
assertThat(oldPosition.getValue().windowIndex).isEqualTo(0);
|
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().positionMs).isEqualTo(10_000);
|
||||||
assertThat(oldPosition.getValue().contentPositionMs).isEqualTo(10_000);
|
assertThat(oldPosition.getValue().contentPositionMs).isEqualTo(10_000);
|
||||||
assertThat(oldPosition.getValue().adGroupIndex).isEqualTo(-1);
|
assertThat(oldPosition.getValue().adGroupIndex).isEqualTo(-1);
|
||||||
@ -10139,7 +10139,7 @@ public final class ExoPlayerTest {
|
|||||||
assertThat(newPosition.getValue().windowUid)
|
assertThat(newPosition.getValue().windowUid)
|
||||||
.isEqualTo(player.getCurrentTimeline().getWindow(1, window).uid);
|
.isEqualTo(player.getCurrentTimeline().getWindow(1, window).uid);
|
||||||
assertThat(newPosition.getValue().windowIndex).isEqualTo(1);
|
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().positionMs).isEqualTo(0);
|
||||||
assertThat(newPosition.getValue().contentPositionMs).isEqualTo(0);
|
assertThat(newPosition.getValue().contentPositionMs).isEqualTo(0);
|
||||||
assertThat(newPosition.getValue().adGroupIndex).isEqualTo(-1);
|
assertThat(newPosition.getValue().adGroupIndex).isEqualTo(-1);
|
||||||
@ -10159,13 +10159,13 @@ public final class ExoPlayerTest {
|
|||||||
assertThat(newPosition.getValue().windowUid)
|
assertThat(newPosition.getValue().windowUid)
|
||||||
.isEqualTo(player.getCurrentTimeline().getWindow(2, window).uid);
|
.isEqualTo(player.getCurrentTimeline().getWindow(2, window).uid);
|
||||||
assertThat(oldPosition.getValue().windowIndex).isEqualTo(1);
|
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().positionMs).isEqualTo(15_000);
|
||||||
assertThat(oldPosition.getValue().contentPositionMs).isEqualTo(15_000);
|
assertThat(oldPosition.getValue().contentPositionMs).isEqualTo(15_000);
|
||||||
assertThat(oldPosition.getValue().adGroupIndex).isEqualTo(-1);
|
assertThat(oldPosition.getValue().adGroupIndex).isEqualTo(-1);
|
||||||
assertThat(oldPosition.getValue().adIndexInAdGroup).isEqualTo(-1);
|
assertThat(oldPosition.getValue().adIndexInAdGroup).isEqualTo(-1);
|
||||||
assertThat(newPosition.getValue().windowIndex).isEqualTo(2);
|
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().positionMs).isEqualTo(0);
|
||||||
assertThat(newPosition.getValue().contentPositionMs).isEqualTo(0);
|
assertThat(newPosition.getValue().contentPositionMs).isEqualTo(0);
|
||||||
assertThat(newPosition.getValue().adGroupIndex).isEqualTo(-1);
|
assertThat(newPosition.getValue().adGroupIndex).isEqualTo(-1);
|
||||||
@ -10179,14 +10179,14 @@ public final class ExoPlayerTest {
|
|||||||
newPosition.capture(),
|
newPosition.capture(),
|
||||||
eq(Player.DISCONTINUITY_REASON_AUTO_TRANSITION));
|
eq(Player.DISCONTINUITY_REASON_AUTO_TRANSITION));
|
||||||
assertThat(oldPosition.getValue().windowIndex).isEqualTo(2);
|
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().windowUid).isEqualTo(lastNewWindowUid);
|
||||||
assertThat(oldPosition.getValue().positionMs).isEqualTo(20_000);
|
assertThat(oldPosition.getValue().positionMs).isEqualTo(20_000);
|
||||||
assertThat(oldPosition.getValue().contentPositionMs).isEqualTo(20_000);
|
assertThat(oldPosition.getValue().contentPositionMs).isEqualTo(20_000);
|
||||||
assertThat(oldPosition.getValue().adGroupIndex).isEqualTo(-1);
|
assertThat(oldPosition.getValue().adGroupIndex).isEqualTo(-1);
|
||||||
assertThat(oldPosition.getValue().adIndexInAdGroup).isEqualTo(-1);
|
assertThat(oldPosition.getValue().adIndexInAdGroup).isEqualTo(-1);
|
||||||
assertThat(newPosition.getValue().windowIndex).isEqualTo(2);
|
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().positionMs).isEqualTo(0);
|
||||||
assertThat(newPosition.getValue().contentPositionMs).isEqualTo(20_000);
|
assertThat(newPosition.getValue().contentPositionMs).isEqualTo(20_000);
|
||||||
assertThat(newPosition.getValue().adGroupIndex).isEqualTo(0);
|
assertThat(newPosition.getValue().adGroupIndex).isEqualTo(0);
|
||||||
@ -10201,14 +10201,14 @@ public final class ExoPlayerTest {
|
|||||||
eq(Player.DISCONTINUITY_REASON_AUTO_TRANSITION));
|
eq(Player.DISCONTINUITY_REASON_AUTO_TRANSITION));
|
||||||
assertThat(oldPosition.getValue().windowUid).isEqualTo(lastNewWindowUid);
|
assertThat(oldPosition.getValue().windowUid).isEqualTo(lastNewWindowUid);
|
||||||
assertThat(oldPosition.getValue().windowIndex).isEqualTo(2);
|
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().positionMs).isEqualTo(5_000);
|
||||||
assertThat(oldPosition.getValue().contentPositionMs).isEqualTo(20_000);
|
assertThat(oldPosition.getValue().contentPositionMs).isEqualTo(20_000);
|
||||||
assertThat(oldPosition.getValue().adGroupIndex).isEqualTo(0);
|
assertThat(oldPosition.getValue().adGroupIndex).isEqualTo(0);
|
||||||
assertThat(oldPosition.getValue().adIndexInAdGroup).isEqualTo(0);
|
assertThat(oldPosition.getValue().adIndexInAdGroup).isEqualTo(0);
|
||||||
assertThat(newPosition.getValue().windowUid).isEqualTo(oldPosition.getValue().windowUid);
|
assertThat(newPosition.getValue().windowUid).isEqualTo(oldPosition.getValue().windowUid);
|
||||||
assertThat(newPosition.getValue().windowIndex).isEqualTo(2);
|
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().positionMs).isEqualTo(19_999);
|
||||||
assertThat(newPosition.getValue().contentPositionMs).isEqualTo(19_999);
|
assertThat(newPosition.getValue().contentPositionMs).isEqualTo(19_999);
|
||||||
assertThat(newPosition.getValue().adGroupIndex).isEqualTo(-1);
|
assertThat(newPosition.getValue().adGroupIndex).isEqualTo(-1);
|
||||||
@ -10226,14 +10226,14 @@ public final class ExoPlayerTest {
|
|||||||
.onMediaItemTransition(any(), eq(Player.MEDIA_ITEM_TRANSITION_REASON_AUTO));
|
.onMediaItemTransition(any(), eq(Player.MEDIA_ITEM_TRANSITION_REASON_AUTO));
|
||||||
assertThat(oldPosition.getValue().windowUid).isEqualTo(lastNewWindowUid);
|
assertThat(oldPosition.getValue().windowUid).isEqualTo(lastNewWindowUid);
|
||||||
assertThat(oldPosition.getValue().windowIndex).isEqualTo(2);
|
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().positionMs).isEqualTo(20_000);
|
||||||
assertThat(oldPosition.getValue().contentPositionMs).isEqualTo(20_000);
|
assertThat(oldPosition.getValue().contentPositionMs).isEqualTo(20_000);
|
||||||
assertThat(oldPosition.getValue().adGroupIndex).isEqualTo(-1);
|
assertThat(oldPosition.getValue().adGroupIndex).isEqualTo(-1);
|
||||||
assertThat(oldPosition.getValue().adIndexInAdGroup).isEqualTo(-1);
|
assertThat(oldPosition.getValue().adIndexInAdGroup).isEqualTo(-1);
|
||||||
assertThat(newPosition.getValue().windowUid).isNotEqualTo(oldPosition.getValue().windowUid);
|
assertThat(newPosition.getValue().windowUid).isNotEqualTo(oldPosition.getValue().windowUid);
|
||||||
assertThat(newPosition.getValue().windowIndex).isEqualTo(3);
|
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().positionMs).isEqualTo(0);
|
||||||
assertThat(newPosition.getValue().contentPositionMs).isEqualTo(0);
|
assertThat(newPosition.getValue().contentPositionMs).isEqualTo(0);
|
||||||
assertThat(newPosition.getValue().adGroupIndex).isEqualTo(0);
|
assertThat(newPosition.getValue().adGroupIndex).isEqualTo(0);
|
||||||
@ -10248,14 +10248,14 @@ public final class ExoPlayerTest {
|
|||||||
eq(Player.DISCONTINUITY_REASON_AUTO_TRANSITION));
|
eq(Player.DISCONTINUITY_REASON_AUTO_TRANSITION));
|
||||||
assertThat(oldPosition.getValue().windowUid).isEqualTo(lastNewWindowUid);
|
assertThat(oldPosition.getValue().windowUid).isEqualTo(lastNewWindowUid);
|
||||||
assertThat(oldPosition.getValue().windowIndex).isEqualTo(3);
|
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().positionMs).isEqualTo(5_000);
|
||||||
assertThat(oldPosition.getValue().contentPositionMs).isEqualTo(0);
|
assertThat(oldPosition.getValue().contentPositionMs).isEqualTo(0);
|
||||||
assertThat(oldPosition.getValue().adGroupIndex).isEqualTo(0);
|
assertThat(oldPosition.getValue().adGroupIndex).isEqualTo(0);
|
||||||
assertThat(oldPosition.getValue().adIndexInAdGroup).isEqualTo(0);
|
assertThat(oldPosition.getValue().adIndexInAdGroup).isEqualTo(0);
|
||||||
assertThat(newPosition.getValue().windowUid).isEqualTo(oldPosition.getValue().windowUid);
|
assertThat(newPosition.getValue().windowUid).isEqualTo(oldPosition.getValue().windowUid);
|
||||||
assertThat(newPosition.getValue().windowIndex).isEqualTo(3);
|
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().positionMs).isEqualTo(0);
|
||||||
assertThat(newPosition.getValue().contentPositionMs).isEqualTo(0);
|
assertThat(newPosition.getValue().contentPositionMs).isEqualTo(0);
|
||||||
assertThat(newPosition.getValue().adGroupIndex).isEqualTo(-1);
|
assertThat(newPosition.getValue().adGroupIndex).isEqualTo(-1);
|
||||||
@ -10379,14 +10379,14 @@ public final class ExoPlayerTest {
|
|||||||
any(), newPositionArgumentCaptor.capture(), eq(Player.DISCONTINUITY_REASON_REMOVE));
|
any(), newPositionArgumentCaptor.capture(), eq(Player.DISCONTINUITY_REASON_REMOVE));
|
||||||
// The state at auto-transition event time.
|
// The state at auto-transition event time.
|
||||||
assertThat(mediaItemCount[0]).isEqualTo(2);
|
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.
|
// The masked state after id-1 has been removed.
|
||||||
assertThat(mediaItemCount[1]).isEqualTo(1);
|
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.
|
// 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");
|
.isEqualTo("id-1");
|
||||||
assertThat(newPositionArgumentCaptor.getAllValues().get(1).mediaItem.playbackProperties.tag)
|
assertThat(newPositionArgumentCaptor.getAllValues().get(1).mediaItem.localConfiguration.tag)
|
||||||
.isEqualTo("id-0");
|
.isEqualTo("id-0");
|
||||||
player.release();
|
player.release();
|
||||||
}
|
}
|
||||||
@ -10717,20 +10717,20 @@ public final class ExoPlayerTest {
|
|||||||
List<Player.PositionInfo> newPositions = newPosition.getAllValues();
|
List<Player.PositionInfo> newPositions = newPosition.getAllValues();
|
||||||
assertThat(oldPositions.get(0).windowUid).isEqualTo(newPositions.get(0).windowUid);
|
assertThat(oldPositions.get(0).windowUid).isEqualTo(newPositions.get(0).windowUid);
|
||||||
assertThat(newPositions.get(0).windowIndex).isEqualTo(0);
|
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).positionMs).isIn(Range.closed(4980L, 5000L));
|
||||||
assertThat(oldPositions.get(0).contentPositionMs).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).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).positionMs).isEqualTo(7_000);
|
||||||
assertThat(newPositions.get(0).contentPositionMs).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).windowUid).isNotEqualTo(newPositions.get(1).windowUid);
|
||||||
assertThat(oldPositions.get(1).windowIndex).isEqualTo(0);
|
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).positionMs).isEqualTo(7_000);
|
||||||
assertThat(oldPositions.get(1).contentPositionMs).isEqualTo(7_000);
|
assertThat(oldPositions.get(1).contentPositionMs).isEqualTo(7_000);
|
||||||
assertThat(newPositions.get(1).windowIndex).isEqualTo(1);
|
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).positionMs).isEqualTo(1_000);
|
||||||
assertThat(newPositions.get(1).contentPositionMs).isEqualTo(1_000);
|
assertThat(newPositions.get(1).contentPositionMs).isEqualTo(1_000);
|
||||||
player.release();
|
player.release();
|
||||||
@ -11032,7 +11032,7 @@ public final class ExoPlayerTest {
|
|||||||
List<Player.PositionInfo> oldPositions = oldPosition.getAllValues();
|
List<Player.PositionInfo> oldPositions = oldPosition.getAllValues();
|
||||||
List<Player.PositionInfo> newPositions = newPosition.getAllValues();
|
List<Player.PositionInfo> newPositions = newPosition.getAllValues();
|
||||||
assertThat(oldPositions.get(0).windowIndex).isEqualTo(0);
|
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).positionMs).isIn(Range.closed(4980L, 5000L));
|
||||||
assertThat(oldPositions.get(0).contentPositionMs).isIn(Range.closed(4980L, 5000L));
|
assertThat(oldPositions.get(0).contentPositionMs).isIn(Range.closed(4980L, 5000L));
|
||||||
assertThat(newPositions.get(0).windowUid).isNull();
|
assertThat(newPositions.get(0).windowUid).isNull();
|
||||||
|
@ -400,10 +400,10 @@ public class DownloadHelperTest {
|
|||||||
|
|
||||||
DownloadRequest downloadRequest = downloadHelper.getDownloadRequest(data);
|
DownloadRequest downloadRequest = downloadHelper.getDownloadRequest(data);
|
||||||
|
|
||||||
assertThat(downloadRequest.uri).isEqualTo(testMediaItem.playbackProperties.uri);
|
assertThat(downloadRequest.uri).isEqualTo(testMediaItem.localConfiguration.uri);
|
||||||
assertThat(downloadRequest.mimeType).isEqualTo(testMediaItem.playbackProperties.mimeType);
|
assertThat(downloadRequest.mimeType).isEqualTo(testMediaItem.localConfiguration.mimeType);
|
||||||
assertThat(downloadRequest.customCacheKey)
|
assertThat(downloadRequest.customCacheKey)
|
||||||
.isEqualTo(testMediaItem.playbackProperties.customCacheKey);
|
.isEqualTo(testMediaItem.localConfiguration.customCacheKey);
|
||||||
assertThat(downloadRequest.data).isEqualTo(data);
|
assertThat(downloadRequest.data).isEqualTo(data);
|
||||||
assertThat(downloadRequest.streamKeys)
|
assertThat(downloadRequest.streamKeys)
|
||||||
.containsExactly(
|
.containsExactly(
|
||||||
|
@ -38,8 +38,8 @@ public class SilenceMediaSourceTest {
|
|||||||
|
|
||||||
assertThat(mediaItem).isNotNull();
|
assertThat(mediaItem).isNotNull();
|
||||||
assertThat(mediaItem.mediaId).isEqualTo(SilenceMediaSource.MEDIA_ID);
|
assertThat(mediaItem.mediaId).isEqualTo(SilenceMediaSource.MEDIA_ID);
|
||||||
assertThat(mediaItem.playbackProperties.uri).isEqualTo(Uri.EMPTY);
|
assertThat(mediaItem.localConfiguration.uri).isEqualTo(Uri.EMPTY);
|
||||||
assertThat(mediaItem.playbackProperties.mimeType).isEqualTo(MimeTypes.AUDIO_RAW);
|
assertThat(mediaItem.localConfiguration.mimeType).isEqualTo(MimeTypes.AUDIO_RAW);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@ -49,7 +49,7 @@ public class SilenceMediaSourceTest {
|
|||||||
SilenceMediaSource mediaSource =
|
SilenceMediaSource mediaSource =
|
||||||
new SilenceMediaSource.Factory().setTag(tag).setDurationUs(1_000_000).createMediaSource();
|
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
|
@Test
|
||||||
@ -59,7 +59,7 @@ public class SilenceMediaSourceTest {
|
|||||||
SilenceMediaSource mediaSource =
|
SilenceMediaSource mediaSource =
|
||||||
new SilenceMediaSource.Factory().setTag(tag).setDurationUs(1_000_000).createMediaSource();
|
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
|
@Test
|
||||||
@ -82,7 +82,7 @@ public class SilenceMediaSourceTest {
|
|||||||
|
|
||||||
assertThat(mediaItem).isNotNull();
|
assertThat(mediaItem).isNotNull();
|
||||||
assertThat(mediaItem.mediaId).isEqualTo(SilenceMediaSource.MEDIA_ID);
|
assertThat(mediaItem.mediaId).isEqualTo(SilenceMediaSource.MEDIA_ID);
|
||||||
assertThat(mediaSource.getMediaItem().playbackProperties.uri).isEqualTo(Uri.EMPTY);
|
assertThat(mediaSource.getMediaItem().localConfiguration.uri).isEqualTo(Uri.EMPTY);
|
||||||
assertThat(mediaItem.playbackProperties.mimeType).isEqualTo(MimeTypes.AUDIO_RAW);
|
assertThat(mediaItem.localConfiguration.mimeType).isEqualTo(MimeTypes.AUDIO_RAW);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -101,7 +101,7 @@ public final class SinglePeriodTimelineTest {
|
|||||||
new MediaItem.Builder().setUri(Uri.EMPTY).setTag(null).build());
|
new MediaItem.Builder().setUri(Uri.EMPTY).setTag(null).build());
|
||||||
|
|
||||||
assertThat(timeline.getWindow(/* windowIndex= */ 0, window).tag).isNull();
|
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();
|
.isNull();
|
||||||
assertThat(timeline.getPeriod(/* periodIndex= */ 0, period, /* setIds= */ false).id).isNull();
|
assertThat(timeline.getPeriod(/* periodIndex= */ 0, period, /* setIds= */ false).id).isNull();
|
||||||
assertThat(timeline.getPeriod(/* periodIndex= */ 0, period, /* setIds= */ true).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);
|
Window window = timeline.getWindow(/* windowIndex= */ 0, this.window);
|
||||||
|
|
||||||
assertThat(window.mediaItem).isEqualTo(mediaItem);
|
assertThat(window.mediaItem).isEqualTo(mediaItem);
|
||||||
assertThat(window.tag).isEqualTo(mediaItem.playbackProperties.tag);
|
assertThat(window.tag).isEqualTo(mediaItem.localConfiguration.tag);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@ -315,10 +315,10 @@ public final class DashMediaSource extends BaseMediaSource {
|
|||||||
Assertions.checkArgument(!manifest.dynamic);
|
Assertions.checkArgument(!manifest.dynamic);
|
||||||
MediaItem.Builder mediaItemBuilder =
|
MediaItem.Builder mediaItemBuilder =
|
||||||
mediaItem.buildUpon().setMimeType(MimeTypes.APPLICATION_MPD);
|
mediaItem.buildUpon().setMimeType(MimeTypes.APPLICATION_MPD);
|
||||||
if (mediaItem.playbackProperties == null) {
|
if (mediaItem.localConfiguration == null) {
|
||||||
mediaItemBuilder.setUri(Uri.EMPTY);
|
mediaItemBuilder.setUri(Uri.EMPTY);
|
||||||
}
|
}
|
||||||
if (mediaItem.playbackProperties == null || mediaItem.playbackProperties.tag == null) {
|
if (mediaItem.localConfiguration == null || mediaItem.localConfiguration.tag == null) {
|
||||||
mediaItemBuilder.setTag(tag);
|
mediaItemBuilder.setTag(tag);
|
||||||
}
|
}
|
||||||
if (mediaItem.liveConfiguration.targetOffsetMs == C.TIME_UNSET) {
|
if (mediaItem.liveConfiguration.targetOffsetMs == C.TIME_UNSET) {
|
||||||
@ -329,12 +329,12 @@ public final class DashMediaSource extends BaseMediaSource {
|
|||||||
.setTargetOffsetMs(targetLiveOffsetOverrideMs)
|
.setTargetOffsetMs(targetLiveOffsetOverrideMs)
|
||||||
.build());
|
.build());
|
||||||
}
|
}
|
||||||
if (mediaItem.playbackProperties == null
|
if (mediaItem.localConfiguration == null
|
||||||
|| mediaItem.playbackProperties.streamKeys.isEmpty()) {
|
|| mediaItem.localConfiguration.streamKeys.isEmpty()) {
|
||||||
mediaItemBuilder.setStreamKeys(streamKeys);
|
mediaItemBuilder.setStreamKeys(streamKeys);
|
||||||
}
|
}
|
||||||
mediaItem = mediaItemBuilder.build();
|
mediaItem = mediaItemBuilder.build();
|
||||||
if (!checkNotNull(mediaItem.playbackProperties).streamKeys.isEmpty()) {
|
if (!checkNotNull(mediaItem.localConfiguration).streamKeys.isEmpty()) {
|
||||||
manifest = manifest.copy(streamKeys);
|
manifest = manifest.copy(streamKeys);
|
||||||
}
|
}
|
||||||
return new DashMediaSource(
|
return new DashMediaSource(
|
||||||
@ -367,26 +367,26 @@ public final class DashMediaSource extends BaseMediaSource {
|
|||||||
*
|
*
|
||||||
* @param mediaItem The media item of the dash stream.
|
* @param mediaItem The media item of the dash stream.
|
||||||
* @return The new {@link DashMediaSource}.
|
* @return The new {@link DashMediaSource}.
|
||||||
* @throws NullPointerException if {@link MediaItem#playbackProperties} is {@code null}.
|
* @throws NullPointerException if {@link MediaItem#localConfiguration} is {@code null}.
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public DashMediaSource createMediaSource(MediaItem mediaItem) {
|
public DashMediaSource createMediaSource(MediaItem mediaItem) {
|
||||||
checkNotNull(mediaItem.playbackProperties);
|
checkNotNull(mediaItem.localConfiguration);
|
||||||
@Nullable ParsingLoadable.Parser<? extends DashManifest> manifestParser = this.manifestParser;
|
@Nullable ParsingLoadable.Parser<? extends DashManifest> manifestParser = this.manifestParser;
|
||||||
if (manifestParser == null) {
|
if (manifestParser == null) {
|
||||||
manifestParser = new DashManifestParser();
|
manifestParser = new DashManifestParser();
|
||||||
}
|
}
|
||||||
List<StreamKey> streamKeys =
|
List<StreamKey> streamKeys =
|
||||||
mediaItem.playbackProperties.streamKeys.isEmpty()
|
mediaItem.localConfiguration.streamKeys.isEmpty()
|
||||||
? this.streamKeys
|
? this.streamKeys
|
||||||
: mediaItem.playbackProperties.streamKeys;
|
: mediaItem.localConfiguration.streamKeys;
|
||||||
if (!streamKeys.isEmpty()) {
|
if (!streamKeys.isEmpty()) {
|
||||||
manifestParser = new FilteringManifestParser<>(manifestParser, streamKeys);
|
manifestParser = new FilteringManifestParser<>(manifestParser, streamKeys);
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean needsTag = mediaItem.playbackProperties.tag == null && tag != null;
|
boolean needsTag = mediaItem.localConfiguration.tag == null && tag != null;
|
||||||
boolean needsStreamKeys =
|
boolean needsStreamKeys =
|
||||||
mediaItem.playbackProperties.streamKeys.isEmpty() && !streamKeys.isEmpty();
|
mediaItem.localConfiguration.streamKeys.isEmpty() && !streamKeys.isEmpty();
|
||||||
boolean needsTargetLiveOffset =
|
boolean needsTargetLiveOffset =
|
||||||
mediaItem.liveConfiguration.targetOffsetMs == C.TIME_UNSET
|
mediaItem.liveConfiguration.targetOffsetMs == C.TIME_UNSET
|
||||||
&& targetLiveOffsetOverrideMs != C.TIME_UNSET;
|
&& targetLiveOffsetOverrideMs != C.TIME_UNSET;
|
||||||
@ -501,8 +501,8 @@ public final class DashMediaSource extends BaseMediaSource {
|
|||||||
long fallbackTargetLiveOffsetMs) {
|
long fallbackTargetLiveOffsetMs) {
|
||||||
this.mediaItem = mediaItem;
|
this.mediaItem = mediaItem;
|
||||||
this.liveConfiguration = mediaItem.liveConfiguration;
|
this.liveConfiguration = mediaItem.liveConfiguration;
|
||||||
this.manifestUri = checkNotNull(mediaItem.playbackProperties).uri;
|
this.manifestUri = checkNotNull(mediaItem.localConfiguration).uri;
|
||||||
this.initialManifestUri = mediaItem.playbackProperties.uri;
|
this.initialManifestUri = mediaItem.localConfiguration.uri;
|
||||||
this.manifest = manifest;
|
this.manifest = manifest;
|
||||||
this.manifestDataSourceFactory = manifestDataSourceFactory;
|
this.manifestDataSourceFactory = manifestDataSourceFactory;
|
||||||
this.manifestParser = manifestParser;
|
this.manifestParser = manifestParser;
|
||||||
|
@ -111,9 +111,9 @@ public final class DashMediaSourceTest {
|
|||||||
|
|
||||||
MediaItem dashMediaItem = factory.createMediaSource(mediaItem).getMediaItem();
|
MediaItem dashMediaItem = factory.createMediaSource(mediaItem).getMediaItem();
|
||||||
|
|
||||||
assertThat(dashMediaItem.playbackProperties).isNotNull();
|
assertThat(dashMediaItem.localConfiguration).isNotNull();
|
||||||
assertThat(dashMediaItem.playbackProperties.uri).isEqualTo(mediaItem.playbackProperties.uri);
|
assertThat(dashMediaItem.localConfiguration.uri).isEqualTo(mediaItem.localConfiguration.uri);
|
||||||
assertThat(dashMediaItem.playbackProperties.tag).isEqualTo(tag);
|
assertThat(dashMediaItem.localConfiguration.tag).isEqualTo(tag);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Tests backwards compatibility
|
// Tests backwards compatibility
|
||||||
@ -129,9 +129,9 @@ public final class DashMediaSourceTest {
|
|||||||
|
|
||||||
MediaItem dashMediaItem = factory.createMediaSource(mediaItem).getMediaItem();
|
MediaItem dashMediaItem = factory.createMediaSource(mediaItem).getMediaItem();
|
||||||
|
|
||||||
assertThat(dashMediaItem.playbackProperties).isNotNull();
|
assertThat(dashMediaItem.localConfiguration).isNotNull();
|
||||||
assertThat(dashMediaItem.playbackProperties.uri).isEqualTo(mediaItem.playbackProperties.uri);
|
assertThat(dashMediaItem.localConfiguration.uri).isEqualTo(mediaItem.localConfiguration.uri);
|
||||||
assertThat(dashMediaItem.playbackProperties.tag).isEqualTo(mediaItemTag);
|
assertThat(dashMediaItem.localConfiguration.tag).isEqualTo(mediaItemTag);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Tests backwards compatibility
|
// Tests backwards compatibility
|
||||||
@ -146,9 +146,9 @@ public final class DashMediaSourceTest {
|
|||||||
|
|
||||||
MediaItem dashMediaItem = factory.createMediaSource(mediaItem).getMediaItem();
|
MediaItem dashMediaItem = factory.createMediaSource(mediaItem).getMediaItem();
|
||||||
|
|
||||||
assertThat(dashMediaItem.playbackProperties).isNotNull();
|
assertThat(dashMediaItem.localConfiguration).isNotNull();
|
||||||
assertThat(dashMediaItem.playbackProperties.uri).isEqualTo(mediaItem.playbackProperties.uri);
|
assertThat(dashMediaItem.localConfiguration.uri).isEqualTo(mediaItem.localConfiguration.uri);
|
||||||
assertThat(dashMediaItem.playbackProperties.streamKeys).containsExactly(streamKey);
|
assertThat(dashMediaItem.localConfiguration.streamKeys).containsExactly(streamKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Tests backwards compatibility
|
// Tests backwards compatibility
|
||||||
@ -168,9 +168,9 @@ public final class DashMediaSourceTest {
|
|||||||
|
|
||||||
MediaItem dashMediaItem = factory.createMediaSource(mediaItem).getMediaItem();
|
MediaItem dashMediaItem = factory.createMediaSource(mediaItem).getMediaItem();
|
||||||
|
|
||||||
assertThat(dashMediaItem.playbackProperties).isNotNull();
|
assertThat(dashMediaItem.localConfiguration).isNotNull();
|
||||||
assertThat(dashMediaItem.playbackProperties.uri).isEqualTo(mediaItem.playbackProperties.uri);
|
assertThat(dashMediaItem.localConfiguration.uri).isEqualTo(mediaItem.localConfiguration.uri);
|
||||||
assertThat(dashMediaItem.playbackProperties.streamKeys).containsExactly(mediaItemStreamKey);
|
assertThat(dashMediaItem.localConfiguration.streamKeys).containsExactly(mediaItemStreamKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@ -60,7 +60,7 @@ public class DefaultMediaSourceFactoryTest {
|
|||||||
|
|
||||||
MediaSource mediaSource = defaultMediaSourceFactory.createMediaSource(mediaItem);
|
MediaSource mediaSource = defaultMediaSourceFactory.createMediaSource(mediaItem);
|
||||||
|
|
||||||
assertThat(mediaSource.getMediaItem().playbackProperties.tag).isEqualTo(tag);
|
assertThat(mediaSource.getMediaItem().localConfiguration.tag).isEqualTo(tag);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@ -365,24 +365,24 @@ public final class HlsMediaSource extends BaseMediaSource
|
|||||||
*
|
*
|
||||||
* @param mediaItem The {@link MediaItem}.
|
* @param mediaItem The {@link MediaItem}.
|
||||||
* @return The new {@link HlsMediaSource}.
|
* @return The new {@link HlsMediaSource}.
|
||||||
* @throws NullPointerException if {@link MediaItem#playbackProperties} is {@code null}.
|
* @throws NullPointerException if {@link MediaItem#localConfiguration} is {@code null}.
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public HlsMediaSource createMediaSource(MediaItem mediaItem) {
|
public HlsMediaSource createMediaSource(MediaItem mediaItem) {
|
||||||
checkNotNull(mediaItem.playbackProperties);
|
checkNotNull(mediaItem.localConfiguration);
|
||||||
HlsPlaylistParserFactory playlistParserFactory = this.playlistParserFactory;
|
HlsPlaylistParserFactory playlistParserFactory = this.playlistParserFactory;
|
||||||
List<StreamKey> streamKeys =
|
List<StreamKey> streamKeys =
|
||||||
mediaItem.playbackProperties.streamKeys.isEmpty()
|
mediaItem.localConfiguration.streamKeys.isEmpty()
|
||||||
? this.streamKeys
|
? this.streamKeys
|
||||||
: mediaItem.playbackProperties.streamKeys;
|
: mediaItem.localConfiguration.streamKeys;
|
||||||
if (!streamKeys.isEmpty()) {
|
if (!streamKeys.isEmpty()) {
|
||||||
playlistParserFactory =
|
playlistParserFactory =
|
||||||
new FilteringHlsPlaylistParserFactory(playlistParserFactory, streamKeys);
|
new FilteringHlsPlaylistParserFactory(playlistParserFactory, streamKeys);
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean needsTag = mediaItem.playbackProperties.tag == null && tag != null;
|
boolean needsTag = mediaItem.localConfiguration.tag == null && tag != null;
|
||||||
boolean needsStreamKeys =
|
boolean needsStreamKeys =
|
||||||
mediaItem.playbackProperties.streamKeys.isEmpty() && !streamKeys.isEmpty();
|
mediaItem.localConfiguration.streamKeys.isEmpty() && !streamKeys.isEmpty();
|
||||||
if (needsTag && needsStreamKeys) {
|
if (needsTag && needsStreamKeys) {
|
||||||
mediaItem = mediaItem.buildUpon().setTag(tag).setStreamKeys(streamKeys).build();
|
mediaItem = mediaItem.buildUpon().setTag(tag).setStreamKeys(streamKeys).build();
|
||||||
} else if (needsTag) {
|
} else if (needsTag) {
|
||||||
@ -412,7 +412,7 @@ public final class HlsMediaSource extends BaseMediaSource
|
|||||||
}
|
}
|
||||||
|
|
||||||
private final HlsExtractorFactory extractorFactory;
|
private final HlsExtractorFactory extractorFactory;
|
||||||
private final MediaItem.PlaybackProperties playbackProperties;
|
private final MediaItem.LocalConfiguration localConfiguration;
|
||||||
private final HlsDataSourceFactory dataSourceFactory;
|
private final HlsDataSourceFactory dataSourceFactory;
|
||||||
private final CompositeSequenceableLoaderFactory compositeSequenceableLoaderFactory;
|
private final CompositeSequenceableLoaderFactory compositeSequenceableLoaderFactory;
|
||||||
private final DrmSessionManager drmSessionManager;
|
private final DrmSessionManager drmSessionManager;
|
||||||
@ -439,7 +439,7 @@ public final class HlsMediaSource extends BaseMediaSource
|
|||||||
boolean allowChunklessPreparation,
|
boolean allowChunklessPreparation,
|
||||||
@MetadataType int metadataType,
|
@MetadataType int metadataType,
|
||||||
boolean useSessionKeys) {
|
boolean useSessionKeys) {
|
||||||
this.playbackProperties = checkNotNull(mediaItem.playbackProperties);
|
this.localConfiguration = checkNotNull(mediaItem.localConfiguration);
|
||||||
this.mediaItem = mediaItem;
|
this.mediaItem = mediaItem;
|
||||||
this.liveConfiguration = mediaItem.liveConfiguration;
|
this.liveConfiguration = mediaItem.liveConfiguration;
|
||||||
this.dataSourceFactory = dataSourceFactory;
|
this.dataSourceFactory = dataSourceFactory;
|
||||||
@ -465,7 +465,8 @@ public final class HlsMediaSource extends BaseMediaSource
|
|||||||
drmSessionManager.prepare();
|
drmSessionManager.prepare();
|
||||||
MediaSourceEventListener.EventDispatcher eventDispatcher =
|
MediaSourceEventListener.EventDispatcher eventDispatcher =
|
||||||
createEventDispatcher(/* mediaPeriodId= */ null);
|
createEventDispatcher(/* mediaPeriodId= */ null);
|
||||||
playlistTracker.start(playbackProperties.uri, eventDispatcher, /* listener= */ this);
|
playlistTracker.start(
|
||||||
|
localConfiguration.uri, eventDispatcher, /* primaryPlaylistListener= */ this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -60,7 +60,7 @@ public class DefaultMediaSourceFactoryTest {
|
|||||||
|
|
||||||
MediaSource mediaSource = defaultMediaSourceFactory.createMediaSource(mediaItem);
|
MediaSource mediaSource = defaultMediaSourceFactory.createMediaSource(mediaItem);
|
||||||
|
|
||||||
assertThat(mediaSource.getMediaItem().playbackProperties.tag).isEqualTo(tag);
|
assertThat(mediaSource.getMediaItem().localConfiguration.tag).isEqualTo(tag);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@ -59,9 +59,9 @@ public class HlsMediaSourceTest {
|
|||||||
|
|
||||||
MediaItem hlsMediaItem = factory.createMediaSource(mediaItem).getMediaItem();
|
MediaItem hlsMediaItem = factory.createMediaSource(mediaItem).getMediaItem();
|
||||||
|
|
||||||
assertThat(hlsMediaItem.playbackProperties).isNotNull();
|
assertThat(hlsMediaItem.localConfiguration).isNotNull();
|
||||||
assertThat(hlsMediaItem.playbackProperties.uri).isEqualTo(mediaItem.playbackProperties.uri);
|
assertThat(hlsMediaItem.localConfiguration.uri).isEqualTo(mediaItem.localConfiguration.uri);
|
||||||
assertThat(hlsMediaItem.playbackProperties.tag).isEqualTo(tag);
|
assertThat(hlsMediaItem.localConfiguration.tag).isEqualTo(tag);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Tests backwards compatibility
|
// Tests backwards compatibility
|
||||||
@ -77,9 +77,9 @@ public class HlsMediaSourceTest {
|
|||||||
|
|
||||||
MediaItem hlsMediaItem = factory.createMediaSource(mediaItem).getMediaItem();
|
MediaItem hlsMediaItem = factory.createMediaSource(mediaItem).getMediaItem();
|
||||||
|
|
||||||
assertThat(hlsMediaItem.playbackProperties).isNotNull();
|
assertThat(hlsMediaItem.localConfiguration).isNotNull();
|
||||||
assertThat(hlsMediaItem.playbackProperties.uri).isEqualTo(mediaItem.playbackProperties.uri);
|
assertThat(hlsMediaItem.localConfiguration.uri).isEqualTo(mediaItem.localConfiguration.uri);
|
||||||
assertThat(hlsMediaItem.playbackProperties.tag).isEqualTo(mediaItemTag);
|
assertThat(hlsMediaItem.localConfiguration.tag).isEqualTo(mediaItemTag);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Tests backwards compatibility
|
// Tests backwards compatibility
|
||||||
@ -94,9 +94,9 @@ public class HlsMediaSourceTest {
|
|||||||
|
|
||||||
MediaItem hlsMediaItem = factory.createMediaSource(mediaItem).getMediaItem();
|
MediaItem hlsMediaItem = factory.createMediaSource(mediaItem).getMediaItem();
|
||||||
|
|
||||||
assertThat(hlsMediaItem.playbackProperties).isNotNull();
|
assertThat(hlsMediaItem.localConfiguration).isNotNull();
|
||||||
assertThat(hlsMediaItem.playbackProperties.uri).isEqualTo(mediaItem.playbackProperties.uri);
|
assertThat(hlsMediaItem.localConfiguration.uri).isEqualTo(mediaItem.localConfiguration.uri);
|
||||||
assertThat(hlsMediaItem.playbackProperties.streamKeys).containsExactly(streamKey);
|
assertThat(hlsMediaItem.localConfiguration.streamKeys).containsExactly(streamKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Tests backwards compatibility
|
// Tests backwards compatibility
|
||||||
@ -116,9 +116,9 @@ public class HlsMediaSourceTest {
|
|||||||
|
|
||||||
MediaItem hlsMediaItem = factory.createMediaSource(mediaItem).getMediaItem();
|
MediaItem hlsMediaItem = factory.createMediaSource(mediaItem).getMediaItem();
|
||||||
|
|
||||||
assertThat(hlsMediaItem.playbackProperties).isNotNull();
|
assertThat(hlsMediaItem.localConfiguration).isNotNull();
|
||||||
assertThat(hlsMediaItem.playbackProperties.uri).isEqualTo(mediaItem.playbackProperties.uri);
|
assertThat(hlsMediaItem.localConfiguration.uri).isEqualTo(mediaItem.localConfiguration.uri);
|
||||||
assertThat(hlsMediaItem.playbackProperties.streamKeys).containsExactly(mediaItemStreamKey);
|
assertThat(hlsMediaItem.localConfiguration.streamKeys).containsExactly(mediaItemStreamKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@ -191,11 +191,11 @@ public final class RtspMediaSource extends BaseMediaSource {
|
|||||||
*
|
*
|
||||||
* @param mediaItem The {@link MediaItem}.
|
* @param mediaItem The {@link MediaItem}.
|
||||||
* @return The new {@link RtspMediaSource}.
|
* @return The new {@link RtspMediaSource}.
|
||||||
* @throws NullPointerException if {@link MediaItem#playbackProperties} is {@code null}.
|
* @throws NullPointerException if {@link MediaItem#localConfiguration} is {@code null}.
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public RtspMediaSource createMediaSource(MediaItem mediaItem) {
|
public RtspMediaSource createMediaSource(MediaItem mediaItem) {
|
||||||
checkNotNull(mediaItem.playbackProperties);
|
checkNotNull(mediaItem.localConfiguration);
|
||||||
return new RtspMediaSource(
|
return new RtspMediaSource(
|
||||||
mediaItem,
|
mediaItem,
|
||||||
forceUseRtpTcp
|
forceUseRtpTcp
|
||||||
@ -241,7 +241,7 @@ public final class RtspMediaSource extends BaseMediaSource {
|
|||||||
this.mediaItem = mediaItem;
|
this.mediaItem = mediaItem;
|
||||||
this.rtpDataChannelFactory = rtpDataChannelFactory;
|
this.rtpDataChannelFactory = rtpDataChannelFactory;
|
||||||
this.userAgent = userAgent;
|
this.userAgent = userAgent;
|
||||||
this.uri = checkNotNull(this.mediaItem.playbackProperties).uri;
|
this.uri = checkNotNull(this.mediaItem.localConfiguration).uri;
|
||||||
this.debugLoggingEnabled = debugLoggingEnabled;
|
this.debugLoggingEnabled = debugLoggingEnabled;
|
||||||
this.timelineDurationUs = C.TIME_UNSET;
|
this.timelineDurationUs = C.TIME_UNSET;
|
||||||
this.timelineIsPlaceholder = true;
|
this.timelineIsPlaceholder = true;
|
||||||
|
@ -277,20 +277,20 @@ public final class SsMediaSource extends BaseMediaSource
|
|||||||
public SsMediaSource createMediaSource(SsManifest manifest, MediaItem mediaItem) {
|
public SsMediaSource createMediaSource(SsManifest manifest, MediaItem mediaItem) {
|
||||||
Assertions.checkArgument(!manifest.isLive);
|
Assertions.checkArgument(!manifest.isLive);
|
||||||
List<StreamKey> streamKeys =
|
List<StreamKey> streamKeys =
|
||||||
mediaItem.playbackProperties != null && !mediaItem.playbackProperties.streamKeys.isEmpty()
|
mediaItem.localConfiguration != null && !mediaItem.localConfiguration.streamKeys.isEmpty()
|
||||||
? mediaItem.playbackProperties.streamKeys
|
? mediaItem.localConfiguration.streamKeys
|
||||||
: this.streamKeys;
|
: this.streamKeys;
|
||||||
if (!streamKeys.isEmpty()) {
|
if (!streamKeys.isEmpty()) {
|
||||||
manifest = manifest.copy(streamKeys);
|
manifest = manifest.copy(streamKeys);
|
||||||
}
|
}
|
||||||
boolean hasUri = mediaItem.playbackProperties != null;
|
boolean hasUri = mediaItem.localConfiguration != null;
|
||||||
boolean hasTag = hasUri && mediaItem.playbackProperties.tag != null;
|
boolean hasTag = hasUri && mediaItem.localConfiguration.tag != null;
|
||||||
mediaItem =
|
mediaItem =
|
||||||
mediaItem
|
mediaItem
|
||||||
.buildUpon()
|
.buildUpon()
|
||||||
.setMimeType(MimeTypes.APPLICATION_SS)
|
.setMimeType(MimeTypes.APPLICATION_SS)
|
||||||
.setUri(hasUri ? mediaItem.playbackProperties.uri : Uri.EMPTY)
|
.setUri(hasUri ? mediaItem.localConfiguration.uri : Uri.EMPTY)
|
||||||
.setTag(hasTag ? mediaItem.playbackProperties.tag : tag)
|
.setTag(hasTag ? mediaItem.localConfiguration.tag : tag)
|
||||||
.setStreamKeys(streamKeys)
|
.setStreamKeys(streamKeys)
|
||||||
.build();
|
.build();
|
||||||
return new SsMediaSource(
|
return new SsMediaSource(
|
||||||
@ -310,26 +310,26 @@ public final class SsMediaSource extends BaseMediaSource
|
|||||||
*
|
*
|
||||||
* @param mediaItem The {@link MediaItem}.
|
* @param mediaItem The {@link MediaItem}.
|
||||||
* @return The new {@link SsMediaSource}.
|
* @return The new {@link SsMediaSource}.
|
||||||
* @throws NullPointerException if {@link MediaItem#playbackProperties} is {@code null}.
|
* @throws NullPointerException if {@link MediaItem#localConfiguration} is {@code null}.
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public SsMediaSource createMediaSource(MediaItem mediaItem) {
|
public SsMediaSource createMediaSource(MediaItem mediaItem) {
|
||||||
checkNotNull(mediaItem.playbackProperties);
|
checkNotNull(mediaItem.localConfiguration);
|
||||||
@Nullable ParsingLoadable.Parser<? extends SsManifest> manifestParser = this.manifestParser;
|
@Nullable ParsingLoadable.Parser<? extends SsManifest> manifestParser = this.manifestParser;
|
||||||
if (manifestParser == null) {
|
if (manifestParser == null) {
|
||||||
manifestParser = new SsManifestParser();
|
manifestParser = new SsManifestParser();
|
||||||
}
|
}
|
||||||
List<StreamKey> streamKeys =
|
List<StreamKey> streamKeys =
|
||||||
!mediaItem.playbackProperties.streamKeys.isEmpty()
|
!mediaItem.localConfiguration.streamKeys.isEmpty()
|
||||||
? mediaItem.playbackProperties.streamKeys
|
? mediaItem.localConfiguration.streamKeys
|
||||||
: this.streamKeys;
|
: this.streamKeys;
|
||||||
if (!streamKeys.isEmpty()) {
|
if (!streamKeys.isEmpty()) {
|
||||||
manifestParser = new FilteringManifestParser<>(manifestParser, streamKeys);
|
manifestParser = new FilteringManifestParser<>(manifestParser, streamKeys);
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean needsTag = mediaItem.playbackProperties.tag == null && tag != null;
|
boolean needsTag = mediaItem.localConfiguration.tag == null && tag != null;
|
||||||
boolean needsStreamKeys =
|
boolean needsStreamKeys =
|
||||||
mediaItem.playbackProperties.streamKeys.isEmpty() && !streamKeys.isEmpty();
|
mediaItem.localConfiguration.streamKeys.isEmpty() && !streamKeys.isEmpty();
|
||||||
if (needsTag && needsStreamKeys) {
|
if (needsTag && needsStreamKeys) {
|
||||||
mediaItem = mediaItem.buildUpon().setTag(tag).setStreamKeys(streamKeys).build();
|
mediaItem = mediaItem.buildUpon().setTag(tag).setStreamKeys(streamKeys).build();
|
||||||
} else if (needsTag) {
|
} else if (needsTag) {
|
||||||
@ -370,7 +370,7 @@ public final class SsMediaSource extends BaseMediaSource
|
|||||||
|
|
||||||
private final boolean sideloadedManifest;
|
private final boolean sideloadedManifest;
|
||||||
private final Uri manifestUri;
|
private final Uri manifestUri;
|
||||||
private final MediaItem.PlaybackProperties playbackProperties;
|
private final MediaItem.LocalConfiguration localConfiguration;
|
||||||
private final MediaItem mediaItem;
|
private final MediaItem mediaItem;
|
||||||
private final DataSource.Factory manifestDataSourceFactory;
|
private final DataSource.Factory manifestDataSourceFactory;
|
||||||
private final SsChunkSource.Factory chunkSourceFactory;
|
private final SsChunkSource.Factory chunkSourceFactory;
|
||||||
@ -404,12 +404,12 @@ public final class SsMediaSource extends BaseMediaSource
|
|||||||
long livePresentationDelayMs) {
|
long livePresentationDelayMs) {
|
||||||
Assertions.checkState(manifest == null || !manifest.isLive);
|
Assertions.checkState(manifest == null || !manifest.isLive);
|
||||||
this.mediaItem = mediaItem;
|
this.mediaItem = mediaItem;
|
||||||
playbackProperties = checkNotNull(mediaItem.playbackProperties);
|
localConfiguration = checkNotNull(mediaItem.localConfiguration);
|
||||||
this.manifest = manifest;
|
this.manifest = manifest;
|
||||||
this.manifestUri =
|
this.manifestUri =
|
||||||
playbackProperties.uri.equals(Uri.EMPTY)
|
localConfiguration.uri.equals(Uri.EMPTY)
|
||||||
? null
|
? null
|
||||||
: Util.fixSmoothStreamingIsmManifestUri(playbackProperties.uri);
|
: Util.fixSmoothStreamingIsmManifestUri(localConfiguration.uri);
|
||||||
this.manifestDataSourceFactory = manifestDataSourceFactory;
|
this.manifestDataSourceFactory = manifestDataSourceFactory;
|
||||||
this.manifestParser = manifestParser;
|
this.manifestParser = manifestParser;
|
||||||
this.chunkSourceFactory = chunkSourceFactory;
|
this.chunkSourceFactory = chunkSourceFactory;
|
||||||
|
@ -87,7 +87,7 @@ public final class SsDownloader extends SegmentDownloader<SsManifest> {
|
|||||||
.buildUpon()
|
.buildUpon()
|
||||||
.setUri(
|
.setUri(
|
||||||
Util.fixSmoothStreamingIsmManifestUri(
|
Util.fixSmoothStreamingIsmManifestUri(
|
||||||
checkNotNull(mediaItem.playbackProperties).uri))
|
checkNotNull(mediaItem.localConfiguration).uri))
|
||||||
.build(),
|
.build(),
|
||||||
new SsManifestParser(),
|
new SsManifestParser(),
|
||||||
cacheDataSourceFactory,
|
cacheDataSourceFactory,
|
||||||
|
@ -60,7 +60,7 @@ public class DefaultMediaSourceFactoryTest {
|
|||||||
|
|
||||||
MediaSource mediaSource = defaultMediaSourceFactory.createMediaSource(mediaItem);
|
MediaSource mediaSource = defaultMediaSourceFactory.createMediaSource(mediaItem);
|
||||||
|
|
||||||
assertThat(mediaSource.getMediaItem().playbackProperties.tag).isEqualTo(tag);
|
assertThat(mediaSource.getMediaItem().localConfiguration.tag).isEqualTo(tag);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@ -41,10 +41,10 @@ public class SsMediaSourceTest {
|
|||||||
|
|
||||||
MediaItem ssMediaItem = factory.createMediaSource(mediaItem).getMediaItem();
|
MediaItem ssMediaItem = factory.createMediaSource(mediaItem).getMediaItem();
|
||||||
|
|
||||||
assertThat(ssMediaItem.playbackProperties).isNotNull();
|
assertThat(ssMediaItem.localConfiguration).isNotNull();
|
||||||
assertThat(ssMediaItem.playbackProperties.uri)
|
assertThat(ssMediaItem.localConfiguration.uri)
|
||||||
.isEqualTo(castNonNull(mediaItem.playbackProperties).uri);
|
.isEqualTo(castNonNull(mediaItem.localConfiguration).uri);
|
||||||
assertThat(ssMediaItem.playbackProperties.tag).isEqualTo(tag);
|
assertThat(ssMediaItem.localConfiguration.tag).isEqualTo(tag);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Tests backwards compatibility
|
// Tests backwards compatibility
|
||||||
@ -60,10 +60,10 @@ public class SsMediaSourceTest {
|
|||||||
|
|
||||||
MediaItem ssMediaItem = factory.createMediaSource(mediaItem).getMediaItem();
|
MediaItem ssMediaItem = factory.createMediaSource(mediaItem).getMediaItem();
|
||||||
|
|
||||||
assertThat(ssMediaItem.playbackProperties).isNotNull();
|
assertThat(ssMediaItem.localConfiguration).isNotNull();
|
||||||
assertThat(ssMediaItem.playbackProperties.uri)
|
assertThat(ssMediaItem.localConfiguration.uri)
|
||||||
.isEqualTo(castNonNull(mediaItem.playbackProperties).uri);
|
.isEqualTo(castNonNull(mediaItem.localConfiguration).uri);
|
||||||
assertThat(ssMediaItem.playbackProperties.tag).isEqualTo(mediaItemTag);
|
assertThat(ssMediaItem.localConfiguration.tag).isEqualTo(mediaItemTag);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Tests backwards compatibility
|
// Tests backwards compatibility
|
||||||
@ -78,10 +78,10 @@ public class SsMediaSourceTest {
|
|||||||
|
|
||||||
MediaItem ssMediaItem = factory.createMediaSource(mediaItem).getMediaItem();
|
MediaItem ssMediaItem = factory.createMediaSource(mediaItem).getMediaItem();
|
||||||
|
|
||||||
assertThat(ssMediaItem.playbackProperties).isNotNull();
|
assertThat(ssMediaItem.localConfiguration).isNotNull();
|
||||||
assertThat(ssMediaItem.playbackProperties.uri)
|
assertThat(ssMediaItem.localConfiguration.uri)
|
||||||
.isEqualTo(castNonNull(mediaItem.playbackProperties).uri);
|
.isEqualTo(castNonNull(mediaItem.localConfiguration).uri);
|
||||||
assertThat(ssMediaItem.playbackProperties.streamKeys).containsExactly(streamKey);
|
assertThat(ssMediaItem.localConfiguration.streamKeys).containsExactly(streamKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Tests backwards compatibility
|
// Tests backwards compatibility
|
||||||
@ -101,9 +101,9 @@ public class SsMediaSourceTest {
|
|||||||
|
|
||||||
MediaItem ssMediaItem = factory.createMediaSource(mediaItem).getMediaItem();
|
MediaItem ssMediaItem = factory.createMediaSource(mediaItem).getMediaItem();
|
||||||
|
|
||||||
assertThat(ssMediaItem.playbackProperties).isNotNull();
|
assertThat(ssMediaItem.localConfiguration).isNotNull();
|
||||||
assertThat(ssMediaItem.playbackProperties.uri)
|
assertThat(ssMediaItem.localConfiguration.uri)
|
||||||
.isEqualTo(castNonNull(mediaItem.playbackProperties).uri);
|
.isEqualTo(castNonNull(mediaItem.localConfiguration).uri);
|
||||||
assertThat(ssMediaItem.playbackProperties.streamKeys).containsExactly(mediaItemStreamKey);
|
assertThat(ssMediaItem.localConfiguration.streamKeys).containsExactly(mediaItemStreamKey);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -85,7 +85,7 @@ public class FakeMediaSource extends BaseMediaSource {
|
|||||||
new MediaItem.Builder().setMediaId("FakeMediaSource").setUri("http://manifest.uri").build();
|
new MediaItem.Builder().setMediaId("FakeMediaSource").setUri("http://manifest.uri").build();
|
||||||
|
|
||||||
private static final DataSpec FAKE_DATA_SPEC =
|
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 static final int MANIFEST_LOAD_BYTES = 100;
|
||||||
|
|
||||||
private final TrackGroupArray trackGroupArray;
|
private final TrackGroupArray trackGroupArray;
|
||||||
|
@ -58,9 +58,9 @@ public final class TimelineAsserts {
|
|||||||
for (int i = 0; i < timeline.getWindowCount(); i++) {
|
for (int i = 0; i < timeline.getWindowCount(); i++) {
|
||||||
timeline.getWindow(i, window);
|
timeline.getWindow(i, window);
|
||||||
if (expectedWindowTags[i] != null) {
|
if (expectedWindowTags[i] != null) {
|
||||||
MediaItem.PlaybackProperties playbackProperties = window.mediaItem.playbackProperties;
|
MediaItem.LocalConfiguration localConfiguration = window.mediaItem.localConfiguration;
|
||||||
assertThat(playbackProperties).isNotNull();
|
assertThat(localConfiguration).isNotNull();
|
||||||
assertThat(Util.castNonNull(playbackProperties).tag).isEqualTo(expectedWindowTags[i]);
|
assertThat(Util.castNonNull(localConfiguration).tag).isEqualTo(expectedWindowTags[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user