Add min/max live offset to MediaItem.LiveConfiguration.
This allows the user and the media to define bounds in which the live offset can vary. Issue: #4904 PiperOrigin-RevId: 339214605
This commit is contained in:
parent
d436a69d8f
commit
e57193676a
@ -77,6 +77,8 @@ public final class MediaItem {
|
|||||||
@Nullable private Object tag;
|
@Nullable private Object tag;
|
||||||
@Nullable private MediaMetadata mediaMetadata;
|
@Nullable private MediaMetadata mediaMetadata;
|
||||||
private long liveTargetOffsetMs;
|
private long liveTargetOffsetMs;
|
||||||
|
private long liveMinOffsetMs;
|
||||||
|
private long liveMaxOffsetMs;
|
||||||
private float liveMinPlaybackSpeed;
|
private float liveMinPlaybackSpeed;
|
||||||
private float liveMaxPlaybackSpeed;
|
private float liveMaxPlaybackSpeed;
|
||||||
|
|
||||||
@ -88,6 +90,8 @@ public final class MediaItem {
|
|||||||
streamKeys = Collections.emptyList();
|
streamKeys = Collections.emptyList();
|
||||||
subtitles = Collections.emptyList();
|
subtitles = Collections.emptyList();
|
||||||
liveTargetOffsetMs = C.TIME_UNSET;
|
liveTargetOffsetMs = C.TIME_UNSET;
|
||||||
|
liveMinOffsetMs = C.TIME_UNSET;
|
||||||
|
liveMaxOffsetMs = C.TIME_UNSET;
|
||||||
liveMinPlaybackSpeed = C.RATE_UNSET;
|
liveMinPlaybackSpeed = C.RATE_UNSET;
|
||||||
liveMaxPlaybackSpeed = C.RATE_UNSET;
|
liveMaxPlaybackSpeed = C.RATE_UNSET;
|
||||||
}
|
}
|
||||||
@ -102,6 +106,8 @@ public final class MediaItem {
|
|||||||
mediaId = mediaItem.mediaId;
|
mediaId = mediaItem.mediaId;
|
||||||
mediaMetadata = mediaItem.mediaMetadata;
|
mediaMetadata = mediaItem.mediaMetadata;
|
||||||
liveTargetOffsetMs = mediaItem.liveConfiguration.targetLiveOffsetMs;
|
liveTargetOffsetMs = mediaItem.liveConfiguration.targetLiveOffsetMs;
|
||||||
|
liveMinOffsetMs = mediaItem.liveConfiguration.minLiveOffsetMs;
|
||||||
|
liveMaxOffsetMs = mediaItem.liveConfiguration.maxLiveOffsetMs;
|
||||||
liveMinPlaybackSpeed = mediaItem.liveConfiguration.minPlaybackSpeed;
|
liveMinPlaybackSpeed = mediaItem.liveConfiguration.minPlaybackSpeed;
|
||||||
liveMaxPlaybackSpeed = mediaItem.liveConfiguration.maxPlaybackSpeed;
|
liveMaxPlaybackSpeed = mediaItem.liveConfiguration.maxPlaybackSpeed;
|
||||||
@Nullable PlaybackProperties playbackProperties = mediaItem.playbackProperties;
|
@Nullable PlaybackProperties playbackProperties = mediaItem.playbackProperties;
|
||||||
@ -436,6 +442,32 @@ public final class MediaItem {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the optional minimum offset from the live edge for live streams, in milliseconds.
|
||||||
|
*
|
||||||
|
* <p>See {@code Player#getCurrentLiveOffset()}.
|
||||||
|
*
|
||||||
|
* @param liveMinOffsetMs The minimum allowed live offset, in milliseconds, or {@link
|
||||||
|
* C#TIME_UNSET} to use the media-defined default.
|
||||||
|
*/
|
||||||
|
public Builder setLiveMinOffsetMs(long liveMinOffsetMs) {
|
||||||
|
this.liveMinOffsetMs = liveMinOffsetMs;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the optional maximum offset from the live edge for live streams, in milliseconds.
|
||||||
|
*
|
||||||
|
* <p>See {@code Player#getCurrentLiveOffset()}.
|
||||||
|
*
|
||||||
|
* @param liveMaxOffsetMs The maximum allowed live offset, in milliseconds, or {@link
|
||||||
|
* C#TIME_UNSET} to use the media-defined default.
|
||||||
|
*/
|
||||||
|
public Builder setLiveMaxOffsetMs(long liveMaxOffsetMs) {
|
||||||
|
this.liveMaxOffsetMs = liveMaxOffsetMs;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the optional minimum playback speed for live stream speed adjustment.
|
* Sets the optional minimum playback speed for live stream speed adjustment.
|
||||||
*
|
*
|
||||||
@ -519,7 +551,12 @@ public final class MediaItem {
|
|||||||
clipRelativeToDefaultPosition,
|
clipRelativeToDefaultPosition,
|
||||||
clipStartsAtKeyFrame),
|
clipStartsAtKeyFrame),
|
||||||
playbackProperties,
|
playbackProperties,
|
||||||
new LiveConfiguration(liveTargetOffsetMs, liveMinPlaybackSpeed, liveMaxPlaybackSpeed),
|
new LiveConfiguration(
|
||||||
|
liveTargetOffsetMs,
|
||||||
|
liveMinOffsetMs,
|
||||||
|
liveMaxOffsetMs,
|
||||||
|
liveMinPlaybackSpeed,
|
||||||
|
liveMaxPlaybackSpeed),
|
||||||
mediaMetadata != null ? mediaMetadata : new MediaMetadata.Builder().build());
|
mediaMetadata != null ? mediaMetadata : new MediaMetadata.Builder().build());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -712,7 +749,7 @@ public final class MediaItem {
|
|||||||
|
|
||||||
/** A live playback configuration with unset values. */
|
/** A live playback configuration with unset values. */
|
||||||
public static final LiveConfiguration UNSET =
|
public static final LiveConfiguration UNSET =
|
||||||
new LiveConfiguration(C.TIME_UNSET, C.RATE_UNSET, C.RATE_UNSET);
|
new LiveConfiguration(C.TIME_UNSET, C.TIME_UNSET, C.TIME_UNSET, C.RATE_UNSET, C.RATE_UNSET);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Target live offset, in milliseconds, or {@link C#TIME_UNSET} to use the media-defined
|
* Target live offset, in milliseconds, or {@link C#TIME_UNSET} to use the media-defined
|
||||||
@ -720,6 +757,18 @@ public final class MediaItem {
|
|||||||
*/
|
*/
|
||||||
public final long targetLiveOffsetMs;
|
public final long targetLiveOffsetMs;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The minimum allowed live offset, in milliseconds, or {@link C#TIME_UNSET} to use the
|
||||||
|
* media-defined default.
|
||||||
|
*/
|
||||||
|
public final long minLiveOffsetMs;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The maximum allowed live offset, in milliseconds, or {@link C#TIME_UNSET} to use the
|
||||||
|
* media-defined default.
|
||||||
|
*/
|
||||||
|
public final long maxLiveOffsetMs;
|
||||||
|
|
||||||
/** Minimum playback speed, or {@link C#RATE_UNSET} to use the media-defined default. */
|
/** Minimum playback speed, or {@link C#RATE_UNSET} to use the media-defined default. */
|
||||||
public final float minPlaybackSpeed;
|
public final float minPlaybackSpeed;
|
||||||
|
|
||||||
@ -731,14 +780,24 @@ public final class MediaItem {
|
|||||||
*
|
*
|
||||||
* @param targetLiveOffsetMs Target live offset, in milliseconds, or {@link C#TIME_UNSET} to use
|
* @param targetLiveOffsetMs Target live offset, in milliseconds, or {@link C#TIME_UNSET} to use
|
||||||
* the media-defined default.
|
* the media-defined default.
|
||||||
|
* @param minLiveOffsetMs The minimum allowed live offset, in milliseconds, or {@link
|
||||||
|
* C#TIME_UNSET} to use the media-defined default.
|
||||||
|
* @param maxLiveOffsetMs The maximum allowed live offset, in milliseconds, or {@link
|
||||||
|
* C#TIME_UNSET} to use the media-defined default.
|
||||||
* @param minPlaybackSpeed Minimum playback speed, or {@link C#RATE_UNSET} to use the
|
* @param minPlaybackSpeed Minimum playback speed, or {@link C#RATE_UNSET} to use the
|
||||||
* media-defined default.
|
* media-defined default.
|
||||||
* @param maxPlaybackSpeed Maximum playback speed, or {@link C#RATE_UNSET} to use the
|
* @param maxPlaybackSpeed Maximum playback speed, or {@link C#RATE_UNSET} to use the
|
||||||
* media-defined default.
|
* media-defined default.
|
||||||
*/
|
*/
|
||||||
public LiveConfiguration(
|
public LiveConfiguration(
|
||||||
long targetLiveOffsetMs, float minPlaybackSpeed, float maxPlaybackSpeed) {
|
long targetLiveOffsetMs,
|
||||||
|
long minLiveOffsetMs,
|
||||||
|
long maxLiveOffsetMs,
|
||||||
|
float minPlaybackSpeed,
|
||||||
|
float maxPlaybackSpeed) {
|
||||||
this.targetLiveOffsetMs = targetLiveOffsetMs;
|
this.targetLiveOffsetMs = targetLiveOffsetMs;
|
||||||
|
this.minLiveOffsetMs = minLiveOffsetMs;
|
||||||
|
this.maxLiveOffsetMs = maxLiveOffsetMs;
|
||||||
this.minPlaybackSpeed = minPlaybackSpeed;
|
this.minPlaybackSpeed = minPlaybackSpeed;
|
||||||
this.maxPlaybackSpeed = maxPlaybackSpeed;
|
this.maxPlaybackSpeed = maxPlaybackSpeed;
|
||||||
}
|
}
|
||||||
@ -754,6 +813,8 @@ public final class MediaItem {
|
|||||||
LiveConfiguration other = (LiveConfiguration) obj;
|
LiveConfiguration other = (LiveConfiguration) obj;
|
||||||
|
|
||||||
return targetLiveOffsetMs == other.targetLiveOffsetMs
|
return targetLiveOffsetMs == other.targetLiveOffsetMs
|
||||||
|
&& minLiveOffsetMs == other.minLiveOffsetMs
|
||||||
|
&& maxLiveOffsetMs == other.maxLiveOffsetMs
|
||||||
&& minPlaybackSpeed == other.minPlaybackSpeed
|
&& minPlaybackSpeed == other.minPlaybackSpeed
|
||||||
&& maxPlaybackSpeed == other.maxPlaybackSpeed;
|
&& maxPlaybackSpeed == other.maxPlaybackSpeed;
|
||||||
}
|
}
|
||||||
@ -761,6 +822,8 @@ public final class MediaItem {
|
|||||||
@Override
|
@Override
|
||||||
public int hashCode() {
|
public int hashCode() {
|
||||||
int result = (int) (targetLiveOffsetMs ^ (targetLiveOffsetMs >>> 32));
|
int result = (int) (targetLiveOffsetMs ^ (targetLiveOffsetMs >>> 32));
|
||||||
|
result = 31 * result + (int) (minLiveOffsetMs ^ (minLiveOffsetMs >>> 32));
|
||||||
|
result = 31 * result + (int) (maxLiveOffsetMs ^ (maxLiveOffsetMs >>> 32));
|
||||||
result = 31 * result + (minPlaybackSpeed != 0 ? Float.floatToIntBits(minPlaybackSpeed) : 0);
|
result = 31 * result + (minPlaybackSpeed != 0 ? Float.floatToIntBits(minPlaybackSpeed) : 0);
|
||||||
result = 31 * result + (maxPlaybackSpeed != 0 ? Float.floatToIntBits(maxPlaybackSpeed) : 0);
|
result = 31 * result + (maxPlaybackSpeed != 0 ? Float.floatToIntBits(maxPlaybackSpeed) : 0);
|
||||||
return result;
|
return result;
|
||||||
|
@ -295,7 +295,7 @@ public class MediaItemTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void builderSetLiveTargetLatencyMs_setsLiveTargetLatencyMs() {
|
public void builderSetLiveTargetOffsetMs_setsLiveTargetOffsetMs() {
|
||||||
MediaItem mediaItem =
|
MediaItem mediaItem =
|
||||||
new MediaItem.Builder().setUri(URI_STRING).setLiveTargetOffsetMs(10_000).build();
|
new MediaItem.Builder().setUri(URI_STRING).setLiveTargetOffsetMs(10_000).build();
|
||||||
|
|
||||||
@ -318,6 +318,22 @@ public class MediaItemTest {
|
|||||||
assertThat(mediaItem.liveConfiguration.maxPlaybackSpeed).isEqualTo(1.1f);
|
assertThat(mediaItem.liveConfiguration.maxPlaybackSpeed).isEqualTo(1.1f);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void builderSetMinLiveOffset_setsMinLiveOffset() {
|
||||||
|
MediaItem mediaItem =
|
||||||
|
new MediaItem.Builder().setUri(URI_STRING).setLiveMinOffsetMs(1234).build();
|
||||||
|
|
||||||
|
assertThat(mediaItem.liveConfiguration.minLiveOffsetMs).isEqualTo(1234);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void builderSetMaxLiveOffset_setsMaxLiveOffset() {
|
||||||
|
MediaItem mediaItem =
|
||||||
|
new MediaItem.Builder().setUri(URI_STRING).setLiveMaxOffsetMs(1234).build();
|
||||||
|
|
||||||
|
assertThat(mediaItem.liveConfiguration.maxLiveOffsetMs).isEqualTo(1234);
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void buildUpon_equalsToOriginal() {
|
public void buildUpon_equalsToOriginal() {
|
||||||
MediaItem mediaItem =
|
MediaItem mediaItem =
|
||||||
@ -346,6 +362,8 @@ public class MediaItemTest {
|
|||||||
.setLiveTargetOffsetMs(20_000)
|
.setLiveTargetOffsetMs(20_000)
|
||||||
.setLiveMinPlaybackSpeed(.9f)
|
.setLiveMinPlaybackSpeed(.9f)
|
||||||
.setLiveMaxPlaybackSpeed(1.1f)
|
.setLiveMaxPlaybackSpeed(1.1f)
|
||||||
|
.setLiveMinOffsetMs(2222)
|
||||||
|
.setLiveMaxOffsetMs(4444)
|
||||||
.setSubtitles(
|
.setSubtitles(
|
||||||
Collections.singletonList(
|
Collections.singletonList(
|
||||||
new MediaItem.Subtitle(
|
new MediaItem.Subtitle(
|
||||||
|
@ -110,6 +110,8 @@ public final class DefaultMediaSourceFactory implements MediaSourceFactory {
|
|||||||
@Nullable private List<StreamKey> streamKeys;
|
@Nullable private List<StreamKey> streamKeys;
|
||||||
@Nullable private LoadErrorHandlingPolicy loadErrorHandlingPolicy;
|
@Nullable private LoadErrorHandlingPolicy loadErrorHandlingPolicy;
|
||||||
private long liveTargetOffsetMs;
|
private long liveTargetOffsetMs;
|
||||||
|
private long liveMinOffsetMs;
|
||||||
|
private long liveMaxOffsetMs;
|
||||||
private float liveMinSpeed;
|
private float liveMinSpeed;
|
||||||
private float liveMaxSpeed;
|
private float liveMaxSpeed;
|
||||||
|
|
||||||
@ -161,6 +163,8 @@ public final class DefaultMediaSourceFactory implements MediaSourceFactory {
|
|||||||
supportedTypes[i] = mediaSourceFactories.keyAt(i);
|
supportedTypes[i] = mediaSourceFactories.keyAt(i);
|
||||||
}
|
}
|
||||||
liveTargetOffsetMs = C.TIME_UNSET;
|
liveTargetOffsetMs = C.TIME_UNSET;
|
||||||
|
liveMinOffsetMs = C.TIME_UNSET;
|
||||||
|
liveMaxOffsetMs = C.TIME_UNSET;
|
||||||
liveMinSpeed = C.RATE_UNSET;
|
liveMinSpeed = C.RATE_UNSET;
|
||||||
liveMaxSpeed = C.RATE_UNSET;
|
liveMaxSpeed = C.RATE_UNSET;
|
||||||
}
|
}
|
||||||
@ -201,6 +205,30 @@ public final class DefaultMediaSourceFactory implements MediaSourceFactory {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the minimum offset from the live edge for live streams, in milliseconds.
|
||||||
|
*
|
||||||
|
* @param liveMinOffsetMs The minimum allowed live offset, in milliseconds, or {@link
|
||||||
|
* C#TIME_UNSET} to use the media-defined default.
|
||||||
|
* @return This factory, for convenience.
|
||||||
|
*/
|
||||||
|
public DefaultMediaSourceFactory setLiveMinOffsetMs(long liveMinOffsetMs) {
|
||||||
|
this.liveMinOffsetMs = liveMinOffsetMs;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the maximum offset from the live edge for live streams, in milliseconds.
|
||||||
|
*
|
||||||
|
* @param liveMaxOffsetMs The maximum allowed live offset, in milliseconds, or {@link
|
||||||
|
* C#TIME_UNSET} to use the media-defined default.
|
||||||
|
* @return This factory, for convenience.
|
||||||
|
*/
|
||||||
|
public DefaultMediaSourceFactory setLiveMaxOffsetMs(long liveMaxOffsetMs) {
|
||||||
|
this.liveMaxOffsetMs = liveMaxOffsetMs;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the minimum playback speed for live streams.
|
* Sets the minimum playback speed for live streams.
|
||||||
*
|
*
|
||||||
@ -294,7 +322,11 @@ public final class DefaultMediaSourceFactory implements MediaSourceFactory {
|
|||||||
|| (mediaItem.liveConfiguration.minPlaybackSpeed == C.RATE_UNSET
|
|| (mediaItem.liveConfiguration.minPlaybackSpeed == C.RATE_UNSET
|
||||||
&& liveMinSpeed != C.RATE_UNSET)
|
&& liveMinSpeed != C.RATE_UNSET)
|
||||||
|| (mediaItem.liveConfiguration.maxPlaybackSpeed == C.RATE_UNSET
|
|| (mediaItem.liveConfiguration.maxPlaybackSpeed == C.RATE_UNSET
|
||||||
&& liveMaxSpeed != C.RATE_UNSET)) {
|
&& liveMaxSpeed != C.RATE_UNSET)
|
||||||
|
|| (mediaItem.liveConfiguration.minLiveOffsetMs == C.TIME_UNSET
|
||||||
|
&& liveMinOffsetMs != C.TIME_UNSET)
|
||||||
|
|| (mediaItem.liveConfiguration.maxLiveOffsetMs == C.TIME_UNSET
|
||||||
|
&& liveMaxOffsetMs != C.TIME_UNSET)) {
|
||||||
mediaItem =
|
mediaItem =
|
||||||
mediaItem
|
mediaItem
|
||||||
.buildUpon()
|
.buildUpon()
|
||||||
@ -310,6 +342,14 @@ public final class DefaultMediaSourceFactory implements MediaSourceFactory {
|
|||||||
mediaItem.liveConfiguration.maxPlaybackSpeed == C.RATE_UNSET
|
mediaItem.liveConfiguration.maxPlaybackSpeed == C.RATE_UNSET
|
||||||
? liveMaxSpeed
|
? liveMaxSpeed
|
||||||
: mediaItem.liveConfiguration.maxPlaybackSpeed)
|
: mediaItem.liveConfiguration.maxPlaybackSpeed)
|
||||||
|
.setLiveMinOffsetMs(
|
||||||
|
mediaItem.liveConfiguration.minLiveOffsetMs == C.TIME_UNSET
|
||||||
|
? liveMinOffsetMs
|
||||||
|
: mediaItem.liveConfiguration.minLiveOffsetMs)
|
||||||
|
.setLiveMaxOffsetMs(
|
||||||
|
mediaItem.liveConfiguration.maxLiveOffsetMs == C.TIME_UNSET
|
||||||
|
? liveMaxOffsetMs
|
||||||
|
: mediaItem.liveConfiguration.maxLiveOffsetMs)
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
MediaSource mediaSource = mediaSourceFactory.createMediaSource(mediaItem);
|
MediaSource mediaSource = mediaSourceFactory.createMediaSource(mediaItem);
|
||||||
|
@ -42,7 +42,11 @@ public class DefaultLivePlaybackSpeedControlTest {
|
|||||||
new DefaultLivePlaybackSpeedControl.Builder().build();
|
new DefaultLivePlaybackSpeedControl.Builder().build();
|
||||||
defaultLivePlaybackSpeedControl.setLiveConfiguration(
|
defaultLivePlaybackSpeedControl.setLiveConfiguration(
|
||||||
new LiveConfiguration(
|
new LiveConfiguration(
|
||||||
/* targetLiveOffsetMs= */ 42, /* minPlaybackSpeed= */ 1f, /* maxPlaybackSpeed= */ 1f));
|
/* targetLiveOffsetMs= */ 42,
|
||||||
|
/* minLiveOffsetMs= */ 200,
|
||||||
|
/* maxLiveOffsetMs= */ 400,
|
||||||
|
/* minPlaybackSpeed= */ 1f,
|
||||||
|
/* maxPlaybackSpeed= */ 1f));
|
||||||
|
|
||||||
assertThat(defaultLivePlaybackSpeedControl.getTargetLiveOffsetUs()).isEqualTo(42_000);
|
assertThat(defaultLivePlaybackSpeedControl.getTargetLiveOffsetUs()).isEqualTo(42_000);
|
||||||
}
|
}
|
||||||
@ -55,7 +59,11 @@ public class DefaultLivePlaybackSpeedControlTest {
|
|||||||
defaultLivePlaybackSpeedControl.setTargetLiveOffsetOverrideUs(123_456_789);
|
defaultLivePlaybackSpeedControl.setTargetLiveOffsetOverrideUs(123_456_789);
|
||||||
defaultLivePlaybackSpeedControl.setLiveConfiguration(
|
defaultLivePlaybackSpeedControl.setLiveConfiguration(
|
||||||
new LiveConfiguration(
|
new LiveConfiguration(
|
||||||
/* targetLiveOffsetMs= */ 42, /* minPlaybackSpeed= */ 1f, /* maxPlaybackSpeed= */ 1f));
|
/* targetLiveOffsetMs= */ 42,
|
||||||
|
/* minLiveOffsetMs= */ 200,
|
||||||
|
/* maxLiveOffsetMs= */ 400,
|
||||||
|
/* minPlaybackSpeed= */ 1f,
|
||||||
|
/* maxPlaybackSpeed= */ 1f));
|
||||||
|
|
||||||
long targetLiveOffsetUs = defaultLivePlaybackSpeedControl.getTargetLiveOffsetUs();
|
long targetLiveOffsetUs = defaultLivePlaybackSpeedControl.getTargetLiveOffsetUs();
|
||||||
|
|
||||||
@ -82,7 +90,11 @@ public class DefaultLivePlaybackSpeedControlTest {
|
|||||||
defaultLivePlaybackSpeedControl.setTargetLiveOffsetOverrideUs(123_456_789);
|
defaultLivePlaybackSpeedControl.setTargetLiveOffsetOverrideUs(123_456_789);
|
||||||
defaultLivePlaybackSpeedControl.setLiveConfiguration(
|
defaultLivePlaybackSpeedControl.setLiveConfiguration(
|
||||||
new LiveConfiguration(
|
new LiveConfiguration(
|
||||||
/* targetLiveOffsetMs= */ 42, /* minPlaybackSpeed= */ 1f, /* maxPlaybackSpeed= */ 1f));
|
/* targetLiveOffsetMs= */ 42,
|
||||||
|
/* minLiveOffsetMs= */ 200,
|
||||||
|
/* maxLiveOffsetMs= */ 400,
|
||||||
|
/* minPlaybackSpeed= */ 1f,
|
||||||
|
/* maxPlaybackSpeed= */ 1f));
|
||||||
defaultLivePlaybackSpeedControl.setTargetLiveOffsetOverrideUs(C.TIME_UNSET);
|
defaultLivePlaybackSpeedControl.setTargetLiveOffsetOverrideUs(C.TIME_UNSET);
|
||||||
|
|
||||||
long targetLiveOffsetUs = defaultLivePlaybackSpeedControl.getTargetLiveOffsetUs();
|
long targetLiveOffsetUs = defaultLivePlaybackSpeedControl.getTargetLiveOffsetUs();
|
||||||
@ -97,6 +109,8 @@ public class DefaultLivePlaybackSpeedControlTest {
|
|||||||
defaultLivePlaybackSpeedControl.setLiveConfiguration(
|
defaultLivePlaybackSpeedControl.setLiveConfiguration(
|
||||||
new LiveConfiguration(
|
new LiveConfiguration(
|
||||||
/* targetLiveOffsetMs= */ 2_000,
|
/* targetLiveOffsetMs= */ 2_000,
|
||||||
|
/* minLiveOffsetMs= */ C.TIME_UNSET,
|
||||||
|
/* maxLiveOffsetMs= */ C.TIME_UNSET,
|
||||||
/* minPlaybackSpeed= */ C.RATE_UNSET,
|
/* minPlaybackSpeed= */ C.RATE_UNSET,
|
||||||
/* maxPlaybackSpeed= */ C.RATE_UNSET));
|
/* maxPlaybackSpeed= */ C.RATE_UNSET));
|
||||||
|
|
||||||
@ -113,6 +127,8 @@ public class DefaultLivePlaybackSpeedControlTest {
|
|||||||
defaultLivePlaybackSpeedControl.setLiveConfiguration(
|
defaultLivePlaybackSpeedControl.setLiveConfiguration(
|
||||||
new LiveConfiguration(
|
new LiveConfiguration(
|
||||||
/* targetLiveOffsetMs= */ 2_000,
|
/* targetLiveOffsetMs= */ 2_000,
|
||||||
|
/* minLiveOffsetMs= */ C.TIME_UNSET,
|
||||||
|
/* maxLiveOffsetMs= */ C.TIME_UNSET,
|
||||||
/* minPlaybackSpeed= */ C.RATE_UNSET,
|
/* minPlaybackSpeed= */ C.RATE_UNSET,
|
||||||
/* maxPlaybackSpeed= */ C.RATE_UNSET));
|
/* maxPlaybackSpeed= */ C.RATE_UNSET));
|
||||||
|
|
||||||
@ -138,6 +154,8 @@ public class DefaultLivePlaybackSpeedControlTest {
|
|||||||
defaultLivePlaybackSpeedControl.setLiveConfiguration(
|
defaultLivePlaybackSpeedControl.setLiveConfiguration(
|
||||||
new LiveConfiguration(
|
new LiveConfiguration(
|
||||||
/* targetLiveOffsetMs= */ 2_000,
|
/* targetLiveOffsetMs= */ 2_000,
|
||||||
|
/* minLiveOffsetMs= */ C.TIME_UNSET,
|
||||||
|
/* maxLiveOffsetMs= */ C.TIME_UNSET,
|
||||||
/* minPlaybackSpeed= */ C.RATE_UNSET,
|
/* minPlaybackSpeed= */ C.RATE_UNSET,
|
||||||
/* maxPlaybackSpeed= */ C.RATE_UNSET));
|
/* maxPlaybackSpeed= */ C.RATE_UNSET));
|
||||||
|
|
||||||
@ -157,6 +175,8 @@ public class DefaultLivePlaybackSpeedControlTest {
|
|||||||
defaultLivePlaybackSpeedControl.setLiveConfiguration(
|
defaultLivePlaybackSpeedControl.setLiveConfiguration(
|
||||||
new LiveConfiguration(
|
new LiveConfiguration(
|
||||||
/* targetLiveOffsetMs= */ 2_000,
|
/* targetLiveOffsetMs= */ 2_000,
|
||||||
|
/* minLiveOffsetMs= */ C.TIME_UNSET,
|
||||||
|
/* maxLiveOffsetMs= */ C.TIME_UNSET,
|
||||||
/* minPlaybackSpeed= */ C.RATE_UNSET,
|
/* minPlaybackSpeed= */ C.RATE_UNSET,
|
||||||
/* maxPlaybackSpeed= */ C.RATE_UNSET));
|
/* maxPlaybackSpeed= */ C.RATE_UNSET));
|
||||||
|
|
||||||
@ -176,6 +196,8 @@ public class DefaultLivePlaybackSpeedControlTest {
|
|||||||
defaultLivePlaybackSpeedControl.setLiveConfiguration(
|
defaultLivePlaybackSpeedControl.setLiveConfiguration(
|
||||||
new LiveConfiguration(
|
new LiveConfiguration(
|
||||||
/* targetLiveOffsetMs= */ 2_000,
|
/* targetLiveOffsetMs= */ 2_000,
|
||||||
|
/* minLiveOffsetMs= */ C.TIME_UNSET,
|
||||||
|
/* maxLiveOffsetMs= */ C.TIME_UNSET,
|
||||||
/* minPlaybackSpeed= */ C.RATE_UNSET,
|
/* minPlaybackSpeed= */ C.RATE_UNSET,
|
||||||
/* maxPlaybackSpeed= */ C.RATE_UNSET));
|
/* maxPlaybackSpeed= */ C.RATE_UNSET));
|
||||||
|
|
||||||
@ -194,6 +216,8 @@ public class DefaultLivePlaybackSpeedControlTest {
|
|||||||
defaultLivePlaybackSpeedControl.setLiveConfiguration(
|
defaultLivePlaybackSpeedControl.setLiveConfiguration(
|
||||||
new LiveConfiguration(
|
new LiveConfiguration(
|
||||||
/* targetLiveOffsetMs= */ 2_000,
|
/* targetLiveOffsetMs= */ 2_000,
|
||||||
|
/* minLiveOffsetMs= */ C.TIME_UNSET,
|
||||||
|
/* maxLiveOffsetMs= */ C.TIME_UNSET,
|
||||||
/* minPlaybackSpeed= */ C.RATE_UNSET,
|
/* minPlaybackSpeed= */ C.RATE_UNSET,
|
||||||
/* maxPlaybackSpeed= */ C.RATE_UNSET));
|
/* maxPlaybackSpeed= */ C.RATE_UNSET));
|
||||||
|
|
||||||
@ -212,6 +236,8 @@ public class DefaultLivePlaybackSpeedControlTest {
|
|||||||
defaultLivePlaybackSpeedControl.setLiveConfiguration(
|
defaultLivePlaybackSpeedControl.setLiveConfiguration(
|
||||||
new LiveConfiguration(
|
new LiveConfiguration(
|
||||||
/* targetLiveOffsetMs= */ 2_000,
|
/* targetLiveOffsetMs= */ 2_000,
|
||||||
|
/* minLiveOffsetMs= */ C.TIME_UNSET,
|
||||||
|
/* maxLiveOffsetMs= */ C.TIME_UNSET,
|
||||||
/* minPlaybackSpeed= */ C.RATE_UNSET,
|
/* minPlaybackSpeed= */ C.RATE_UNSET,
|
||||||
/* maxPlaybackSpeed= */ 2f));
|
/* maxPlaybackSpeed= */ 2f));
|
||||||
|
|
||||||
@ -230,6 +256,8 @@ public class DefaultLivePlaybackSpeedControlTest {
|
|||||||
defaultLivePlaybackSpeedControl.setLiveConfiguration(
|
defaultLivePlaybackSpeedControl.setLiveConfiguration(
|
||||||
new LiveConfiguration(
|
new LiveConfiguration(
|
||||||
/* targetLiveOffsetMs= */ 2_000,
|
/* targetLiveOffsetMs= */ 2_000,
|
||||||
|
/* minLiveOffsetMs= */ C.TIME_UNSET,
|
||||||
|
/* maxLiveOffsetMs= */ C.TIME_UNSET,
|
||||||
/* minPlaybackSpeed= */ 0.2f,
|
/* minPlaybackSpeed= */ 0.2f,
|
||||||
/* maxPlaybackSpeed= */ C.RATE_UNSET));
|
/* maxPlaybackSpeed= */ C.RATE_UNSET));
|
||||||
|
|
||||||
@ -247,6 +275,8 @@ public class DefaultLivePlaybackSpeedControlTest {
|
|||||||
defaultLivePlaybackSpeedControl.setLiveConfiguration(
|
defaultLivePlaybackSpeedControl.setLiveConfiguration(
|
||||||
new LiveConfiguration(
|
new LiveConfiguration(
|
||||||
/* targetLiveOffsetMs= */ 2_000,
|
/* targetLiveOffsetMs= */ 2_000,
|
||||||
|
/* minLiveOffsetMs= */ C.TIME_UNSET,
|
||||||
|
/* maxLiveOffsetMs= */ C.TIME_UNSET,
|
||||||
/* minPlaybackSpeed= */ C.RATE_UNSET,
|
/* minPlaybackSpeed= */ C.RATE_UNSET,
|
||||||
/* maxPlaybackSpeed= */ C.RATE_UNSET));
|
/* maxPlaybackSpeed= */ C.RATE_UNSET));
|
||||||
|
|
||||||
@ -270,6 +300,8 @@ public class DefaultLivePlaybackSpeedControlTest {
|
|||||||
defaultLivePlaybackSpeedControl.setLiveConfiguration(
|
defaultLivePlaybackSpeedControl.setLiveConfiguration(
|
||||||
new LiveConfiguration(
|
new LiveConfiguration(
|
||||||
/* targetLiveOffsetMs= */ 2_000,
|
/* targetLiveOffsetMs= */ 2_000,
|
||||||
|
/* minLiveOffsetMs= */ C.TIME_UNSET,
|
||||||
|
/* maxLiveOffsetMs= */ C.TIME_UNSET,
|
||||||
/* minPlaybackSpeed= */ C.RATE_UNSET,
|
/* minPlaybackSpeed= */ C.RATE_UNSET,
|
||||||
/* maxPlaybackSpeed= */ C.RATE_UNSET));
|
/* maxPlaybackSpeed= */ C.RATE_UNSET));
|
||||||
|
|
||||||
@ -278,6 +310,8 @@ public class DefaultLivePlaybackSpeedControlTest {
|
|||||||
defaultLivePlaybackSpeedControl.setLiveConfiguration(
|
defaultLivePlaybackSpeedControl.setLiveConfiguration(
|
||||||
new LiveConfiguration(
|
new LiveConfiguration(
|
||||||
/* targetLiveOffsetMs= */ 2_000,
|
/* targetLiveOffsetMs= */ 2_000,
|
||||||
|
/* minLiveOffsetMs= */ C.TIME_UNSET,
|
||||||
|
/* maxLiveOffsetMs= */ C.TIME_UNSET,
|
||||||
/* minPlaybackSpeed= */ C.RATE_UNSET,
|
/* minPlaybackSpeed= */ C.RATE_UNSET,
|
||||||
/* maxPlaybackSpeed= */ C.RATE_UNSET));
|
/* maxPlaybackSpeed= */ C.RATE_UNSET));
|
||||||
float adjustedSpeed2 =
|
float adjustedSpeed2 =
|
||||||
@ -293,6 +327,8 @@ public class DefaultLivePlaybackSpeedControlTest {
|
|||||||
defaultLivePlaybackSpeedControl.setLiveConfiguration(
|
defaultLivePlaybackSpeedControl.setLiveConfiguration(
|
||||||
new LiveConfiguration(
|
new LiveConfiguration(
|
||||||
/* targetLiveOffsetMs= */ 2_000,
|
/* targetLiveOffsetMs= */ 2_000,
|
||||||
|
/* minLiveOffsetMs= */ C.TIME_UNSET,
|
||||||
|
/* maxLiveOffsetMs= */ C.TIME_UNSET,
|
||||||
/* minPlaybackSpeed= */ C.RATE_UNSET,
|
/* minPlaybackSpeed= */ C.RATE_UNSET,
|
||||||
/* maxPlaybackSpeed= */ C.RATE_UNSET));
|
/* maxPlaybackSpeed= */ C.RATE_UNSET));
|
||||||
|
|
||||||
|
@ -246,6 +246,8 @@ public final class DefaultMediaSourceFactoryTest {
|
|||||||
MediaItem mediaItemFromSource = mediaSource.getMediaItem();
|
MediaItem mediaItemFromSource = mediaSource.getMediaItem();
|
||||||
|
|
||||||
assertThat(mediaItemFromSource.liveConfiguration.targetLiveOffsetMs).isEqualTo(C.TIME_UNSET);
|
assertThat(mediaItemFromSource.liveConfiguration.targetLiveOffsetMs).isEqualTo(C.TIME_UNSET);
|
||||||
|
assertThat(mediaItemFromSource.liveConfiguration.minLiveOffsetMs).isEqualTo(C.TIME_UNSET);
|
||||||
|
assertThat(mediaItemFromSource.liveConfiguration.maxLiveOffsetMs).isEqualTo(C.TIME_UNSET);
|
||||||
assertThat(mediaItemFromSource.liveConfiguration.minPlaybackSpeed).isEqualTo(C.RATE_UNSET);
|
assertThat(mediaItemFromSource.liveConfiguration.minPlaybackSpeed).isEqualTo(C.RATE_UNSET);
|
||||||
assertThat(mediaItemFromSource.liveConfiguration.maxPlaybackSpeed).isEqualTo(C.RATE_UNSET);
|
assertThat(mediaItemFromSource.liveConfiguration.maxPlaybackSpeed).isEqualTo(C.RATE_UNSET);
|
||||||
}
|
}
|
||||||
@ -255,6 +257,8 @@ public final class DefaultMediaSourceFactoryTest {
|
|||||||
DefaultMediaSourceFactory defaultMediaSourceFactory =
|
DefaultMediaSourceFactory defaultMediaSourceFactory =
|
||||||
new DefaultMediaSourceFactory((Context) ApplicationProvider.getApplicationContext())
|
new DefaultMediaSourceFactory((Context) ApplicationProvider.getApplicationContext())
|
||||||
.setLiveTargetOffsetMs(20)
|
.setLiveTargetOffsetMs(20)
|
||||||
|
.setLiveMinOffsetMs(2222)
|
||||||
|
.setLiveMaxOffsetMs(4444)
|
||||||
.setLiveMinSpeed(.1f)
|
.setLiveMinSpeed(.1f)
|
||||||
.setLiveMaxSpeed(2.0f);
|
.setLiveMaxSpeed(2.0f);
|
||||||
MediaItem mediaItem = new MediaItem.Builder().setUri(URI_MEDIA + "/file.mp4").build();
|
MediaItem mediaItem = new MediaItem.Builder().setUri(URI_MEDIA + "/file.mp4").build();
|
||||||
@ -263,6 +267,8 @@ public final class DefaultMediaSourceFactoryTest {
|
|||||||
MediaItem mediaItemFromSource = mediaSource.getMediaItem();
|
MediaItem mediaItemFromSource = mediaSource.getMediaItem();
|
||||||
|
|
||||||
assertThat(mediaItemFromSource.liveConfiguration.targetLiveOffsetMs).isEqualTo(20);
|
assertThat(mediaItemFromSource.liveConfiguration.targetLiveOffsetMs).isEqualTo(20);
|
||||||
|
assertThat(mediaItemFromSource.liveConfiguration.minLiveOffsetMs).isEqualTo(2222);
|
||||||
|
assertThat(mediaItemFromSource.liveConfiguration.maxLiveOffsetMs).isEqualTo(4444);
|
||||||
assertThat(mediaItemFromSource.liveConfiguration.minPlaybackSpeed).isEqualTo(.1f);
|
assertThat(mediaItemFromSource.liveConfiguration.minPlaybackSpeed).isEqualTo(.1f);
|
||||||
assertThat(mediaItemFromSource.liveConfiguration.maxPlaybackSpeed).isEqualTo(2.0f);
|
assertThat(mediaItemFromSource.liveConfiguration.maxPlaybackSpeed).isEqualTo(2.0f);
|
||||||
}
|
}
|
||||||
@ -272,12 +278,16 @@ public final class DefaultMediaSourceFactoryTest {
|
|||||||
DefaultMediaSourceFactory defaultMediaSourceFactory =
|
DefaultMediaSourceFactory defaultMediaSourceFactory =
|
||||||
new DefaultMediaSourceFactory((Context) ApplicationProvider.getApplicationContext())
|
new DefaultMediaSourceFactory((Context) ApplicationProvider.getApplicationContext())
|
||||||
.setLiveTargetOffsetMs(20)
|
.setLiveTargetOffsetMs(20)
|
||||||
|
.setLiveMinOffsetMs(2222)
|
||||||
|
.setLiveMinOffsetMs(4444)
|
||||||
.setLiveMinSpeed(.1f)
|
.setLiveMinSpeed(.1f)
|
||||||
.setLiveMaxSpeed(2.0f);
|
.setLiveMaxSpeed(2.0f);
|
||||||
MediaItem mediaItem =
|
MediaItem mediaItem =
|
||||||
new MediaItem.Builder()
|
new MediaItem.Builder()
|
||||||
.setUri(URI_MEDIA + "/file.mp4")
|
.setUri(URI_MEDIA + "/file.mp4")
|
||||||
.setLiveTargetOffsetMs(10)
|
.setLiveTargetOffsetMs(10)
|
||||||
|
.setLiveMinOffsetMs(1111)
|
||||||
|
.setLiveMinOffsetMs(3333)
|
||||||
.setLiveMinPlaybackSpeed(20.0f)
|
.setLiveMinPlaybackSpeed(20.0f)
|
||||||
.setLiveMaxPlaybackSpeed(20.0f)
|
.setLiveMaxPlaybackSpeed(20.0f)
|
||||||
.build();
|
.build();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user