Rename SimpleBasePlayer.PlaylistItem to MediaItemData
This better matches the terminology we use elsewhere in the Player interface, where items inside the playlist are referred to as "media item" and only the entire list is called "playlist". PiperOrigin-RevId: 491882849
This commit is contained in:
parent
2a07a0b445
commit
ff7fe222b8
@ -122,7 +122,7 @@ public abstract class SimpleBasePlayer extends BasePlayer {
|
|||||||
private Size surfaceSize;
|
private Size surfaceSize;
|
||||||
private boolean newlyRenderedFirstFrame;
|
private boolean newlyRenderedFirstFrame;
|
||||||
private Metadata timedMetadata;
|
private Metadata timedMetadata;
|
||||||
private ImmutableList<PlaylistItem> playlistItems;
|
private ImmutableList<MediaItemData> playlist;
|
||||||
private Timeline timeline;
|
private Timeline timeline;
|
||||||
private MediaMetadata playlistMetadata;
|
private MediaMetadata playlistMetadata;
|
||||||
private int currentMediaItemIndex;
|
private int currentMediaItemIndex;
|
||||||
@ -168,7 +168,7 @@ public abstract class SimpleBasePlayer extends BasePlayer {
|
|||||||
surfaceSize = Size.UNKNOWN;
|
surfaceSize = Size.UNKNOWN;
|
||||||
newlyRenderedFirstFrame = false;
|
newlyRenderedFirstFrame = false;
|
||||||
timedMetadata = new Metadata(/* presentationTimeUs= */ C.TIME_UNSET);
|
timedMetadata = new Metadata(/* presentationTimeUs= */ C.TIME_UNSET);
|
||||||
playlistItems = ImmutableList.of();
|
playlist = ImmutableList.of();
|
||||||
timeline = Timeline.EMPTY;
|
timeline = Timeline.EMPTY;
|
||||||
playlistMetadata = MediaMetadata.EMPTY;
|
playlistMetadata = MediaMetadata.EMPTY;
|
||||||
currentMediaItemIndex = 0;
|
currentMediaItemIndex = 0;
|
||||||
@ -214,7 +214,7 @@ public abstract class SimpleBasePlayer extends BasePlayer {
|
|||||||
this.surfaceSize = state.surfaceSize;
|
this.surfaceSize = state.surfaceSize;
|
||||||
this.newlyRenderedFirstFrame = state.newlyRenderedFirstFrame;
|
this.newlyRenderedFirstFrame = state.newlyRenderedFirstFrame;
|
||||||
this.timedMetadata = state.timedMetadata;
|
this.timedMetadata = state.timedMetadata;
|
||||||
this.playlistItems = state.playlistItems;
|
this.playlist = state.playlist;
|
||||||
this.timeline = state.timeline;
|
this.timeline = state.timeline;
|
||||||
this.playlistMetadata = state.playlistMetadata;
|
this.playlistMetadata = state.playlistMetadata;
|
||||||
this.currentMediaItemIndex = state.currentMediaItemIndex;
|
this.currentMediaItemIndex = state.currentMediaItemIndex;
|
||||||
@ -565,21 +565,21 @@ public abstract class SimpleBasePlayer extends BasePlayer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the playlist items.
|
* Sets the list of {@link MediaItemData media items} in the playlist.
|
||||||
*
|
*
|
||||||
* <p>All playlist items must have unique {@linkplain PlaylistItem.Builder#setUid UIDs}.
|
* <p>All items must have unique {@linkplain MediaItemData.Builder#setUid UIDs}.
|
||||||
*
|
*
|
||||||
* @param playlistItems The list of playlist items.
|
* @param playlist The list of {@link MediaItemData media items} in the playlist.
|
||||||
* @return This builder.
|
* @return This builder.
|
||||||
*/
|
*/
|
||||||
@CanIgnoreReturnValue
|
@CanIgnoreReturnValue
|
||||||
public Builder setPlaylist(List<PlaylistItem> playlistItems) {
|
public Builder setPlaylist(List<MediaItemData> playlist) {
|
||||||
HashSet<Object> uids = new HashSet<>();
|
HashSet<Object> uids = new HashSet<>();
|
||||||
for (int i = 0; i < playlistItems.size(); i++) {
|
for (int i = 0; i < playlist.size(); i++) {
|
||||||
checkArgument(uids.add(playlistItems.get(i).uid));
|
checkArgument(uids.add(playlist.get(i).uid));
|
||||||
}
|
}
|
||||||
this.playlistItems = ImmutableList.copyOf(playlistItems);
|
this.playlist = ImmutableList.copyOf(playlist);
|
||||||
this.timeline = new PlaylistTimeline(this.playlistItems);
|
this.timeline = new PlaylistTimeline(this.playlist);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -598,8 +598,8 @@ public abstract class SimpleBasePlayer extends BasePlayer {
|
|||||||
/**
|
/**
|
||||||
* Sets the current media item index.
|
* Sets the current media item index.
|
||||||
*
|
*
|
||||||
* <p>The media item index must be less than the number of {@linkplain #setPlaylist playlist
|
* <p>The media item index must be less than the number of {@linkplain #setPlaylist media
|
||||||
* items}, if set.
|
* items in the playlist}, if set.
|
||||||
*
|
*
|
||||||
* @param currentMediaItemIndex The current media item index.
|
* @param currentMediaItemIndex The current media item index.
|
||||||
* @return This builder.
|
* @return This builder.
|
||||||
@ -612,15 +612,15 @@ public abstract class SimpleBasePlayer extends BasePlayer {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the current period index, or {@link C#INDEX_UNSET} to assume the first period of the
|
* Sets the current period index, or {@link C#INDEX_UNSET} to assume the first period of the
|
||||||
* current playlist item is played.
|
* current media item is played.
|
||||||
*
|
*
|
||||||
* <p>The period index must be less than the total number of {@linkplain
|
* <p>The period index must be less than the total number of {@linkplain
|
||||||
* PlaylistItem.Builder#setPeriods periods} in the playlist, if set, and the period at the
|
* MediaItemData.Builder#setPeriods periods} in the media item, if set, and the period at the
|
||||||
* specified index must be part of the {@linkplain #setCurrentMediaItemIndex current playlist
|
* specified index must be part of the {@linkplain #setCurrentMediaItemIndex current media
|
||||||
* item}.
|
* item}.
|
||||||
*
|
*
|
||||||
* @param currentPeriodIndex The current period index, or {@link C#INDEX_UNSET} to assume the
|
* @param currentPeriodIndex The current period index, or {@link C#INDEX_UNSET} to assume the
|
||||||
* first period of the current playlist item is played.
|
* first period of the current media item is played.
|
||||||
* @return This builder.
|
* @return This builder.
|
||||||
*/
|
*/
|
||||||
@CanIgnoreReturnValue
|
@CanIgnoreReturnValue
|
||||||
@ -637,7 +637,7 @@ public abstract class SimpleBasePlayer extends BasePlayer {
|
|||||||
* C#INDEX_UNSET}.
|
* C#INDEX_UNSET}.
|
||||||
*
|
*
|
||||||
* <p>Ads indices can only be set if there is a corresponding {@link AdPlaybackState} defined
|
* <p>Ads indices can only be set if there is a corresponding {@link AdPlaybackState} defined
|
||||||
* in the current {@linkplain PlaylistItem.Builder#setPeriods period}.
|
* in the current {@linkplain MediaItemData.Builder#setPeriods period}.
|
||||||
*
|
*
|
||||||
* @param adGroupIndex The current ad group index, or {@link C#INDEX_UNSET} if no ad is
|
* @param adGroupIndex The current ad group index, or {@link C#INDEX_UNSET} if no ad is
|
||||||
* playing.
|
* playing.
|
||||||
@ -863,9 +863,9 @@ public abstract class SimpleBasePlayer extends BasePlayer {
|
|||||||
public final boolean newlyRenderedFirstFrame;
|
public final boolean newlyRenderedFirstFrame;
|
||||||
/** The most recent timed metadata. */
|
/** The most recent timed metadata. */
|
||||||
public final Metadata timedMetadata;
|
public final Metadata timedMetadata;
|
||||||
/** The playlist items. */
|
/** The media items in the playlist. */
|
||||||
public final ImmutableList<PlaylistItem> playlistItems;
|
public final ImmutableList<MediaItemData> playlist;
|
||||||
/** The {@link Timeline} derived from the {@linkplain #playlistItems playlist items}. */
|
/** The {@link Timeline} derived from the {@link #playlist}. */
|
||||||
public final Timeline timeline;
|
public final Timeline timeline;
|
||||||
/** The playlist {@link MediaMetadata}. */
|
/** The playlist {@link MediaMetadata}. */
|
||||||
public final MediaMetadata playlistMetadata;
|
public final MediaMetadata playlistMetadata;
|
||||||
@ -873,7 +873,7 @@ public abstract class SimpleBasePlayer extends BasePlayer {
|
|||||||
public final int currentMediaItemIndex;
|
public final int currentMediaItemIndex;
|
||||||
/**
|
/**
|
||||||
* The current period index, or {@link C#INDEX_UNSET} to assume the first period of the current
|
* The current period index, or {@link C#INDEX_UNSET} to assume the first period of the current
|
||||||
* playlist item is played.
|
* media item is played.
|
||||||
*/
|
*/
|
||||||
public final int currentPeriodIndex;
|
public final int currentPeriodIndex;
|
||||||
/** The current ad group index, or {@link C#INDEX_UNSET} if no ad is playing. */
|
/** The current ad group index, or {@link C#INDEX_UNSET} if no ad is playing. */
|
||||||
@ -999,7 +999,7 @@ public abstract class SimpleBasePlayer extends BasePlayer {
|
|||||||
this.surfaceSize = builder.surfaceSize;
|
this.surfaceSize = builder.surfaceSize;
|
||||||
this.newlyRenderedFirstFrame = builder.newlyRenderedFirstFrame;
|
this.newlyRenderedFirstFrame = builder.newlyRenderedFirstFrame;
|
||||||
this.timedMetadata = builder.timedMetadata;
|
this.timedMetadata = builder.timedMetadata;
|
||||||
this.playlistItems = builder.playlistItems;
|
this.playlist = builder.playlist;
|
||||||
this.timeline = builder.timeline;
|
this.timeline = builder.timeline;
|
||||||
this.playlistMetadata = builder.playlistMetadata;
|
this.playlistMetadata = builder.playlistMetadata;
|
||||||
this.currentMediaItemIndex = builder.currentMediaItemIndex;
|
this.currentMediaItemIndex = builder.currentMediaItemIndex;
|
||||||
@ -1056,7 +1056,7 @@ public abstract class SimpleBasePlayer extends BasePlayer {
|
|||||||
&& surfaceSize.equals(state.surfaceSize)
|
&& surfaceSize.equals(state.surfaceSize)
|
||||||
&& newlyRenderedFirstFrame == state.newlyRenderedFirstFrame
|
&& newlyRenderedFirstFrame == state.newlyRenderedFirstFrame
|
||||||
&& timedMetadata.equals(state.timedMetadata)
|
&& timedMetadata.equals(state.timedMetadata)
|
||||||
&& playlistItems.equals(state.playlistItems)
|
&& playlist.equals(state.playlist)
|
||||||
&& playlistMetadata.equals(state.playlistMetadata)
|
&& playlistMetadata.equals(state.playlistMetadata)
|
||||||
&& currentMediaItemIndex == state.currentMediaItemIndex
|
&& currentMediaItemIndex == state.currentMediaItemIndex
|
||||||
&& currentPeriodIndex == state.currentPeriodIndex
|
&& currentPeriodIndex == state.currentPeriodIndex
|
||||||
@ -1102,7 +1102,7 @@ public abstract class SimpleBasePlayer extends BasePlayer {
|
|||||||
result = 31 * result + surfaceSize.hashCode();
|
result = 31 * result + surfaceSize.hashCode();
|
||||||
result = 31 * result + (newlyRenderedFirstFrame ? 1 : 0);
|
result = 31 * result + (newlyRenderedFirstFrame ? 1 : 0);
|
||||||
result = 31 * result + timedMetadata.hashCode();
|
result = 31 * result + timedMetadata.hashCode();
|
||||||
result = 31 * result + playlistItems.hashCode();
|
result = 31 * result + playlist.hashCode();
|
||||||
result = 31 * result + playlistMetadata.hashCode();
|
result = 31 * result + playlistMetadata.hashCode();
|
||||||
result = 31 * result + currentMediaItemIndex;
|
result = 31 * result + currentMediaItemIndex;
|
||||||
result = 31 * result + currentPeriodIndex;
|
result = 31 * result + currentPeriodIndex;
|
||||||
@ -1122,28 +1122,28 @@ public abstract class SimpleBasePlayer extends BasePlayer {
|
|||||||
|
|
||||||
private static final class PlaylistTimeline extends Timeline {
|
private static final class PlaylistTimeline extends Timeline {
|
||||||
|
|
||||||
private final ImmutableList<PlaylistItem> playlistItems;
|
private final ImmutableList<MediaItemData> playlist;
|
||||||
private final int[] firstPeriodIndexByWindowIndex;
|
private final int[] firstPeriodIndexByWindowIndex;
|
||||||
private final int[] windowIndexByPeriodIndex;
|
private final int[] windowIndexByPeriodIndex;
|
||||||
private final HashMap<Object, Integer> periodIndexByUid;
|
private final HashMap<Object, Integer> periodIndexByUid;
|
||||||
|
|
||||||
public PlaylistTimeline(ImmutableList<PlaylistItem> playlistItems) {
|
public PlaylistTimeline(ImmutableList<MediaItemData> playlist) {
|
||||||
int playlistItemCount = playlistItems.size();
|
int mediaItemCount = playlist.size();
|
||||||
this.playlistItems = playlistItems;
|
this.playlist = playlist;
|
||||||
this.firstPeriodIndexByWindowIndex = new int[playlistItemCount];
|
this.firstPeriodIndexByWindowIndex = new int[mediaItemCount];
|
||||||
int periodCount = 0;
|
int periodCount = 0;
|
||||||
for (int i = 0; i < playlistItemCount; i++) {
|
for (int i = 0; i < mediaItemCount; i++) {
|
||||||
PlaylistItem playlistItem = playlistItems.get(i);
|
MediaItemData mediaItemData = playlist.get(i);
|
||||||
firstPeriodIndexByWindowIndex[i] = periodCount;
|
firstPeriodIndexByWindowIndex[i] = periodCount;
|
||||||
periodCount += getPeriodCountInPlaylistItem(playlistItem);
|
periodCount += getPeriodCountInMediaItem(mediaItemData);
|
||||||
}
|
}
|
||||||
this.windowIndexByPeriodIndex = new int[periodCount];
|
this.windowIndexByPeriodIndex = new int[periodCount];
|
||||||
this.periodIndexByUid = new HashMap<>();
|
this.periodIndexByUid = new HashMap<>();
|
||||||
int periodIndex = 0;
|
int periodIndex = 0;
|
||||||
for (int i = 0; i < playlistItemCount; i++) {
|
for (int i = 0; i < mediaItemCount; i++) {
|
||||||
PlaylistItem playlistItem = playlistItems.get(i);
|
MediaItemData mediaItemData = playlist.get(i);
|
||||||
for (int j = 0; j < getPeriodCountInPlaylistItem(playlistItem); j++) {
|
for (int j = 0; j < getPeriodCountInMediaItem(mediaItemData); j++) {
|
||||||
periodIndexByUid.put(playlistItem.getPeriodUid(j), periodIndex);
|
periodIndexByUid.put(mediaItemData.getPeriodUid(j), periodIndex);
|
||||||
windowIndexByPeriodIndex[periodIndex] = i;
|
windowIndexByPeriodIndex[periodIndex] = i;
|
||||||
periodIndex++;
|
periodIndex++;
|
||||||
}
|
}
|
||||||
@ -1152,7 +1152,7 @@ public abstract class SimpleBasePlayer extends BasePlayer {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getWindowCount() {
|
public int getWindowCount() {
|
||||||
return playlistItems.size();
|
return playlist.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -1181,7 +1181,7 @@ public abstract class SimpleBasePlayer extends BasePlayer {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Window getWindow(int windowIndex, Window window, long defaultPositionProjectionUs) {
|
public Window getWindow(int windowIndex, Window window, long defaultPositionProjectionUs) {
|
||||||
return playlistItems
|
return playlist
|
||||||
.get(windowIndex)
|
.get(windowIndex)
|
||||||
.getWindow(firstPeriodIndexByWindowIndex[windowIndex], window);
|
.getWindow(firstPeriodIndexByWindowIndex[windowIndex], window);
|
||||||
}
|
}
|
||||||
@ -1201,7 +1201,7 @@ public abstract class SimpleBasePlayer extends BasePlayer {
|
|||||||
public Period getPeriod(int periodIndex, Period period, boolean setIds) {
|
public Period getPeriod(int periodIndex, Period period, boolean setIds) {
|
||||||
int windowIndex = windowIndexByPeriodIndex[periodIndex];
|
int windowIndex = windowIndexByPeriodIndex[periodIndex];
|
||||||
int periodIndexInWindow = periodIndex - firstPeriodIndexByWindowIndex[windowIndex];
|
int periodIndexInWindow = periodIndex - firstPeriodIndexByWindowIndex[windowIndex];
|
||||||
return playlistItems.get(windowIndex).getPeriod(windowIndex, periodIndexInWindow, period);
|
return playlist.get(windowIndex).getPeriod(windowIndex, periodIndexInWindow, period);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -1214,21 +1214,22 @@ public abstract class SimpleBasePlayer extends BasePlayer {
|
|||||||
public Object getUidOfPeriod(int periodIndex) {
|
public Object getUidOfPeriod(int periodIndex) {
|
||||||
int windowIndex = windowIndexByPeriodIndex[periodIndex];
|
int windowIndex = windowIndexByPeriodIndex[periodIndex];
|
||||||
int periodIndexInWindow = periodIndex - firstPeriodIndexByWindowIndex[windowIndex];
|
int periodIndexInWindow = periodIndex - firstPeriodIndexByWindowIndex[windowIndex];
|
||||||
return playlistItems.get(windowIndex).getPeriodUid(periodIndexInWindow);
|
return playlist.get(windowIndex).getPeriodUid(periodIndexInWindow);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static int getPeriodCountInPlaylistItem(PlaylistItem playlistItem) {
|
private static int getPeriodCountInMediaItem(MediaItemData mediaItemData) {
|
||||||
return playlistItem.periods.isEmpty() ? 1 : playlistItem.periods.size();
|
return mediaItemData.periods.isEmpty() ? 1 : mediaItemData.periods.size();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* An immutable description of a playlist item, containing both static setup information like
|
* An immutable description of an item in the playlist, containing both static setup information
|
||||||
* {@link MediaItem} and dynamic data that is generally read from the media like the duration.
|
* like {@link MediaItem} and dynamic data that is generally read from the media like the
|
||||||
|
* duration.
|
||||||
*/
|
*/
|
||||||
protected static final class PlaylistItem {
|
protected static final class MediaItemData {
|
||||||
|
|
||||||
/** A builder for {@link PlaylistItem} objects. */
|
/** A builder for {@link MediaItemData} objects. */
|
||||||
public static final class Builder {
|
public static final class Builder {
|
||||||
|
|
||||||
private Object uid;
|
private Object uid;
|
||||||
@ -1251,7 +1252,7 @@ public abstract class SimpleBasePlayer extends BasePlayer {
|
|||||||
/**
|
/**
|
||||||
* Creates the builder.
|
* Creates the builder.
|
||||||
*
|
*
|
||||||
* @param uid The unique identifier of the playlist item within a playlist. This value will be
|
* @param uid The unique identifier of the media item within a playlist. This value will be
|
||||||
* set as {@link Timeline.Window#uid} for this item.
|
* set as {@link Timeline.Window#uid} for this item.
|
||||||
*/
|
*/
|
||||||
public Builder(Object uid) {
|
public Builder(Object uid) {
|
||||||
@ -1273,31 +1274,31 @@ public abstract class SimpleBasePlayer extends BasePlayer {
|
|||||||
periods = ImmutableList.of();
|
periods = ImmutableList.of();
|
||||||
}
|
}
|
||||||
|
|
||||||
private Builder(PlaylistItem playlistItem) {
|
private Builder(MediaItemData mediaItemData) {
|
||||||
this.uid = playlistItem.uid;
|
this.uid = mediaItemData.uid;
|
||||||
this.tracks = playlistItem.tracks;
|
this.tracks = mediaItemData.tracks;
|
||||||
this.mediaItem = playlistItem.mediaItem;
|
this.mediaItem = mediaItemData.mediaItem;
|
||||||
this.mediaMetadata = playlistItem.mediaMetadata;
|
this.mediaMetadata = mediaItemData.mediaMetadata;
|
||||||
this.manifest = playlistItem.manifest;
|
this.manifest = mediaItemData.manifest;
|
||||||
this.liveConfiguration = playlistItem.liveConfiguration;
|
this.liveConfiguration = mediaItemData.liveConfiguration;
|
||||||
this.presentationStartTimeMs = playlistItem.presentationStartTimeMs;
|
this.presentationStartTimeMs = mediaItemData.presentationStartTimeMs;
|
||||||
this.windowStartTimeMs = playlistItem.windowStartTimeMs;
|
this.windowStartTimeMs = mediaItemData.windowStartTimeMs;
|
||||||
this.elapsedRealtimeEpochOffsetMs = playlistItem.elapsedRealtimeEpochOffsetMs;
|
this.elapsedRealtimeEpochOffsetMs = mediaItemData.elapsedRealtimeEpochOffsetMs;
|
||||||
this.isSeekable = playlistItem.isSeekable;
|
this.isSeekable = mediaItemData.isSeekable;
|
||||||
this.isDynamic = playlistItem.isDynamic;
|
this.isDynamic = mediaItemData.isDynamic;
|
||||||
this.defaultPositionUs = playlistItem.defaultPositionUs;
|
this.defaultPositionUs = mediaItemData.defaultPositionUs;
|
||||||
this.durationUs = playlistItem.durationUs;
|
this.durationUs = mediaItemData.durationUs;
|
||||||
this.positionInFirstPeriodUs = playlistItem.positionInFirstPeriodUs;
|
this.positionInFirstPeriodUs = mediaItemData.positionInFirstPeriodUs;
|
||||||
this.isPlaceholder = playlistItem.isPlaceholder;
|
this.isPlaceholder = mediaItemData.isPlaceholder;
|
||||||
this.periods = playlistItem.periods;
|
this.periods = mediaItemData.periods;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the unique identifier of this playlist item within a playlist.
|
* Sets the unique identifier of this media item within a playlist.
|
||||||
*
|
*
|
||||||
* <p>This value will be set as {@link Timeline.Window#uid} for this item.
|
* <p>This value will be set as {@link Timeline.Window#uid} for this item.
|
||||||
*
|
*
|
||||||
* @param uid The unique identifier of this playlist item within a playlist.
|
* @param uid The unique identifier of this media item within a playlist.
|
||||||
* @return This builder.
|
* @return This builder.
|
||||||
*/
|
*/
|
||||||
@CanIgnoreReturnValue
|
@CanIgnoreReturnValue
|
||||||
@ -1307,9 +1308,9 @@ public abstract class SimpleBasePlayer extends BasePlayer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the {@link Tracks} of this playlist item.
|
* Sets the {@link Tracks} of this media item.
|
||||||
*
|
*
|
||||||
* @param tracks The {@link Tracks} of this playlist item.
|
* @param tracks The {@link Tracks} of this media item.
|
||||||
* @return This builder.
|
* @return This builder.
|
||||||
*/
|
*/
|
||||||
@CanIgnoreReturnValue
|
@CanIgnoreReturnValue
|
||||||
@ -1319,9 +1320,9 @@ public abstract class SimpleBasePlayer extends BasePlayer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the {@link MediaItem} for this playlist item.
|
* Sets the {@link MediaItem}.
|
||||||
*
|
*
|
||||||
* @param mediaItem The {@link MediaItem} for this playlist item.
|
* @param mediaItem The {@link MediaItem}.
|
||||||
* @return This builder.
|
* @return This builder.
|
||||||
*/
|
*/
|
||||||
@CanIgnoreReturnValue
|
@CanIgnoreReturnValue
|
||||||
@ -1351,9 +1352,9 @@ public abstract class SimpleBasePlayer extends BasePlayer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the manifest of the playlist item.
|
* Sets the manifest of the media item.
|
||||||
*
|
*
|
||||||
* @param manifest The manifest of the playlist item, or null if not applicable.
|
* @param manifest The manifest of the media item, or null if not applicable.
|
||||||
* @return This builder.
|
* @return This builder.
|
||||||
*/
|
*/
|
||||||
@CanIgnoreReturnValue
|
@CanIgnoreReturnValue
|
||||||
@ -1363,11 +1364,10 @@ public abstract class SimpleBasePlayer extends BasePlayer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the active {@link MediaItem.LiveConfiguration}, or null if the playlist item is not
|
* Sets the active {@link MediaItem.LiveConfiguration}, or null if the media item is not live.
|
||||||
* live.
|
|
||||||
*
|
*
|
||||||
* @param liveConfiguration The active {@link MediaItem.LiveConfiguration}, or null if the
|
* @param liveConfiguration The active {@link MediaItem.LiveConfiguration}, or null if the
|
||||||
* playlist item is not live.
|
* media item is not live.
|
||||||
* @return This builder.
|
* @return This builder.
|
||||||
*/
|
*/
|
||||||
@CanIgnoreReturnValue
|
@CanIgnoreReturnValue
|
||||||
@ -1428,9 +1428,9 @@ public abstract class SimpleBasePlayer extends BasePlayer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets whether it's possible to seek within this playlist item.
|
* Sets whether it's possible to seek within this media item.
|
||||||
*
|
*
|
||||||
* @param isSeekable Whether it's possible to seek within this playlist item.
|
* @param isSeekable Whether it's possible to seek within this media item.
|
||||||
* @return This builder.
|
* @return This builder.
|
||||||
*/
|
*/
|
||||||
@CanIgnoreReturnValue
|
@CanIgnoreReturnValue
|
||||||
@ -1440,9 +1440,9 @@ public abstract class SimpleBasePlayer extends BasePlayer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets whether this playlist item may change over time, for example a moving live window.
|
* Sets whether this media item may change over time, for example a moving live window.
|
||||||
*
|
*
|
||||||
* @param isDynamic Whether this playlist item may change over time, for example a moving live
|
* @param isDynamic Whether this media item may change over time, for example a moving live
|
||||||
* window.
|
* window.
|
||||||
* @return This builder.
|
* @return This builder.
|
||||||
*/
|
*/
|
||||||
@ -1453,13 +1453,13 @@ public abstract class SimpleBasePlayer extends BasePlayer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the default position relative to the start of the playlist item at which to begin
|
* Sets the default position relative to the start of the media item at which to begin
|
||||||
* playback, in microseconds.
|
* playback, in microseconds.
|
||||||
*
|
*
|
||||||
* <p>The default position must be less or equal to the {@linkplain #setDurationUs duration},
|
* <p>The default position must be less or equal to the {@linkplain #setDurationUs duration},
|
||||||
* is set.
|
* is set.
|
||||||
*
|
*
|
||||||
* @param defaultPositionUs The default position relative to the start of the playlist item at
|
* @param defaultPositionUs The default position relative to the start of the media item at
|
||||||
* which to begin playback, in microseconds.
|
* which to begin playback, in microseconds.
|
||||||
* @return This builder.
|
* @return This builder.
|
||||||
*/
|
*/
|
||||||
@ -1471,14 +1471,14 @@ public abstract class SimpleBasePlayer extends BasePlayer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the duration of the playlist item, in microseconds.
|
* Sets the duration of the media item, in microseconds.
|
||||||
*
|
*
|
||||||
* <p>If both this duration and all {@linkplain #setPeriods period} durations are set, the sum
|
* <p>If both this duration and all {@linkplain #setPeriods period} durations are set, the sum
|
||||||
* of this duration and the {@linkplain #setPositionInFirstPeriodUs offset in the first
|
* of this duration and the {@linkplain #setPositionInFirstPeriodUs offset in the first
|
||||||
* period} must match the total duration of all periods.
|
* period} must match the total duration of all periods.
|
||||||
*
|
*
|
||||||
* @param durationUs The duration of the playlist item, in microseconds, or {@link
|
* @param durationUs The duration of the media item, in microseconds, or {@link C#TIME_UNSET}
|
||||||
* C#TIME_UNSET} if unknown.
|
* if unknown.
|
||||||
* @return This builder.
|
* @return This builder.
|
||||||
*/
|
*/
|
||||||
@CanIgnoreReturnValue
|
@CanIgnoreReturnValue
|
||||||
@ -1489,11 +1489,11 @@ public abstract class SimpleBasePlayer extends BasePlayer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the position of the start of this playlist item relative to the start of the first
|
* Sets the position of the start of this media item relative to the start of the first period
|
||||||
* period belonging to it, in microseconds.
|
* belonging to it, in microseconds.
|
||||||
*
|
*
|
||||||
* @param positionInFirstPeriodUs The position of the start of this playlist item relative to
|
* @param positionInFirstPeriodUs The position of the start of this media item relative to the
|
||||||
* the start of the first period belonging to it, in microseconds.
|
* start of the first period belonging to it, in microseconds.
|
||||||
* @return This builder.
|
* @return This builder.
|
||||||
*/
|
*/
|
||||||
@CanIgnoreReturnValue
|
@CanIgnoreReturnValue
|
||||||
@ -1504,11 +1504,11 @@ public abstract class SimpleBasePlayer extends BasePlayer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets whether this playlist item contains placeholder information because the real
|
* Sets whether this media item contains placeholder information because the real information
|
||||||
* information has yet to be loaded.
|
* has yet to be loaded.
|
||||||
*
|
*
|
||||||
* @param isPlaceholder Whether this playlist item contains placeholder information because
|
* @param isPlaceholder Whether this media item contains placeholder information because the
|
||||||
* the real information has yet to be loaded.
|
* real information has yet to be loaded.
|
||||||
* @return This builder.
|
* @return This builder.
|
||||||
*/
|
*/
|
||||||
@CanIgnoreReturnValue
|
@CanIgnoreReturnValue
|
||||||
@ -1518,15 +1518,14 @@ public abstract class SimpleBasePlayer extends BasePlayer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the list of {@linkplain PeriodData periods} in this playlist item.
|
* Sets the list of {@linkplain PeriodData periods} in this media item.
|
||||||
*
|
*
|
||||||
* <p>All periods must have unique {@linkplain PeriodData.Builder#setUid UIDs} and only the
|
* <p>All periods must have unique {@linkplain PeriodData.Builder#setUid UIDs} and only the
|
||||||
* last period is allowed to have an unset {@linkplain PeriodData.Builder#setDurationUs
|
* last period is allowed to have an unset {@linkplain PeriodData.Builder#setDurationUs
|
||||||
* duration}.
|
* duration}.
|
||||||
*
|
*
|
||||||
* @param periods The list of {@linkplain PeriodData periods} in this playlist item, or an
|
* @param periods The list of {@linkplain PeriodData periods} in this media item, or an empty
|
||||||
* empty list to assume a single period without ads and the same duration as the playlist
|
* list to assume a single period without ads and the same duration as the media item.
|
||||||
* item.
|
|
||||||
* @return This builder.
|
* @return This builder.
|
||||||
*/
|
*/
|
||||||
@CanIgnoreReturnValue
|
@CanIgnoreReturnValue
|
||||||
@ -1542,17 +1541,17 @@ public abstract class SimpleBasePlayer extends BasePlayer {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Builds the {@link PlaylistItem}. */
|
/** Builds the {@link MediaItemData}. */
|
||||||
public PlaylistItem build() {
|
public MediaItemData build() {
|
||||||
return new PlaylistItem(this);
|
return new MediaItemData(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** The unique identifier of this playlist item. */
|
/** The unique identifier of this media item. */
|
||||||
public final Object uid;
|
public final Object uid;
|
||||||
/** The {@link Tracks} of this playlist item. */
|
/** The {@link Tracks} of this media item. */
|
||||||
public final Tracks tracks;
|
public final Tracks tracks;
|
||||||
/** The {@link MediaItem} for this playlist item. */
|
/** The {@link MediaItem}. */
|
||||||
public final MediaItem mediaItem;
|
public final MediaItem mediaItem;
|
||||||
/**
|
/**
|
||||||
* The {@link MediaMetadata}, including static data from the {@link MediaItem#mediaMetadata
|
* The {@link MediaMetadata}, including static data from the {@link MediaItem#mediaMetadata
|
||||||
@ -1562,9 +1561,9 @@ public abstract class SimpleBasePlayer extends BasePlayer {
|
|||||||
* {@link Format#metadata Formats}.
|
* {@link Format#metadata Formats}.
|
||||||
*/
|
*/
|
||||||
@Nullable public final MediaMetadata mediaMetadata;
|
@Nullable public final MediaMetadata mediaMetadata;
|
||||||
/** The manifest of the playlist item, or null if not applicable. */
|
/** The manifest of the media item, or null if not applicable. */
|
||||||
@Nullable public final Object manifest;
|
@Nullable public final Object manifest;
|
||||||
/** The active {@link MediaItem.LiveConfiguration}, or null if the playlist item is not live. */
|
/** The active {@link MediaItem.LiveConfiguration}, or null if the media item is not live. */
|
||||||
@Nullable public final MediaItem.LiveConfiguration liveConfiguration;
|
@Nullable public final MediaItem.LiveConfiguration liveConfiguration;
|
||||||
/**
|
/**
|
||||||
* The start time of the live presentation, in milliseconds since the Unix epoch, or {@link
|
* The start time of the live presentation, in milliseconds since the Unix epoch, or {@link
|
||||||
@ -1582,37 +1581,37 @@ public abstract class SimpleBasePlayer extends BasePlayer {
|
|||||||
* applicable.
|
* applicable.
|
||||||
*/
|
*/
|
||||||
public final long elapsedRealtimeEpochOffsetMs;
|
public final long elapsedRealtimeEpochOffsetMs;
|
||||||
/** Whether it's possible to seek within this playlist item. */
|
/** Whether it's possible to seek within this media item. */
|
||||||
public final boolean isSeekable;
|
public final boolean isSeekable;
|
||||||
/** Whether this playlist item may change over time, for example a moving live window. */
|
/** Whether this media item may change over time, for example a moving live window. */
|
||||||
public final boolean isDynamic;
|
public final boolean isDynamic;
|
||||||
/**
|
/**
|
||||||
* The default position relative to the start of the playlist item at which to begin playback,
|
* The default position relative to the start of the media item at which to begin playback, in
|
||||||
* in microseconds.
|
* microseconds.
|
||||||
*/
|
*/
|
||||||
public final long defaultPositionUs;
|
public final long defaultPositionUs;
|
||||||
/** The duration of the playlist item, in microseconds, or {@link C#TIME_UNSET} if unknown. */
|
/** The duration of the media item, in microseconds, or {@link C#TIME_UNSET} if unknown. */
|
||||||
public final long durationUs;
|
public final long durationUs;
|
||||||
/**
|
/**
|
||||||
* The position of the start of this playlist item relative to the start of the first period
|
* The position of the start of this media item relative to the start of the first period
|
||||||
* belonging to it, in microseconds.
|
* belonging to it, in microseconds.
|
||||||
*/
|
*/
|
||||||
public final long positionInFirstPeriodUs;
|
public final long positionInFirstPeriodUs;
|
||||||
/**
|
/**
|
||||||
* Whether this playlist item contains placeholder information because the real information has
|
* Whether this media item contains placeholder information because the real information has yet
|
||||||
* yet to be loaded.
|
* to be loaded.
|
||||||
*/
|
*/
|
||||||
public final boolean isPlaceholder;
|
public final boolean isPlaceholder;
|
||||||
/**
|
/**
|
||||||
* The list of {@linkplain PeriodData periods} in this playlist item, or an empty list to assume
|
* The list of {@linkplain PeriodData periods} in this media item, or an empty list to assume a
|
||||||
* a single period without ads and the same duration as the playlist item.
|
* single period without ads and the same duration as the media item.
|
||||||
*/
|
*/
|
||||||
public final ImmutableList<PeriodData> periods;
|
public final ImmutableList<PeriodData> periods;
|
||||||
|
|
||||||
private final long[] periodPositionInWindowUs;
|
private final long[] periodPositionInWindowUs;
|
||||||
private final MediaMetadata combinedMediaMetadata;
|
private final MediaMetadata combinedMediaMetadata;
|
||||||
|
|
||||||
private PlaylistItem(Builder builder) {
|
private MediaItemData(Builder builder) {
|
||||||
if (builder.liveConfiguration == null) {
|
if (builder.liveConfiguration == null) {
|
||||||
checkArgument(builder.presentationStartTimeMs == C.TIME_UNSET);
|
checkArgument(builder.presentationStartTimeMs == C.TIME_UNSET);
|
||||||
checkArgument(builder.windowStartTimeMs == C.TIME_UNSET);
|
checkArgument(builder.windowStartTimeMs == C.TIME_UNSET);
|
||||||
@ -1662,26 +1661,26 @@ public abstract class SimpleBasePlayer extends BasePlayer {
|
|||||||
if (this == o) {
|
if (this == o) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (!(o instanceof PlaylistItem)) {
|
if (!(o instanceof MediaItemData)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
PlaylistItem playlistItem = (PlaylistItem) o;
|
MediaItemData mediaItemData = (MediaItemData) o;
|
||||||
return this.uid.equals(playlistItem.uid)
|
return this.uid.equals(mediaItemData.uid)
|
||||||
&& this.tracks.equals(playlistItem.tracks)
|
&& this.tracks.equals(mediaItemData.tracks)
|
||||||
&& this.mediaItem.equals(playlistItem.mediaItem)
|
&& this.mediaItem.equals(mediaItemData.mediaItem)
|
||||||
&& Util.areEqual(this.mediaMetadata, playlistItem.mediaMetadata)
|
&& Util.areEqual(this.mediaMetadata, mediaItemData.mediaMetadata)
|
||||||
&& Util.areEqual(this.manifest, playlistItem.manifest)
|
&& Util.areEqual(this.manifest, mediaItemData.manifest)
|
||||||
&& Util.areEqual(this.liveConfiguration, playlistItem.liveConfiguration)
|
&& Util.areEqual(this.liveConfiguration, mediaItemData.liveConfiguration)
|
||||||
&& this.presentationStartTimeMs == playlistItem.presentationStartTimeMs
|
&& this.presentationStartTimeMs == mediaItemData.presentationStartTimeMs
|
||||||
&& this.windowStartTimeMs == playlistItem.windowStartTimeMs
|
&& this.windowStartTimeMs == mediaItemData.windowStartTimeMs
|
||||||
&& this.elapsedRealtimeEpochOffsetMs == playlistItem.elapsedRealtimeEpochOffsetMs
|
&& this.elapsedRealtimeEpochOffsetMs == mediaItemData.elapsedRealtimeEpochOffsetMs
|
||||||
&& this.isSeekable == playlistItem.isSeekable
|
&& this.isSeekable == mediaItemData.isSeekable
|
||||||
&& this.isDynamic == playlistItem.isDynamic
|
&& this.isDynamic == mediaItemData.isDynamic
|
||||||
&& this.defaultPositionUs == playlistItem.defaultPositionUs
|
&& this.defaultPositionUs == mediaItemData.defaultPositionUs
|
||||||
&& this.durationUs == playlistItem.durationUs
|
&& this.durationUs == mediaItemData.durationUs
|
||||||
&& this.positionInFirstPeriodUs == playlistItem.positionInFirstPeriodUs
|
&& this.positionInFirstPeriodUs == mediaItemData.positionInFirstPeriodUs
|
||||||
&& this.isPlaceholder == playlistItem.isPlaceholder
|
&& this.isPlaceholder == mediaItemData.isPlaceholder
|
||||||
&& this.periods.equals(playlistItem.periods);
|
&& this.periods.equals(mediaItemData.periods);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -1730,7 +1729,7 @@ public abstract class SimpleBasePlayer extends BasePlayer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private Timeline.Period getPeriod(
|
private Timeline.Period getPeriod(
|
||||||
int windowIndex, int periodIndexInPlaylistItem, Timeline.Period period) {
|
int windowIndex, int periodIndexInMediaItem, Timeline.Period period) {
|
||||||
if (periods.isEmpty()) {
|
if (periods.isEmpty()) {
|
||||||
period.set(
|
period.set(
|
||||||
/* id= */ uid,
|
/* id= */ uid,
|
||||||
@ -1741,7 +1740,7 @@ public abstract class SimpleBasePlayer extends BasePlayer {
|
|||||||
AdPlaybackState.NONE,
|
AdPlaybackState.NONE,
|
||||||
isPlaceholder);
|
isPlaceholder);
|
||||||
} else {
|
} else {
|
||||||
PeriodData periodData = periods.get(periodIndexInPlaylistItem);
|
PeriodData periodData = periods.get(periodIndexInMediaItem);
|
||||||
Object periodId = periodData.uid;
|
Object periodId = periodData.uid;
|
||||||
Object periodUid = Pair.create(uid, periodId);
|
Object periodUid = Pair.create(uid, periodId);
|
||||||
period.set(
|
period.set(
|
||||||
@ -1749,18 +1748,18 @@ public abstract class SimpleBasePlayer extends BasePlayer {
|
|||||||
periodUid,
|
periodUid,
|
||||||
windowIndex,
|
windowIndex,
|
||||||
periodData.durationUs,
|
periodData.durationUs,
|
||||||
periodPositionInWindowUs[periodIndexInPlaylistItem],
|
periodPositionInWindowUs[periodIndexInMediaItem],
|
||||||
periodData.adPlaybackState,
|
periodData.adPlaybackState,
|
||||||
periodData.isPlaceholder);
|
periodData.isPlaceholder);
|
||||||
}
|
}
|
||||||
return period;
|
return period;
|
||||||
}
|
}
|
||||||
|
|
||||||
private Object getPeriodUid(int periodIndexInPlaylistItem) {
|
private Object getPeriodUid(int periodIndexInMediaItem) {
|
||||||
if (periods.isEmpty()) {
|
if (periods.isEmpty()) {
|
||||||
return uid;
|
return uid;
|
||||||
}
|
}
|
||||||
Object periodId = periods.get(periodIndexInPlaylistItem).uid;
|
Object periodId = periods.get(periodIndexInMediaItem).uid;
|
||||||
return Pair.create(uid, periodId);
|
return Pair.create(uid, periodId);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1784,7 +1783,7 @@ public abstract class SimpleBasePlayer extends BasePlayer {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Data describing the properties of a period inside a {@link PlaylistItem}. */
|
/** Data describing the properties of a period inside a {@link MediaItemData}. */
|
||||||
protected static final class PeriodData {
|
protected static final class PeriodData {
|
||||||
|
|
||||||
/** A builder for {@link PeriodData} objects. */
|
/** A builder for {@link PeriodData} objects. */
|
||||||
@ -1798,7 +1797,7 @@ public abstract class SimpleBasePlayer extends BasePlayer {
|
|||||||
/**
|
/**
|
||||||
* Creates the builder.
|
* Creates the builder.
|
||||||
*
|
*
|
||||||
* @param uid The unique identifier of the period within its playlist item.
|
* @param uid The unique identifier of the period within its media item.
|
||||||
*/
|
*/
|
||||||
public Builder(Object uid) {
|
public Builder(Object uid) {
|
||||||
this.uid = uid;
|
this.uid = uid;
|
||||||
@ -1815,9 +1814,9 @@ public abstract class SimpleBasePlayer extends BasePlayer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the unique identifier of the period within its playlist item.
|
* Sets the unique identifier of the period within its media item.
|
||||||
*
|
*
|
||||||
* @param uid The unique identifier of the period within its playlist item.
|
* @param uid The unique identifier of the period within its media item.
|
||||||
* @return This builder.
|
* @return This builder.
|
||||||
*/
|
*/
|
||||||
@CanIgnoreReturnValue
|
@CanIgnoreReturnValue
|
||||||
@ -1829,7 +1828,7 @@ public abstract class SimpleBasePlayer extends BasePlayer {
|
|||||||
/**
|
/**
|
||||||
* Sets the total duration of the period, in microseconds, or {@link C#TIME_UNSET} if unknown.
|
* Sets the total duration of the period, in microseconds, or {@link C#TIME_UNSET} if unknown.
|
||||||
*
|
*
|
||||||
* <p>Only the last period in a playlist item can have an unknown duration.
|
* <p>Only the last period in a media item can have an unknown duration.
|
||||||
*
|
*
|
||||||
* @param durationUs The total duration of the period, in microseconds, or {@link
|
* @param durationUs The total duration of the period, in microseconds, or {@link
|
||||||
* C#TIME_UNSET} if unknown.
|
* C#TIME_UNSET} if unknown.
|
||||||
@ -1875,11 +1874,11 @@ public abstract class SimpleBasePlayer extends BasePlayer {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** The unique identifier of the period within its playlist item. */
|
/** The unique identifier of the period within its media item. */
|
||||||
public final Object uid;
|
public final Object uid;
|
||||||
/**
|
/**
|
||||||
* The total duration of the period, in microseconds, or {@link C#TIME_UNSET} if unknown. Only
|
* The total duration of the period, in microseconds, or {@link C#TIME_UNSET} if unknown. Only
|
||||||
* the last period in a playlist item can have an unknown duration.
|
* the last period in a media item can have an unknown duration.
|
||||||
*/
|
*/
|
||||||
public final long durationUs;
|
public final long durationUs;
|
||||||
/**
|
/**
|
||||||
@ -2536,8 +2535,7 @@ public abstract class SimpleBasePlayer extends BasePlayer {
|
|||||||
|
|
||||||
if (timelineChanged) {
|
if (timelineChanged) {
|
||||||
@Player.TimelineChangeReason
|
@Player.TimelineChangeReason
|
||||||
int timelineChangeReason =
|
int timelineChangeReason = getTimelineChangeReason(previousState.playlist, newState.playlist);
|
||||||
getTimelineChangeReason(previousState.playlistItems, newState.playlistItems);
|
|
||||||
listeners.queueEvent(
|
listeners.queueEvent(
|
||||||
Player.EVENT_TIMELINE_CHANGED,
|
Player.EVENT_TIMELINE_CHANGED,
|
||||||
listener -> listener.onTimelineChanged(newState.timeline, timelineChangeReason));
|
listener -> listener.onTimelineChanged(newState.timeline, timelineChangeReason));
|
||||||
@ -2564,7 +2562,7 @@ public abstract class SimpleBasePlayer extends BasePlayer {
|
|||||||
MediaItem mediaItem =
|
MediaItem mediaItem =
|
||||||
state.timeline.isEmpty()
|
state.timeline.isEmpty()
|
||||||
? null
|
? null
|
||||||
: state.playlistItems.get(state.currentMediaItemIndex).mediaItem;
|
: state.playlist.get(state.currentMediaItemIndex).mediaItem;
|
||||||
listeners.queueEvent(
|
listeners.queueEvent(
|
||||||
Player.EVENT_MEDIA_ITEM_TRANSITION,
|
Player.EVENT_MEDIA_ITEM_TRANSITION,
|
||||||
listener -> listener.onMediaItemTransition(mediaItem, mediaItemTransitionReason));
|
listener -> listener.onMediaItemTransition(mediaItem, mediaItemTransitionReason));
|
||||||
@ -2792,15 +2790,15 @@ public abstract class SimpleBasePlayer extends BasePlayer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static Tracks getCurrentTracksInternal(State state) {
|
private static Tracks getCurrentTracksInternal(State state) {
|
||||||
return state.playlistItems.isEmpty()
|
return state.playlist.isEmpty()
|
||||||
? Tracks.EMPTY
|
? Tracks.EMPTY
|
||||||
: state.playlistItems.get(state.currentMediaItemIndex).tracks;
|
: state.playlist.get(state.currentMediaItemIndex).tracks;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static MediaMetadata getMediaMetadataInternal(State state) {
|
private static MediaMetadata getMediaMetadataInternal(State state) {
|
||||||
return state.playlistItems.isEmpty()
|
return state.playlist.isEmpty()
|
||||||
? MediaMetadata.EMPTY
|
? MediaMetadata.EMPTY
|
||||||
: state.playlistItems.get(state.currentMediaItemIndex).combinedMediaMetadata;
|
: state.playlist.get(state.currentMediaItemIndex).combinedMediaMetadata;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static int getCurrentPeriodIndexInternal(State state, Timeline.Window window) {
|
private static int getCurrentPeriodIndexInternal(State state, Timeline.Window window) {
|
||||||
@ -2814,7 +2812,7 @@ public abstract class SimpleBasePlayer extends BasePlayer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static @Player.TimelineChangeReason int getTimelineChangeReason(
|
private static @Player.TimelineChangeReason int getTimelineChangeReason(
|
||||||
List<PlaylistItem> previousPlaylist, List<PlaylistItem> newPlaylist) {
|
List<MediaItemData> previousPlaylist, List<MediaItemData> newPlaylist) {
|
||||||
if (previousPlaylist.size() != newPlaylist.size()) {
|
if (previousPlaylist.size() != newPlaylist.size()) {
|
||||||
return Player.TIMELINE_CHANGE_REASON_PLAYLIST_CHANGED;
|
return Player.TIMELINE_CHANGE_REASON_PLAYLIST_CHANGED;
|
||||||
}
|
}
|
||||||
@ -2832,11 +2830,11 @@ public abstract class SimpleBasePlayer extends BasePlayer {
|
|||||||
// We were asked to report a discontinuity.
|
// We were asked to report a discontinuity.
|
||||||
return newState.positionDiscontinuityReason;
|
return newState.positionDiscontinuityReason;
|
||||||
}
|
}
|
||||||
if (previousState.playlistItems.isEmpty()) {
|
if (previousState.playlist.isEmpty()) {
|
||||||
// First change from an empty timeline is not reported as a discontinuity.
|
// First change from an empty playlist is not reported as a discontinuity.
|
||||||
return C.INDEX_UNSET;
|
return C.INDEX_UNSET;
|
||||||
}
|
}
|
||||||
if (newState.playlistItems.isEmpty()) {
|
if (newState.playlist.isEmpty()) {
|
||||||
// The playlist became empty.
|
// The playlist became empty.
|
||||||
return Player.DISCONTINUITY_REASON_REMOVE;
|
return Player.DISCONTINUITY_REASON_REMOVE;
|
||||||
}
|
}
|
||||||
|
@ -110,15 +110,15 @@ public class SimpleBasePlayerTest {
|
|||||||
.setTimedMetadata(new Metadata())
|
.setTimedMetadata(new Metadata())
|
||||||
.setPlaylist(
|
.setPlaylist(
|
||||||
ImmutableList.of(
|
ImmutableList.of(
|
||||||
new SimpleBasePlayer.PlaylistItem.Builder(/* uid= */ new Object()).build(),
|
new SimpleBasePlayer.MediaItemData.Builder(/* uid= */ new Object()).build(),
|
||||||
new SimpleBasePlayer.PlaylistItem.Builder(/* uid= */ new Object())
|
new SimpleBasePlayer.MediaItemData.Builder(/* uid= */ new Object())
|
||||||
.setPeriods(
|
.setPeriods(
|
||||||
ImmutableList.of(
|
ImmutableList.of(
|
||||||
new SimpleBasePlayer.PeriodData.Builder(/* uid= */ new Object())
|
new SimpleBasePlayer.PeriodData.Builder(/* uid= */ new Object())
|
||||||
.setAdPlaybackState(
|
.setAdPlaybackState(
|
||||||
new AdPlaybackState(
|
new AdPlaybackState(
|
||||||
/* adsId= */ new Object(),
|
/* adsId= */ new Object(),
|
||||||
/* adGroupTimesUs= */ 555,
|
/* adGroupTimesUs...= */ 555,
|
||||||
666))
|
666))
|
||||||
.build()))
|
.build()))
|
||||||
.build()))
|
.build()))
|
||||||
@ -142,9 +142,9 @@ public class SimpleBasePlayerTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void playlistItemBuildUpon_build_isEqual() {
|
public void mediaItemDataBuildUpon_build_isEqual() {
|
||||||
SimpleBasePlayer.PlaylistItem playlistItem =
|
SimpleBasePlayer.MediaItemData mediaItemData =
|
||||||
new SimpleBasePlayer.PlaylistItem.Builder(/* uid= */ new Object())
|
new SimpleBasePlayer.MediaItemData.Builder(/* uid= */ new Object())
|
||||||
.setTracks(
|
.setTracks(
|
||||||
new Tracks(
|
new Tracks(
|
||||||
ImmutableList.of(
|
ImmutableList.of(
|
||||||
@ -172,10 +172,10 @@ public class SimpleBasePlayerTest {
|
|||||||
new SimpleBasePlayer.PeriodData.Builder(/* uid= */ new Object()).build()))
|
new SimpleBasePlayer.PeriodData.Builder(/* uid= */ new Object()).build()))
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
SimpleBasePlayer.PlaylistItem newPlaylistItem = playlistItem.buildUpon().build();
|
SimpleBasePlayer.MediaItemData newMediaItemData = mediaItemData.buildUpon().build();
|
||||||
|
|
||||||
assertThat(newPlaylistItem).isEqualTo(playlistItem);
|
assertThat(newMediaItemData).isEqualTo(mediaItemData);
|
||||||
assertThat(newPlaylistItem.hashCode()).isEqualTo(playlistItem.hashCode());
|
assertThat(newMediaItemData.hashCode()).isEqualTo(mediaItemData.hashCode());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@ -185,7 +185,7 @@ public class SimpleBasePlayerTest {
|
|||||||
.setIsPlaceholder(true)
|
.setIsPlaceholder(true)
|
||||||
.setDurationUs(600_000)
|
.setDurationUs(600_000)
|
||||||
.setAdPlaybackState(
|
.setAdPlaybackState(
|
||||||
new AdPlaybackState(/* adsId= */ new Object(), /* adGroupTimesUs= */ 555, 666))
|
new AdPlaybackState(/* adsId= */ new Object(), /* adGroupTimesUs...= */ 555, 666))
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
SimpleBasePlayer.PeriodData newPeriodData = periodData.buildUpon().build();
|
SimpleBasePlayer.PeriodData newPeriodData = periodData.buildUpon().build();
|
||||||
@ -220,16 +220,16 @@ public class SimpleBasePlayerTest {
|
|||||||
Size surfaceSize = new Size(480, 360);
|
Size surfaceSize = new Size(480, 360);
|
||||||
DeviceInfo deviceInfo =
|
DeviceInfo deviceInfo =
|
||||||
new DeviceInfo(DeviceInfo.PLAYBACK_TYPE_LOCAL, /* minVolume= */ 3, /* maxVolume= */ 7);
|
new DeviceInfo(DeviceInfo.PLAYBACK_TYPE_LOCAL, /* minVolume= */ 3, /* maxVolume= */ 7);
|
||||||
ImmutableList<SimpleBasePlayer.PlaylistItem> playlist =
|
ImmutableList<SimpleBasePlayer.MediaItemData> playlist =
|
||||||
ImmutableList.of(
|
ImmutableList.of(
|
||||||
new SimpleBasePlayer.PlaylistItem.Builder(/* uid= */ new Object()).build(),
|
new SimpleBasePlayer.MediaItemData.Builder(/* uid= */ new Object()).build(),
|
||||||
new SimpleBasePlayer.PlaylistItem.Builder(/* uid= */ new Object())
|
new SimpleBasePlayer.MediaItemData.Builder(/* uid= */ new Object())
|
||||||
.setPeriods(
|
.setPeriods(
|
||||||
ImmutableList.of(
|
ImmutableList.of(
|
||||||
new SimpleBasePlayer.PeriodData.Builder(/* uid= */ new Object())
|
new SimpleBasePlayer.PeriodData.Builder(/* uid= */ new Object())
|
||||||
.setAdPlaybackState(
|
.setAdPlaybackState(
|
||||||
new AdPlaybackState(
|
new AdPlaybackState(
|
||||||
/* adsId= */ new Object(), /* adGroupTimesUs= */ 555, 666))
|
/* adsId= */ new Object(), /* adGroupTimesUs...= */ 555, 666))
|
||||||
.build()))
|
.build()))
|
||||||
.build());
|
.build());
|
||||||
MediaMetadata playlistMetadata = new MediaMetadata.Builder().setArtist("artist").build();
|
MediaMetadata playlistMetadata = new MediaMetadata.Builder().setArtist("artist").build();
|
||||||
@ -312,7 +312,7 @@ public class SimpleBasePlayerTest {
|
|||||||
assertThat(state.surfaceSize).isEqualTo(surfaceSize);
|
assertThat(state.surfaceSize).isEqualTo(surfaceSize);
|
||||||
assertThat(state.newlyRenderedFirstFrame).isTrue();
|
assertThat(state.newlyRenderedFirstFrame).isTrue();
|
||||||
assertThat(state.timedMetadata).isEqualTo(timedMetadata);
|
assertThat(state.timedMetadata).isEqualTo(timedMetadata);
|
||||||
assertThat(state.playlistItems).isEqualTo(playlist);
|
assertThat(state.playlist).isEqualTo(playlist);
|
||||||
assertThat(state.playlistMetadata).isEqualTo(playlistMetadata);
|
assertThat(state.playlistMetadata).isEqualTo(playlistMetadata);
|
||||||
assertThat(state.currentMediaItemIndex).isEqualTo(1);
|
assertThat(state.currentMediaItemIndex).isEqualTo(1);
|
||||||
assertThat(state.currentPeriodIndex).isEqualTo(1);
|
assertThat(state.currentPeriodIndex).isEqualTo(1);
|
||||||
@ -369,8 +369,9 @@ public class SimpleBasePlayerTest {
|
|||||||
new SimpleBasePlayer.State.Builder()
|
new SimpleBasePlayer.State.Builder()
|
||||||
.setPlaylist(
|
.setPlaylist(
|
||||||
ImmutableList.of(
|
ImmutableList.of(
|
||||||
new SimpleBasePlayer.PlaylistItem.Builder(/* uid= */ new Object()).build(),
|
new SimpleBasePlayer.MediaItemData.Builder(/* uid= */ new Object()).build(),
|
||||||
new SimpleBasePlayer.PlaylistItem.Builder(/* uid= */ new Object()).build()))
|
new SimpleBasePlayer.MediaItemData.Builder(/* uid= */ new Object())
|
||||||
|
.build()))
|
||||||
.setCurrentMediaItemIndex(2)
|
.setCurrentMediaItemIndex(2)
|
||||||
.build());
|
.build());
|
||||||
}
|
}
|
||||||
@ -383,8 +384,9 @@ public class SimpleBasePlayerTest {
|
|||||||
new SimpleBasePlayer.State.Builder()
|
new SimpleBasePlayer.State.Builder()
|
||||||
.setPlaylist(
|
.setPlaylist(
|
||||||
ImmutableList.of(
|
ImmutableList.of(
|
||||||
new SimpleBasePlayer.PlaylistItem.Builder(/* uid= */ new Object()).build(),
|
new SimpleBasePlayer.MediaItemData.Builder(/* uid= */ new Object()).build(),
|
||||||
new SimpleBasePlayer.PlaylistItem.Builder(/* uid= */ new Object()).build()))
|
new SimpleBasePlayer.MediaItemData.Builder(/* uid= */ new Object())
|
||||||
|
.build()))
|
||||||
.setCurrentPeriodIndex(2)
|
.setCurrentPeriodIndex(2)
|
||||||
.build());
|
.build());
|
||||||
}
|
}
|
||||||
@ -397,8 +399,9 @@ public class SimpleBasePlayerTest {
|
|||||||
new SimpleBasePlayer.State.Builder()
|
new SimpleBasePlayer.State.Builder()
|
||||||
.setPlaylist(
|
.setPlaylist(
|
||||||
ImmutableList.of(
|
ImmutableList.of(
|
||||||
new SimpleBasePlayer.PlaylistItem.Builder(/* uid= */ new Object()).build(),
|
new SimpleBasePlayer.MediaItemData.Builder(/* uid= */ new Object()).build(),
|
||||||
new SimpleBasePlayer.PlaylistItem.Builder(/* uid= */ new Object()).build()))
|
new SimpleBasePlayer.MediaItemData.Builder(/* uid= */ new Object())
|
||||||
|
.build()))
|
||||||
.setCurrentMediaItemIndex(0)
|
.setCurrentMediaItemIndex(0)
|
||||||
.setCurrentPeriodIndex(1)
|
.setCurrentPeriodIndex(1)
|
||||||
.build());
|
.build());
|
||||||
@ -412,14 +415,14 @@ public class SimpleBasePlayerTest {
|
|||||||
new SimpleBasePlayer.State.Builder()
|
new SimpleBasePlayer.State.Builder()
|
||||||
.setPlaylist(
|
.setPlaylist(
|
||||||
ImmutableList.of(
|
ImmutableList.of(
|
||||||
new SimpleBasePlayer.PlaylistItem.Builder(/* uid= */ new Object())
|
new SimpleBasePlayer.MediaItemData.Builder(/* uid= */ new Object())
|
||||||
.setPeriods(
|
.setPeriods(
|
||||||
ImmutableList.of(
|
ImmutableList.of(
|
||||||
new SimpleBasePlayer.PeriodData.Builder(/* uid= */ new Object())
|
new SimpleBasePlayer.PeriodData.Builder(/* uid= */ new Object())
|
||||||
.setAdPlaybackState(
|
.setAdPlaybackState(
|
||||||
new AdPlaybackState(
|
new AdPlaybackState(
|
||||||
/* adsId= */ new Object(),
|
/* adsId= */ new Object(),
|
||||||
/* adGroupTimesUs= */ 123))
|
/* adGroupTimesUs...= */ 123))
|
||||||
.build()))
|
.build()))
|
||||||
.build()))
|
.build()))
|
||||||
.setCurrentAd(/* adGroupIndex= */ 1, /* adIndexInAdGroup= */ 2)
|
.setCurrentAd(/* adGroupIndex= */ 1, /* adIndexInAdGroup= */ 2)
|
||||||
@ -434,14 +437,14 @@ public class SimpleBasePlayerTest {
|
|||||||
new SimpleBasePlayer.State.Builder()
|
new SimpleBasePlayer.State.Builder()
|
||||||
.setPlaylist(
|
.setPlaylist(
|
||||||
ImmutableList.of(
|
ImmutableList.of(
|
||||||
new SimpleBasePlayer.PlaylistItem.Builder(/* uid= */ new Object())
|
new SimpleBasePlayer.MediaItemData.Builder(/* uid= */ new Object())
|
||||||
.setPeriods(
|
.setPeriods(
|
||||||
ImmutableList.of(
|
ImmutableList.of(
|
||||||
new SimpleBasePlayer.PeriodData.Builder(/* uid= */ new Object())
|
new SimpleBasePlayer.PeriodData.Builder(/* uid= */ new Object())
|
||||||
.setAdPlaybackState(
|
.setAdPlaybackState(
|
||||||
new AdPlaybackState(
|
new AdPlaybackState(
|
||||||
/* adsId= */ new Object(),
|
/* adsId= */ new Object(),
|
||||||
/* adGroupTimesUs= */ 123)
|
/* adGroupTimesUs...= */ 123)
|
||||||
.withAdCount(
|
.withAdCount(
|
||||||
/* adGroupIndex= */ 0, /* adCount= */ 2))
|
/* adGroupIndex= */ 0, /* adCount= */ 2))
|
||||||
.build()))
|
.build()))
|
||||||
@ -466,7 +469,7 @@ public class SimpleBasePlayerTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void stateBuilderBuild_multiplePlaylistItemsWithSameIds_throwsException() {
|
public void stateBuilderBuild_multipleMediaItemsWithSameIds_throwsException() {
|
||||||
Object uid = new Object();
|
Object uid = new Object();
|
||||||
|
|
||||||
assertThrows(
|
assertThrows(
|
||||||
@ -475,8 +478,8 @@ public class SimpleBasePlayerTest {
|
|||||||
new SimpleBasePlayer.State.Builder()
|
new SimpleBasePlayer.State.Builder()
|
||||||
.setPlaylist(
|
.setPlaylist(
|
||||||
ImmutableList.of(
|
ImmutableList.of(
|
||||||
new SimpleBasePlayer.PlaylistItem.Builder(uid).build(),
|
new SimpleBasePlayer.MediaItemData.Builder(uid).build(),
|
||||||
new SimpleBasePlayer.PlaylistItem.Builder(uid).build()))
|
new SimpleBasePlayer.MediaItemData.Builder(uid).build()))
|
||||||
.build());
|
.build());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -517,7 +520,7 @@ public class SimpleBasePlayerTest {
|
|||||||
new SimpleBasePlayer.State.Builder()
|
new SimpleBasePlayer.State.Builder()
|
||||||
.setPlaylist(
|
.setPlaylist(
|
||||||
ImmutableList.of(
|
ImmutableList.of(
|
||||||
new SimpleBasePlayer.PlaylistItem.Builder(/* uid= */ new Object()).build()))
|
new SimpleBasePlayer.MediaItemData.Builder(/* uid= */ new Object()).build()))
|
||||||
.setContentPositionMs(4000)
|
.setContentPositionMs(4000)
|
||||||
.setPlayWhenReady(true, Player.PLAY_WHEN_READY_CHANGE_REASON_USER_REQUEST)
|
.setPlayWhenReady(true, Player.PLAY_WHEN_READY_CHANGE_REASON_USER_REQUEST)
|
||||||
.setPlaybackState(Player.STATE_READY)
|
.setPlaybackState(Player.STATE_READY)
|
||||||
@ -539,7 +542,7 @@ public class SimpleBasePlayerTest {
|
|||||||
new SimpleBasePlayer.State.Builder()
|
new SimpleBasePlayer.State.Builder()
|
||||||
.setPlaylist(
|
.setPlaylist(
|
||||||
ImmutableList.of(
|
ImmutableList.of(
|
||||||
new SimpleBasePlayer.PlaylistItem.Builder(/* uid= */ new Object()).build()))
|
new SimpleBasePlayer.MediaItemData.Builder(/* uid= */ new Object()).build()))
|
||||||
.setContentPositionMs(4000)
|
.setContentPositionMs(4000)
|
||||||
.setPlaybackState(Player.STATE_BUFFERING)
|
.setPlaybackState(Player.STATE_BUFFERING)
|
||||||
.build();
|
.build();
|
||||||
@ -559,14 +562,14 @@ public class SimpleBasePlayerTest {
|
|||||||
new SimpleBasePlayer.State.Builder()
|
new SimpleBasePlayer.State.Builder()
|
||||||
.setPlaylist(
|
.setPlaylist(
|
||||||
ImmutableList.of(
|
ImmutableList.of(
|
||||||
new SimpleBasePlayer.PlaylistItem.Builder(/* uid= */ new Object())
|
new SimpleBasePlayer.MediaItemData.Builder(/* uid= */ new Object())
|
||||||
.setPeriods(
|
.setPeriods(
|
||||||
ImmutableList.of(
|
ImmutableList.of(
|
||||||
new SimpleBasePlayer.PeriodData.Builder(/* uid= */ new Object())
|
new SimpleBasePlayer.PeriodData.Builder(/* uid= */ new Object())
|
||||||
.setAdPlaybackState(
|
.setAdPlaybackState(
|
||||||
new AdPlaybackState(
|
new AdPlaybackState(
|
||||||
/* adsId= */ new Object(),
|
/* adsId= */ new Object(),
|
||||||
/* adGroupTimesUs= */ 123)
|
/* adGroupTimesUs...= */ 123)
|
||||||
.withAdCount(/* adGroupIndex= */ 0, /* adCount= */ 2))
|
.withAdCount(/* adGroupIndex= */ 0, /* adCount= */ 2))
|
||||||
.build()))
|
.build()))
|
||||||
.build()))
|
.build()))
|
||||||
@ -593,14 +596,14 @@ public class SimpleBasePlayerTest {
|
|||||||
new SimpleBasePlayer.State.Builder()
|
new SimpleBasePlayer.State.Builder()
|
||||||
.setPlaylist(
|
.setPlaylist(
|
||||||
ImmutableList.of(
|
ImmutableList.of(
|
||||||
new SimpleBasePlayer.PlaylistItem.Builder(/* uid= */ new Object())
|
new SimpleBasePlayer.MediaItemData.Builder(/* uid= */ new Object())
|
||||||
.setPeriods(
|
.setPeriods(
|
||||||
ImmutableList.of(
|
ImmutableList.of(
|
||||||
new SimpleBasePlayer.PeriodData.Builder(/* uid= */ new Object())
|
new SimpleBasePlayer.PeriodData.Builder(/* uid= */ new Object())
|
||||||
.setAdPlaybackState(
|
.setAdPlaybackState(
|
||||||
new AdPlaybackState(
|
new AdPlaybackState(
|
||||||
/* adsId= */ new Object(),
|
/* adsId= */ new Object(),
|
||||||
/* adGroupTimesUs= */ 123)
|
/* adGroupTimesUs...= */ 123)
|
||||||
.withAdCount(/* adGroupIndex= */ 0, /* adCount= */ 2))
|
.withAdCount(/* adGroupIndex= */ 0, /* adCount= */ 2))
|
||||||
.build()))
|
.build()))
|
||||||
.build()))
|
.build()))
|
||||||
@ -617,7 +620,7 @@ public class SimpleBasePlayerTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void playlistItemBuilderBuild_setsCorrectValues() {
|
public void mediaItemDataBuilderBuild_setsCorrectValues() {
|
||||||
Object uid = new Object();
|
Object uid = new Object();
|
||||||
Tracks tracks =
|
Tracks tracks =
|
||||||
new Tracks(
|
new Tracks(
|
||||||
@ -635,8 +638,8 @@ public class SimpleBasePlayerTest {
|
|||||||
ImmutableList<SimpleBasePlayer.PeriodData> periods =
|
ImmutableList<SimpleBasePlayer.PeriodData> periods =
|
||||||
ImmutableList.of(new SimpleBasePlayer.PeriodData.Builder(/* uid= */ new Object()).build());
|
ImmutableList.of(new SimpleBasePlayer.PeriodData.Builder(/* uid= */ new Object()).build());
|
||||||
|
|
||||||
SimpleBasePlayer.PlaylistItem playlistItem =
|
SimpleBasePlayer.MediaItemData mediaItemData =
|
||||||
new SimpleBasePlayer.PlaylistItem.Builder(uid)
|
new SimpleBasePlayer.MediaItemData.Builder(uid)
|
||||||
.setTracks(tracks)
|
.setTracks(tracks)
|
||||||
.setMediaItem(mediaItem)
|
.setMediaItem(mediaItem)
|
||||||
.setMediaMetadata(mediaMetadata)
|
.setMediaMetadata(mediaMetadata)
|
||||||
@ -654,61 +657,61 @@ public class SimpleBasePlayerTest {
|
|||||||
.setPeriods(periods)
|
.setPeriods(periods)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
assertThat(playlistItem.uid).isEqualTo(uid);
|
assertThat(mediaItemData.uid).isEqualTo(uid);
|
||||||
assertThat(playlistItem.tracks).isEqualTo(tracks);
|
assertThat(mediaItemData.tracks).isEqualTo(tracks);
|
||||||
assertThat(playlistItem.mediaItem).isEqualTo(mediaItem);
|
assertThat(mediaItemData.mediaItem).isEqualTo(mediaItem);
|
||||||
assertThat(playlistItem.mediaMetadata).isEqualTo(mediaMetadata);
|
assertThat(mediaItemData.mediaMetadata).isEqualTo(mediaMetadata);
|
||||||
assertThat(playlistItem.manifest).isEqualTo(manifest);
|
assertThat(mediaItemData.manifest).isEqualTo(manifest);
|
||||||
assertThat(playlistItem.liveConfiguration).isEqualTo(liveConfiguration);
|
assertThat(mediaItemData.liveConfiguration).isEqualTo(liveConfiguration);
|
||||||
assertThat(playlistItem.presentationStartTimeMs).isEqualTo(12);
|
assertThat(mediaItemData.presentationStartTimeMs).isEqualTo(12);
|
||||||
assertThat(playlistItem.windowStartTimeMs).isEqualTo(23);
|
assertThat(mediaItemData.windowStartTimeMs).isEqualTo(23);
|
||||||
assertThat(playlistItem.elapsedRealtimeEpochOffsetMs).isEqualTo(10234);
|
assertThat(mediaItemData.elapsedRealtimeEpochOffsetMs).isEqualTo(10234);
|
||||||
assertThat(playlistItem.isSeekable).isTrue();
|
assertThat(mediaItemData.isSeekable).isTrue();
|
||||||
assertThat(playlistItem.isDynamic).isTrue();
|
assertThat(mediaItemData.isDynamic).isTrue();
|
||||||
assertThat(playlistItem.defaultPositionUs).isEqualTo(456_789);
|
assertThat(mediaItemData.defaultPositionUs).isEqualTo(456_789);
|
||||||
assertThat(playlistItem.durationUs).isEqualTo(500_000);
|
assertThat(mediaItemData.durationUs).isEqualTo(500_000);
|
||||||
assertThat(playlistItem.positionInFirstPeriodUs).isEqualTo(100_000);
|
assertThat(mediaItemData.positionInFirstPeriodUs).isEqualTo(100_000);
|
||||||
assertThat(playlistItem.isPlaceholder).isTrue();
|
assertThat(mediaItemData.isPlaceholder).isTrue();
|
||||||
assertThat(playlistItem.periods).isEqualTo(periods);
|
assertThat(mediaItemData.periods).isEqualTo(periods);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void playlistItemBuilderBuild_presentationStartTimeIfNotLive_throwsException() {
|
public void mediaItemDataBuilderBuild_presentationStartTimeIfNotLive_throwsException() {
|
||||||
assertThrows(
|
assertThrows(
|
||||||
IllegalArgumentException.class,
|
IllegalArgumentException.class,
|
||||||
() ->
|
() ->
|
||||||
new SimpleBasePlayer.PlaylistItem.Builder(/* uid= */ new Object())
|
new SimpleBasePlayer.MediaItemData.Builder(/* uid= */ new Object())
|
||||||
.setPresentationStartTimeMs(12)
|
.setPresentationStartTimeMs(12)
|
||||||
.build());
|
.build());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void playlistItemBuilderBuild_windowStartTimeIfNotLive_throwsException() {
|
public void mediaItemDataBuilderBuild_windowStartTimeIfNotLive_throwsException() {
|
||||||
assertThrows(
|
assertThrows(
|
||||||
IllegalArgumentException.class,
|
IllegalArgumentException.class,
|
||||||
() ->
|
() ->
|
||||||
new SimpleBasePlayer.PlaylistItem.Builder(/* uid= */ new Object())
|
new SimpleBasePlayer.MediaItemData.Builder(/* uid= */ new Object())
|
||||||
.setWindowStartTimeMs(12)
|
.setWindowStartTimeMs(12)
|
||||||
.build());
|
.build());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void playlistItemBuilderBuild_elapsedEpochOffsetIfNotLive_throwsException() {
|
public void mediaItemDataBuilderBuild_elapsedEpochOffsetIfNotLive_throwsException() {
|
||||||
assertThrows(
|
assertThrows(
|
||||||
IllegalArgumentException.class,
|
IllegalArgumentException.class,
|
||||||
() ->
|
() ->
|
||||||
new SimpleBasePlayer.PlaylistItem.Builder(/* uid= */ new Object())
|
new SimpleBasePlayer.MediaItemData.Builder(/* uid= */ new Object())
|
||||||
.setElapsedRealtimeEpochOffsetMs(12)
|
.setElapsedRealtimeEpochOffsetMs(12)
|
||||||
.build());
|
.build());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void
|
public void
|
||||||
playlistItemBuilderBuild_windowStartTimeLessThanPresentationStartTime_throwsException() {
|
mediaItemDataBuilderBuild_windowStartTimeLessThanPresentationStartTime_throwsException() {
|
||||||
assertThrows(
|
assertThrows(
|
||||||
IllegalArgumentException.class,
|
IllegalArgumentException.class,
|
||||||
() ->
|
() ->
|
||||||
new SimpleBasePlayer.PlaylistItem.Builder(/* uid= */ new Object())
|
new SimpleBasePlayer.MediaItemData.Builder(/* uid= */ new Object())
|
||||||
.setLiveConfiguration(MediaItem.LiveConfiguration.UNSET)
|
.setLiveConfiguration(MediaItem.LiveConfiguration.UNSET)
|
||||||
.setWindowStartTimeMs(12)
|
.setWindowStartTimeMs(12)
|
||||||
.setPresentationStartTimeMs(13)
|
.setPresentationStartTimeMs(13)
|
||||||
@ -716,13 +719,13 @@ public class SimpleBasePlayerTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void playlistItemBuilderBuild_multiplePeriodsWithSameUid_throwsException() {
|
public void mediaItemDataBuilderBuild_multiplePeriodsWithSameUid_throwsException() {
|
||||||
Object uid = new Object();
|
Object uid = new Object();
|
||||||
|
|
||||||
assertThrows(
|
assertThrows(
|
||||||
IllegalArgumentException.class,
|
IllegalArgumentException.class,
|
||||||
() ->
|
() ->
|
||||||
new SimpleBasePlayer.PlaylistItem.Builder(/* uid= */ new Object())
|
new SimpleBasePlayer.MediaItemData.Builder(/* uid= */ new Object())
|
||||||
.setPeriods(
|
.setPeriods(
|
||||||
ImmutableList.of(
|
ImmutableList.of(
|
||||||
new SimpleBasePlayer.PeriodData.Builder(uid).build(),
|
new SimpleBasePlayer.PeriodData.Builder(uid).build(),
|
||||||
@ -731,11 +734,11 @@ public class SimpleBasePlayerTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void playlistItemBuilderBuild_defaultPositionGreaterThanDuration_throwsException() {
|
public void mediaItemDataBuilderBuild_defaultPositionGreaterThanDuration_throwsException() {
|
||||||
assertThrows(
|
assertThrows(
|
||||||
IllegalArgumentException.class,
|
IllegalArgumentException.class,
|
||||||
() ->
|
() ->
|
||||||
new SimpleBasePlayer.PlaylistItem.Builder(/* uid= */ new Object())
|
new SimpleBasePlayer.MediaItemData.Builder(/* uid= */ new Object())
|
||||||
.setDefaultPositionUs(16)
|
.setDefaultPositionUs(16)
|
||||||
.setDurationUs(15)
|
.setDurationUs(15)
|
||||||
.build());
|
.build());
|
||||||
@ -745,7 +748,7 @@ public class SimpleBasePlayerTest {
|
|||||||
public void periodDataBuilderBuild_setsCorrectValues() {
|
public void periodDataBuilderBuild_setsCorrectValues() {
|
||||||
Object uid = new Object();
|
Object uid = new Object();
|
||||||
AdPlaybackState adPlaybackState =
|
AdPlaybackState adPlaybackState =
|
||||||
new AdPlaybackState(/* adsId= */ new Object(), /* adGroupTimesUs= */ 555, 666);
|
new AdPlaybackState(/* adsId= */ new Object(), /* adGroupTimesUs...= */ 555, 666);
|
||||||
|
|
||||||
SimpleBasePlayer.PeriodData periodData =
|
SimpleBasePlayer.PeriodData periodData =
|
||||||
new SimpleBasePlayer.PeriodData.Builder(uid)
|
new SimpleBasePlayer.PeriodData.Builder(uid)
|
||||||
@ -788,7 +791,7 @@ public class SimpleBasePlayerTest {
|
|||||||
SimpleBasePlayer.PositionSupplier contentPositionSupplier = () -> 456;
|
SimpleBasePlayer.PositionSupplier contentPositionSupplier = () -> 456;
|
||||||
SimpleBasePlayer.PositionSupplier contentBufferedPositionSupplier = () -> 499;
|
SimpleBasePlayer.PositionSupplier contentBufferedPositionSupplier = () -> 499;
|
||||||
SimpleBasePlayer.PositionSupplier totalBufferedPositionSupplier = () -> 567;
|
SimpleBasePlayer.PositionSupplier totalBufferedPositionSupplier = () -> 567;
|
||||||
Object playlistItemUid = new Object();
|
Object mediaItemUid = new Object();
|
||||||
Object periodUid = new Object();
|
Object periodUid = new Object();
|
||||||
Tracks tracks =
|
Tracks tracks =
|
||||||
new Tracks(
|
new Tracks(
|
||||||
@ -804,10 +807,10 @@ public class SimpleBasePlayerTest {
|
|||||||
Size surfaceSize = new Size(480, 360);
|
Size surfaceSize = new Size(480, 360);
|
||||||
MediaItem.LiveConfiguration liveConfiguration =
|
MediaItem.LiveConfiguration liveConfiguration =
|
||||||
new MediaItem.LiveConfiguration.Builder().setTargetOffsetMs(2000).build();
|
new MediaItem.LiveConfiguration.Builder().setTargetOffsetMs(2000).build();
|
||||||
ImmutableList<SimpleBasePlayer.PlaylistItem> playlist =
|
ImmutableList<SimpleBasePlayer.MediaItemData> playlist =
|
||||||
ImmutableList.of(
|
ImmutableList.of(
|
||||||
new SimpleBasePlayer.PlaylistItem.Builder(/* uid= */ new Object()).build(),
|
new SimpleBasePlayer.MediaItemData.Builder(/* uid= */ new Object()).build(),
|
||||||
new SimpleBasePlayer.PlaylistItem.Builder(playlistItemUid)
|
new SimpleBasePlayer.MediaItemData.Builder(mediaItemUid)
|
||||||
.setTracks(tracks)
|
.setTracks(tracks)
|
||||||
.setMediaItem(mediaItem)
|
.setMediaItem(mediaItem)
|
||||||
.setMediaMetadata(mediaMetadata)
|
.setMediaMetadata(mediaMetadata)
|
||||||
@ -829,7 +832,7 @@ public class SimpleBasePlayerTest {
|
|||||||
.setDurationUs(600_000)
|
.setDurationUs(600_000)
|
||||||
.setAdPlaybackState(
|
.setAdPlaybackState(
|
||||||
new AdPlaybackState(
|
new AdPlaybackState(
|
||||||
/* adsId= */ new Object(), /* adGroupTimesUs= */ 555, 666))
|
/* adsId= */ new Object(), /* adGroupTimesUs...= */ 555, 666))
|
||||||
.build()))
|
.build()))
|
||||||
.build());
|
.build());
|
||||||
State state =
|
State state =
|
||||||
@ -948,7 +951,7 @@ public class SimpleBasePlayerTest {
|
|||||||
assertThat(window.liveConfiguration).isEqualTo(liveConfiguration);
|
assertThat(window.liveConfiguration).isEqualTo(liveConfiguration);
|
||||||
assertThat(window.manifest).isEqualTo(manifest);
|
assertThat(window.manifest).isEqualTo(manifest);
|
||||||
assertThat(window.mediaItem).isEqualTo(mediaItem);
|
assertThat(window.mediaItem).isEqualTo(mediaItem);
|
||||||
assertThat(window.uid).isEqualTo(playlistItemUid);
|
assertThat(window.uid).isEqualTo(mediaItemUid);
|
||||||
Timeline.Period period =
|
Timeline.Period period =
|
||||||
timeline.getPeriod(/* periodIndex= */ 0, new Timeline.Period(), /* setIds= */ true);
|
timeline.getPeriod(/* periodIndex= */ 0, new Timeline.Period(), /* setIds= */ true);
|
||||||
assertThat(period.durationUs).isEqualTo(C.TIME_UNSET);
|
assertThat(period.durationUs).isEqualTo(C.TIME_UNSET);
|
||||||
@ -974,10 +977,10 @@ public class SimpleBasePlayerTest {
|
|||||||
SimpleBasePlayer.PositionSupplier totalBufferedPositionSupplier = () -> 567;
|
SimpleBasePlayer.PositionSupplier totalBufferedPositionSupplier = () -> 567;
|
||||||
SimpleBasePlayer.PositionSupplier adPositionSupplier = () -> 321;
|
SimpleBasePlayer.PositionSupplier adPositionSupplier = () -> 321;
|
||||||
SimpleBasePlayer.PositionSupplier adBufferedPositionSupplier = () -> 345;
|
SimpleBasePlayer.PositionSupplier adBufferedPositionSupplier = () -> 345;
|
||||||
ImmutableList<SimpleBasePlayer.PlaylistItem> playlist =
|
ImmutableList<SimpleBasePlayer.MediaItemData> playlist =
|
||||||
ImmutableList.of(
|
ImmutableList.of(
|
||||||
new SimpleBasePlayer.PlaylistItem.Builder(/* uid= */ new Object()).build(),
|
new SimpleBasePlayer.MediaItemData.Builder(/* uid= */ new Object()).build(),
|
||||||
new SimpleBasePlayer.PlaylistItem.Builder(/* uid= */ new Object())
|
new SimpleBasePlayer.MediaItemData.Builder(/* uid= */ new Object())
|
||||||
.setDurationUs(500_000)
|
.setDurationUs(500_000)
|
||||||
.setPeriods(
|
.setPeriods(
|
||||||
ImmutableList.of(
|
ImmutableList.of(
|
||||||
@ -986,7 +989,9 @@ public class SimpleBasePlayerTest {
|
|||||||
.setDurationUs(600_000)
|
.setDurationUs(600_000)
|
||||||
.setAdPlaybackState(
|
.setAdPlaybackState(
|
||||||
new AdPlaybackState(
|
new AdPlaybackState(
|
||||||
/* adsId= */ new Object(), /* adGroupTimesUs= */ 555, 666)
|
/* adsId= */ new Object(), /* adGroupTimesUs...= */
|
||||||
|
555,
|
||||||
|
666)
|
||||||
.withAdCount(/* adGroupIndex= */ 0, /* adCount= */ 1)
|
.withAdCount(/* adGroupIndex= */ 0, /* adCount= */ 1)
|
||||||
.withAdCount(/* adGroupIndex= */ 1, /* adCount= */ 1)
|
.withAdCount(/* adGroupIndex= */ 1, /* adCount= */ 1)
|
||||||
.withAdDurationsUs(
|
.withAdDurationsUs(
|
||||||
@ -1051,8 +1056,8 @@ public class SimpleBasePlayerTest {
|
|||||||
public void invalidateState_updatesStateAndInformsListeners() throws Exception {
|
public void invalidateState_updatesStateAndInformsListeners() throws Exception {
|
||||||
Object mediaItemUid0 = new Object();
|
Object mediaItemUid0 = new Object();
|
||||||
MediaItem mediaItem0 = new MediaItem.Builder().setMediaId("0").build();
|
MediaItem mediaItem0 = new MediaItem.Builder().setMediaId("0").build();
|
||||||
SimpleBasePlayer.PlaylistItem playlistItem0 =
|
SimpleBasePlayer.MediaItemData mediaItemData0 =
|
||||||
new SimpleBasePlayer.PlaylistItem.Builder(mediaItemUid0).setMediaItem(mediaItem0).build();
|
new SimpleBasePlayer.MediaItemData.Builder(mediaItemUid0).setMediaItem(mediaItem0).build();
|
||||||
State state1 =
|
State state1 =
|
||||||
new State.Builder()
|
new State.Builder()
|
||||||
.setAvailableCommands(new Commands.Builder().addAllCommands().build())
|
.setAvailableCommands(new Commands.Builder().addAllCommands().build())
|
||||||
@ -1078,7 +1083,7 @@ public class SimpleBasePlayerTest {
|
|||||||
.setDeviceInfo(DeviceInfo.UNKNOWN)
|
.setDeviceInfo(DeviceInfo.UNKNOWN)
|
||||||
.setDeviceVolume(0)
|
.setDeviceVolume(0)
|
||||||
.setIsDeviceMuted(false)
|
.setIsDeviceMuted(false)
|
||||||
.setPlaylist(ImmutableList.of(playlistItem0))
|
.setPlaylist(ImmutableList.of(mediaItemData0))
|
||||||
.setPlaylistMetadata(MediaMetadata.EMPTY)
|
.setPlaylistMetadata(MediaMetadata.EMPTY)
|
||||||
.setCurrentMediaItemIndex(0)
|
.setCurrentMediaItemIndex(0)
|
||||||
.setContentPositionMs(8_000)
|
.setContentPositionMs(8_000)
|
||||||
@ -1094,8 +1099,8 @@ public class SimpleBasePlayerTest {
|
|||||||
/* adaptiveSupported= */ true,
|
/* adaptiveSupported= */ true,
|
||||||
/* trackSupport= */ new int[] {C.FORMAT_HANDLED},
|
/* trackSupport= */ new int[] {C.FORMAT_HANDLED},
|
||||||
/* trackSelected= */ new boolean[] {true})));
|
/* trackSelected= */ new boolean[] {true})));
|
||||||
SimpleBasePlayer.PlaylistItem playlistItem1 =
|
SimpleBasePlayer.MediaItemData mediaItemData1 =
|
||||||
new SimpleBasePlayer.PlaylistItem.Builder(mediaItemUid1)
|
new SimpleBasePlayer.MediaItemData.Builder(mediaItemUid1)
|
||||||
.setMediaItem(mediaItem1)
|
.setMediaItem(mediaItem1)
|
||||||
.setMediaMetadata(mediaMetadata)
|
.setMediaMetadata(mediaMetadata)
|
||||||
.setTracks(tracks)
|
.setTracks(tracks)
|
||||||
@ -1156,7 +1161,7 @@ public class SimpleBasePlayerTest {
|
|||||||
.setSurfaceSize(surfaceSize)
|
.setSurfaceSize(surfaceSize)
|
||||||
.setNewlyRenderedFirstFrame(true)
|
.setNewlyRenderedFirstFrame(true)
|
||||||
.setTimedMetadata(timedMetadata)
|
.setTimedMetadata(timedMetadata)
|
||||||
.setPlaylist(ImmutableList.of(playlistItem0, playlistItem1))
|
.setPlaylist(ImmutableList.of(mediaItemData0, mediaItemData1))
|
||||||
.setPlaylistMetadata(playlistMetadata)
|
.setPlaylistMetadata(playlistMetadata)
|
||||||
.setCurrentMediaItemIndex(1)
|
.setCurrentMediaItemIndex(1)
|
||||||
.setContentPositionMs(12_000)
|
.setContentPositionMs(12_000)
|
||||||
@ -1297,20 +1302,20 @@ public class SimpleBasePlayerTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void invalidateState_withPlaylistItemDetailChange_reportsTimelineSourceUpdate() {
|
public void invalidateState_withMediaItemDetailChange_reportsTimelineSourceUpdate() {
|
||||||
Object mediaItemUid0 = new Object();
|
Object mediaItemUid0 = new Object();
|
||||||
SimpleBasePlayer.PlaylistItem playlistItem0 =
|
SimpleBasePlayer.MediaItemData mediaItemData0 =
|
||||||
new SimpleBasePlayer.PlaylistItem.Builder(mediaItemUid0).build();
|
new SimpleBasePlayer.MediaItemData.Builder(mediaItemUid0).build();
|
||||||
Object mediaItemUid1 = new Object();
|
Object mediaItemUid1 = new Object();
|
||||||
SimpleBasePlayer.PlaylistItem playlistItem1 =
|
SimpleBasePlayer.MediaItemData mediaItemData1 =
|
||||||
new SimpleBasePlayer.PlaylistItem.Builder(mediaItemUid1).build();
|
new SimpleBasePlayer.MediaItemData.Builder(mediaItemUid1).build();
|
||||||
State state1 =
|
State state1 =
|
||||||
new State.Builder().setPlaylist(ImmutableList.of(playlistItem0, playlistItem1)).build();
|
new State.Builder().setPlaylist(ImmutableList.of(mediaItemData0, mediaItemData1)).build();
|
||||||
SimpleBasePlayer.PlaylistItem playlistItem1Updated =
|
SimpleBasePlayer.MediaItemData mediaItemData1Updated =
|
||||||
new SimpleBasePlayer.PlaylistItem.Builder(mediaItemUid1).setDurationUs(10_000).build();
|
new SimpleBasePlayer.MediaItemData.Builder(mediaItemUid1).setDurationUs(10_000).build();
|
||||||
State state2 =
|
State state2 =
|
||||||
new State.Builder()
|
new State.Builder()
|
||||||
.setPlaylist(ImmutableList.of(playlistItem0, playlistItem1Updated))
|
.setPlaylist(ImmutableList.of(mediaItemData0, mediaItemData1Updated))
|
||||||
.build();
|
.build();
|
||||||
AtomicBoolean returnState2 = new AtomicBoolean();
|
AtomicBoolean returnState2 = new AtomicBoolean();
|
||||||
SimpleBasePlayer player =
|
SimpleBasePlayer player =
|
||||||
@ -1336,21 +1341,21 @@ public class SimpleBasePlayerTest {
|
|||||||
public void invalidateState_withCurrentMediaItemRemoval_reportsDiscontinuityReasonRemoved() {
|
public void invalidateState_withCurrentMediaItemRemoval_reportsDiscontinuityReasonRemoved() {
|
||||||
Object mediaItemUid0 = new Object();
|
Object mediaItemUid0 = new Object();
|
||||||
MediaItem mediaItem0 = new MediaItem.Builder().setMediaId("0").build();
|
MediaItem mediaItem0 = new MediaItem.Builder().setMediaId("0").build();
|
||||||
SimpleBasePlayer.PlaylistItem playlistItem0 =
|
SimpleBasePlayer.MediaItemData mediaItemData0 =
|
||||||
new SimpleBasePlayer.PlaylistItem.Builder(mediaItemUid0).setMediaItem(mediaItem0).build();
|
new SimpleBasePlayer.MediaItemData.Builder(mediaItemUid0).setMediaItem(mediaItem0).build();
|
||||||
Object mediaItemUid1 = new Object();
|
Object mediaItemUid1 = new Object();
|
||||||
MediaItem mediaItem1 = new MediaItem.Builder().setMediaId("1").build();
|
MediaItem mediaItem1 = new MediaItem.Builder().setMediaId("1").build();
|
||||||
SimpleBasePlayer.PlaylistItem playlistItem1 =
|
SimpleBasePlayer.MediaItemData mediaItemData1 =
|
||||||
new SimpleBasePlayer.PlaylistItem.Builder(mediaItemUid1).setMediaItem(mediaItem1).build();
|
new SimpleBasePlayer.MediaItemData.Builder(mediaItemUid1).setMediaItem(mediaItem1).build();
|
||||||
State state1 =
|
State state1 =
|
||||||
new State.Builder()
|
new State.Builder()
|
||||||
.setPlaylist(ImmutableList.of(playlistItem0, playlistItem1))
|
.setPlaylist(ImmutableList.of(mediaItemData0, mediaItemData1))
|
||||||
.setCurrentMediaItemIndex(1)
|
.setCurrentMediaItemIndex(1)
|
||||||
.setContentPositionMs(5000)
|
.setContentPositionMs(5000)
|
||||||
.build();
|
.build();
|
||||||
State state2 =
|
State state2 =
|
||||||
new State.Builder()
|
new State.Builder()
|
||||||
.setPlaylist(ImmutableList.of(playlistItem0))
|
.setPlaylist(ImmutableList.of(mediaItemData0))
|
||||||
.setCurrentMediaItemIndex(0)
|
.setCurrentMediaItemIndex(0)
|
||||||
.setContentPositionMs(2000)
|
.setContentPositionMs(2000)
|
||||||
.build();
|
.build();
|
||||||
@ -1402,24 +1407,24 @@ public class SimpleBasePlayerTest {
|
|||||||
invalidateState_withTransitionFromEndOfItem_reportsDiscontinuityReasonAutoTransition() {
|
invalidateState_withTransitionFromEndOfItem_reportsDiscontinuityReasonAutoTransition() {
|
||||||
Object mediaItemUid0 = new Object();
|
Object mediaItemUid0 = new Object();
|
||||||
MediaItem mediaItem0 = new MediaItem.Builder().setMediaId("0").build();
|
MediaItem mediaItem0 = new MediaItem.Builder().setMediaId("0").build();
|
||||||
SimpleBasePlayer.PlaylistItem playlistItem0 =
|
SimpleBasePlayer.MediaItemData mediaItemData0 =
|
||||||
new SimpleBasePlayer.PlaylistItem.Builder(mediaItemUid0)
|
new SimpleBasePlayer.MediaItemData.Builder(mediaItemUid0)
|
||||||
.setMediaItem(mediaItem0)
|
.setMediaItem(mediaItem0)
|
||||||
.setDurationUs(50_000)
|
.setDurationUs(50_000)
|
||||||
.build();
|
.build();
|
||||||
Object mediaItemUid1 = new Object();
|
Object mediaItemUid1 = new Object();
|
||||||
MediaItem mediaItem1 = new MediaItem.Builder().setMediaId("1").build();
|
MediaItem mediaItem1 = new MediaItem.Builder().setMediaId("1").build();
|
||||||
SimpleBasePlayer.PlaylistItem playlistItem1 =
|
SimpleBasePlayer.MediaItemData mediaItemData1 =
|
||||||
new SimpleBasePlayer.PlaylistItem.Builder(mediaItemUid1).setMediaItem(mediaItem1).build();
|
new SimpleBasePlayer.MediaItemData.Builder(mediaItemUid1).setMediaItem(mediaItem1).build();
|
||||||
State state1 =
|
State state1 =
|
||||||
new State.Builder()
|
new State.Builder()
|
||||||
.setPlaylist(ImmutableList.of(playlistItem0, playlistItem1))
|
.setPlaylist(ImmutableList.of(mediaItemData0, mediaItemData1))
|
||||||
.setCurrentMediaItemIndex(0)
|
.setCurrentMediaItemIndex(0)
|
||||||
.setContentPositionMs(50)
|
.setContentPositionMs(50)
|
||||||
.build();
|
.build();
|
||||||
State state2 =
|
State state2 =
|
||||||
new State.Builder()
|
new State.Builder()
|
||||||
.setPlaylist(ImmutableList.of(playlistItem0, playlistItem1))
|
.setPlaylist(ImmutableList.of(mediaItemData0, mediaItemData1))
|
||||||
.setCurrentMediaItemIndex(1)
|
.setCurrentMediaItemIndex(1)
|
||||||
.setContentPositionMs(10)
|
.setContentPositionMs(10)
|
||||||
.build();
|
.build();
|
||||||
@ -1469,24 +1474,24 @@ public class SimpleBasePlayerTest {
|
|||||||
public void invalidateState_withTransitionFromMiddleOfItem_reportsDiscontinuityReasonSkip() {
|
public void invalidateState_withTransitionFromMiddleOfItem_reportsDiscontinuityReasonSkip() {
|
||||||
Object mediaItemUid0 = new Object();
|
Object mediaItemUid0 = new Object();
|
||||||
MediaItem mediaItem0 = new MediaItem.Builder().setMediaId("0").build();
|
MediaItem mediaItem0 = new MediaItem.Builder().setMediaId("0").build();
|
||||||
SimpleBasePlayer.PlaylistItem playlistItem0 =
|
SimpleBasePlayer.MediaItemData mediaItemData0 =
|
||||||
new SimpleBasePlayer.PlaylistItem.Builder(mediaItemUid0)
|
new SimpleBasePlayer.MediaItemData.Builder(mediaItemUid0)
|
||||||
.setMediaItem(mediaItem0)
|
.setMediaItem(mediaItem0)
|
||||||
.setDurationUs(50_000)
|
.setDurationUs(50_000)
|
||||||
.build();
|
.build();
|
||||||
Object mediaItemUid1 = new Object();
|
Object mediaItemUid1 = new Object();
|
||||||
MediaItem mediaItem1 = new MediaItem.Builder().setMediaId("1").build();
|
MediaItem mediaItem1 = new MediaItem.Builder().setMediaId("1").build();
|
||||||
SimpleBasePlayer.PlaylistItem playlistItem1 =
|
SimpleBasePlayer.MediaItemData mediaItemData1 =
|
||||||
new SimpleBasePlayer.PlaylistItem.Builder(mediaItemUid1).setMediaItem(mediaItem1).build();
|
new SimpleBasePlayer.MediaItemData.Builder(mediaItemUid1).setMediaItem(mediaItem1).build();
|
||||||
State state1 =
|
State state1 =
|
||||||
new State.Builder()
|
new State.Builder()
|
||||||
.setPlaylist(ImmutableList.of(playlistItem0, playlistItem1))
|
.setPlaylist(ImmutableList.of(mediaItemData0, mediaItemData1))
|
||||||
.setCurrentMediaItemIndex(0)
|
.setCurrentMediaItemIndex(0)
|
||||||
.setContentPositionMs(20)
|
.setContentPositionMs(20)
|
||||||
.build();
|
.build();
|
||||||
State state2 =
|
State state2 =
|
||||||
new State.Builder()
|
new State.Builder()
|
||||||
.setPlaylist(ImmutableList.of(playlistItem0, playlistItem1))
|
.setPlaylist(ImmutableList.of(mediaItemData0, mediaItemData1))
|
||||||
.setCurrentMediaItemIndex(1)
|
.setCurrentMediaItemIndex(1)
|
||||||
.setContentPositionMs(10)
|
.setContentPositionMs(10)
|
||||||
.build();
|
.build();
|
||||||
@ -1537,20 +1542,20 @@ public class SimpleBasePlayerTest {
|
|||||||
public void invalidateState_withRepeatingItem_reportsDiscontinuityReasonAutoTransition() {
|
public void invalidateState_withRepeatingItem_reportsDiscontinuityReasonAutoTransition() {
|
||||||
Object mediaItemUid = new Object();
|
Object mediaItemUid = new Object();
|
||||||
MediaItem mediaItem = new MediaItem.Builder().setMediaId("0").build();
|
MediaItem mediaItem = new MediaItem.Builder().setMediaId("0").build();
|
||||||
SimpleBasePlayer.PlaylistItem playlistItem =
|
SimpleBasePlayer.MediaItemData mediaItemData =
|
||||||
new SimpleBasePlayer.PlaylistItem.Builder(mediaItemUid)
|
new SimpleBasePlayer.MediaItemData.Builder(mediaItemUid)
|
||||||
.setMediaItem(mediaItem)
|
.setMediaItem(mediaItem)
|
||||||
.setDurationUs(5_000_000)
|
.setDurationUs(5_000_000)
|
||||||
.build();
|
.build();
|
||||||
State state1 =
|
State state1 =
|
||||||
new State.Builder()
|
new State.Builder()
|
||||||
.setPlaylist(ImmutableList.of(playlistItem))
|
.setPlaylist(ImmutableList.of(mediaItemData))
|
||||||
.setCurrentMediaItemIndex(0)
|
.setCurrentMediaItemIndex(0)
|
||||||
.setContentPositionMs(5_000)
|
.setContentPositionMs(5_000)
|
||||||
.build();
|
.build();
|
||||||
State state2 =
|
State state2 =
|
||||||
new State.Builder()
|
new State.Builder()
|
||||||
.setPlaylist(ImmutableList.of(playlistItem))
|
.setPlaylist(ImmutableList.of(mediaItemData))
|
||||||
.setCurrentMediaItemIndex(0)
|
.setCurrentMediaItemIndex(0)
|
||||||
.setContentPositionMs(0)
|
.setContentPositionMs(0)
|
||||||
.build();
|
.build();
|
||||||
@ -1600,20 +1605,20 @@ public class SimpleBasePlayerTest {
|
|||||||
public void invalidateState_withDiscontinuityInsideItem_reportsDiscontinuityReasonInternal() {
|
public void invalidateState_withDiscontinuityInsideItem_reportsDiscontinuityReasonInternal() {
|
||||||
Object mediaItemUid = new Object();
|
Object mediaItemUid = new Object();
|
||||||
MediaItem mediaItem = new MediaItem.Builder().setMediaId("0").build();
|
MediaItem mediaItem = new MediaItem.Builder().setMediaId("0").build();
|
||||||
SimpleBasePlayer.PlaylistItem playlistItem =
|
SimpleBasePlayer.MediaItemData mediaItemData =
|
||||||
new SimpleBasePlayer.PlaylistItem.Builder(mediaItemUid)
|
new SimpleBasePlayer.MediaItemData.Builder(mediaItemUid)
|
||||||
.setMediaItem(mediaItem)
|
.setMediaItem(mediaItem)
|
||||||
.setDurationUs(5_000_000)
|
.setDurationUs(5_000_000)
|
||||||
.build();
|
.build();
|
||||||
State state1 =
|
State state1 =
|
||||||
new State.Builder()
|
new State.Builder()
|
||||||
.setPlaylist(ImmutableList.of(playlistItem))
|
.setPlaylist(ImmutableList.of(mediaItemData))
|
||||||
.setCurrentMediaItemIndex(0)
|
.setCurrentMediaItemIndex(0)
|
||||||
.setContentPositionMs(1_000)
|
.setContentPositionMs(1_000)
|
||||||
.build();
|
.build();
|
||||||
State state2 =
|
State state2 =
|
||||||
new State.Builder()
|
new State.Builder()
|
||||||
.setPlaylist(ImmutableList.of(playlistItem))
|
.setPlaylist(ImmutableList.of(mediaItemData))
|
||||||
.setCurrentMediaItemIndex(0)
|
.setCurrentMediaItemIndex(0)
|
||||||
.setContentPositionMs(3_000)
|
.setContentPositionMs(3_000)
|
||||||
.build();
|
.build();
|
||||||
@ -1661,17 +1666,17 @@ public class SimpleBasePlayerTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void invalidateState_withMinorPositionDrift_doesNotReportsDiscontinuity() {
|
public void invalidateState_withMinorPositionDrift_doesNotReportsDiscontinuity() {
|
||||||
SimpleBasePlayer.PlaylistItem playlistItem =
|
SimpleBasePlayer.MediaItemData mediaItemData =
|
||||||
new SimpleBasePlayer.PlaylistItem.Builder(/* uid= */ new Object()).build();
|
new SimpleBasePlayer.MediaItemData.Builder(/* uid= */ new Object()).build();
|
||||||
State state1 =
|
State state1 =
|
||||||
new State.Builder()
|
new State.Builder()
|
||||||
.setPlaylist(ImmutableList.of(playlistItem))
|
.setPlaylist(ImmutableList.of(mediaItemData))
|
||||||
.setCurrentMediaItemIndex(0)
|
.setCurrentMediaItemIndex(0)
|
||||||
.setContentPositionMs(1_000)
|
.setContentPositionMs(1_000)
|
||||||
.build();
|
.build();
|
||||||
State state2 =
|
State state2 =
|
||||||
new State.Builder()
|
new State.Builder()
|
||||||
.setPlaylist(ImmutableList.of(playlistItem))
|
.setPlaylist(ImmutableList.of(mediaItemData))
|
||||||
.setCurrentMediaItemIndex(0)
|
.setCurrentMediaItemIndex(0)
|
||||||
.setContentPositionMs(1_500)
|
.setContentPositionMs(1_500)
|
||||||
.build();
|
.build();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user