LivePlaybackSpeedControl
public final class DefaultLivePlaybackSpeedControl extends Object implements LivePlaybackSpeedControl
LivePlaybackSpeedControl
that adjusts the playback speed using a proportional
controller.
The control mechanism calculates the adjusted speed as 1.0 + proportionalControlFactor
x (currentLiveOffsetSec - targetLiveOffsetSec)
. Unit speed (1.0f) is used, if the
currentLiveOffsetSec
is closer to targetLiveOffsetSec
than the value set with DefaultLivePlaybackSpeedControl.Builder.setMaxLiveOffsetErrorMsForUnitSpeed(long)
.
The resulting speed is clamped to a minimum and maximum speed defined by the media, the
fallback values set with DefaultLivePlaybackSpeedControl.Builder.setFallbackMinPlaybackSpeed(float)
and DefaultLivePlaybackSpeedControl.Builder.setFallbackMaxPlaybackSpeed(float)
or the minimum
and maximum
fallback default values.
When the player rebuffers, the target live offset is increased
to adjust to the reduced
network capabilities. The live playback speed control also keeps track
of the minimum possible live
offset to decrease the target live offset again if conditions improve. The minimum possible live
offset is derived from the current offset and the duration of buffered media.
Modifier and Type | Class | Description |
---|---|---|
static class |
DefaultLivePlaybackSpeedControl.Builder |
Builder for a
DefaultLivePlaybackSpeedControl . |
Modifier and Type | Field | Description |
---|---|---|
static float |
DEFAULT_FALLBACK_MAX_PLAYBACK_SPEED |
The default maximum factor by which playback can be sped up that should be used if no maximum
playback speed is defined by the media.
|
static float |
DEFAULT_FALLBACK_MIN_PLAYBACK_SPEED |
The default minimum factor by which playback can be sped up that should be used if no minimum
playback speed is defined by the media.
|
static long |
DEFAULT_MAX_LIVE_OFFSET_ERROR_MS_FOR_UNIT_SPEED |
The default maximum difference between the current live offset and the target live offset, in
milliseconds, for which unit speed (1.0f) is used.
|
static float |
DEFAULT_MIN_POSSIBLE_LIVE_OFFSET_SMOOTHING_FACTOR |
The default smoothing factor when smoothing the minimum possible live offset that can be
achieved during playback.
|
static long |
DEFAULT_MIN_UPDATE_INTERVAL_MS |
The default
minimum interval between playback
speed changes, in milliseconds. |
static float |
DEFAULT_PROPORTIONAL_CONTROL_FACTOR |
The default
proportional control factor
used to adjust the playback speed. |
static long |
DEFAULT_TARGET_LIVE_OFFSET_INCREMENT_ON_REBUFFER_MS |
The default increment applied to the target live offset each time the player is rebuffering, in
milliseconds
|
Modifier and Type | Method | Description |
---|---|---|
float |
getAdjustedPlaybackSpeed(long liveOffsetUs,
long bufferedDurationUs) |
Returns the adjusted playback speed in order get closer towards the
target live offset . |
long |
getTargetLiveOffsetUs() |
Returns the current target live offset, in microseconds, or
C.TIME_UNSET if no target
live offset is defined for the current media. |
void |
notifyRebuffer() |
Notifies the live playback speed control that a rebuffer occurred.
|
void |
setLiveConfiguration(MediaItem.LiveConfiguration liveConfiguration) |
Sets the live configuration defined by the media.
|
void |
setTargetLiveOffsetOverrideUs(long liveOffsetUs) |
Sets the target live offset in microseconds that overrides the live offset
configured by the media. |
public static final float DEFAULT_FALLBACK_MIN_PLAYBACK_SPEED
public static final float DEFAULT_FALLBACK_MAX_PLAYBACK_SPEED
public static final long DEFAULT_MIN_UPDATE_INTERVAL_MS
minimum interval
between playback
speed changes, in milliseconds.public static final float DEFAULT_PROPORTIONAL_CONTROL_FACTOR
proportional control factor
used to adjust the playback speed.public static final long DEFAULT_TARGET_LIVE_OFFSET_INCREMENT_ON_REBUFFER_MS
public static final float DEFAULT_MIN_POSSIBLE_LIVE_OFFSET_SMOOTHING_FACTOR
public static final long DEFAULT_MAX_LIVE_OFFSET_ERROR_MS_FOR_UNIT_SPEED
public void setLiveConfiguration(MediaItem.LiveConfiguration liveConfiguration)
LivePlaybackSpeedControl
setLiveConfiguration
in interface LivePlaybackSpeedControl
liveConfiguration
- The MediaItem.LiveConfiguration
as defined by the media.public void setTargetLiveOffsetOverrideUs(long liveOffsetUs)
LivePlaybackSpeedControl
configured
by the media. Passing C.TIME_UNSET
deletes a previous
override.
If no target live offset is configured by LivePlaybackSpeedControl.setLiveConfiguration(com.google.android.exoplayer2.MediaItem.LiveConfiguration)
, this override has
no effect.
setTargetLiveOffsetOverrideUs
in interface LivePlaybackSpeedControl
public void notifyRebuffer()
LivePlaybackSpeedControl
A rebuffer is defined to be caused by buffer depletion rather than a user action. Hence this method is not called during initial buffering or when buffering as a result of a seek operation.
notifyRebuffer
in interface LivePlaybackSpeedControl
public float getAdjustedPlaybackSpeed(long liveOffsetUs, long bufferedDurationUs)
LivePlaybackSpeedControl
target live offset
.getAdjustedPlaybackSpeed
in interface LivePlaybackSpeedControl
liveOffsetUs
- The current live offset, in microseconds.bufferedDurationUs
- The duration of media that's currently buffered, in microseconds.public long getTargetLiveOffsetUs()
LivePlaybackSpeedControl
C.TIME_UNSET
if no target
live offset is defined for the current media.getTargetLiveOffsetUs
in interface LivePlaybackSpeedControl