mirror of
https://github.com/samsonjs/media.git
synced 2026-04-27 15:07:40 +00:00
Support customization of the PlaylistStuckException waiting period
Issue:#5487 PiperOrigin-RevId: 234586819
This commit is contained in:
parent
a174af0d70
commit
28434cff4c
1 changed files with 31 additions and 4 deletions
|
|
@ -45,16 +45,17 @@ public final class DefaultHlsPlaylistTracker
|
||||||
public static final Factory FACTORY = DefaultHlsPlaylistTracker::new;
|
public static final Factory FACTORY = DefaultHlsPlaylistTracker::new;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Coefficient applied on the target duration of a playlist to determine the amount of time after
|
* Default coefficient applied on the target duration of a playlist to determine the amount of
|
||||||
* which an unchanging playlist is considered stuck.
|
* time after which an unchanging playlist is considered stuck.
|
||||||
*/
|
*/
|
||||||
private static final double PLAYLIST_STUCK_TARGET_DURATION_COEFFICIENT = 3.5;
|
public static final double DEFAULT_PLAYLIST_STUCK_TARGET_DURATION_COEFFICIENT = 3.5;
|
||||||
|
|
||||||
private final HlsDataSourceFactory dataSourceFactory;
|
private final HlsDataSourceFactory dataSourceFactory;
|
||||||
private final HlsPlaylistParserFactory playlistParserFactory;
|
private final HlsPlaylistParserFactory playlistParserFactory;
|
||||||
private final LoadErrorHandlingPolicy loadErrorHandlingPolicy;
|
private final LoadErrorHandlingPolicy loadErrorHandlingPolicy;
|
||||||
private final IdentityHashMap<HlsUrl, MediaPlaylistBundle> playlistBundles;
|
private final IdentityHashMap<HlsUrl, MediaPlaylistBundle> playlistBundles;
|
||||||
private final List<PlaylistEventListener> listeners;
|
private final List<PlaylistEventListener> listeners;
|
||||||
|
private final double playlistStuckTargetDurationCoefficient;
|
||||||
|
|
||||||
private @Nullable ParsingLoadable.Parser<HlsPlaylist> mediaPlaylistParser;
|
private @Nullable ParsingLoadable.Parser<HlsPlaylist> mediaPlaylistParser;
|
||||||
private @Nullable EventDispatcher eventDispatcher;
|
private @Nullable EventDispatcher eventDispatcher;
|
||||||
|
|
@ -68,6 +69,8 @@ public final class DefaultHlsPlaylistTracker
|
||||||
private long initialStartTimeUs;
|
private long initialStartTimeUs;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* Creates an instance.
|
||||||
|
*
|
||||||
* @param dataSourceFactory A factory for {@link DataSource} instances.
|
* @param dataSourceFactory A factory for {@link DataSource} instances.
|
||||||
* @param loadErrorHandlingPolicy The {@link LoadErrorHandlingPolicy}.
|
* @param loadErrorHandlingPolicy The {@link LoadErrorHandlingPolicy}.
|
||||||
* @param playlistParserFactory An {@link HlsPlaylistParserFactory}.
|
* @param playlistParserFactory An {@link HlsPlaylistParserFactory}.
|
||||||
|
|
@ -76,9 +79,33 @@ public final class DefaultHlsPlaylistTracker
|
||||||
HlsDataSourceFactory dataSourceFactory,
|
HlsDataSourceFactory dataSourceFactory,
|
||||||
LoadErrorHandlingPolicy loadErrorHandlingPolicy,
|
LoadErrorHandlingPolicy loadErrorHandlingPolicy,
|
||||||
HlsPlaylistParserFactory playlistParserFactory) {
|
HlsPlaylistParserFactory playlistParserFactory) {
|
||||||
|
this(
|
||||||
|
dataSourceFactory,
|
||||||
|
loadErrorHandlingPolicy,
|
||||||
|
playlistParserFactory,
|
||||||
|
DEFAULT_PLAYLIST_STUCK_TARGET_DURATION_COEFFICIENT);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates an instance.
|
||||||
|
*
|
||||||
|
* @param dataSourceFactory A factory for {@link DataSource} instances.
|
||||||
|
* @param loadErrorHandlingPolicy The {@link LoadErrorHandlingPolicy}.
|
||||||
|
* @param playlistParserFactory An {@link HlsPlaylistParserFactory}.
|
||||||
|
* @param playlistStuckTargetDurationCoefficient A coefficient to apply to the target duration of
|
||||||
|
* media playlists in order to determine that a non-changing playlist is stuck. Once a
|
||||||
|
* playlist is deemed stuck, a {@link PlaylistStuckException} is thrown via {@link
|
||||||
|
* #maybeThrowPlaylistRefreshError(HlsUrl)}.
|
||||||
|
*/
|
||||||
|
public DefaultHlsPlaylistTracker(
|
||||||
|
HlsDataSourceFactory dataSourceFactory,
|
||||||
|
LoadErrorHandlingPolicy loadErrorHandlingPolicy,
|
||||||
|
HlsPlaylistParserFactory playlistParserFactory,
|
||||||
|
double playlistStuckTargetDurationCoefficient) {
|
||||||
this.dataSourceFactory = dataSourceFactory;
|
this.dataSourceFactory = dataSourceFactory;
|
||||||
this.playlistParserFactory = playlistParserFactory;
|
this.playlistParserFactory = playlistParserFactory;
|
||||||
this.loadErrorHandlingPolicy = loadErrorHandlingPolicy;
|
this.loadErrorHandlingPolicy = loadErrorHandlingPolicy;
|
||||||
|
this.playlistStuckTargetDurationCoefficient = playlistStuckTargetDurationCoefficient;
|
||||||
listeners = new ArrayList<>();
|
listeners = new ArrayList<>();
|
||||||
playlistBundles = new IdentityHashMap<>();
|
playlistBundles = new IdentityHashMap<>();
|
||||||
initialStartTimeUs = C.TIME_UNSET;
|
initialStartTimeUs = C.TIME_UNSET;
|
||||||
|
|
@ -597,7 +624,7 @@ public final class DefaultHlsPlaylistTracker
|
||||||
notifyPlaylistError(playlistUrl, C.TIME_UNSET);
|
notifyPlaylistError(playlistUrl, C.TIME_UNSET);
|
||||||
} else if (currentTimeMs - lastSnapshotChangeMs
|
} else if (currentTimeMs - lastSnapshotChangeMs
|
||||||
> C.usToMs(playlistSnapshot.targetDurationUs)
|
> C.usToMs(playlistSnapshot.targetDurationUs)
|
||||||
* PLAYLIST_STUCK_TARGET_DURATION_COEFFICIENT) {
|
* playlistStuckTargetDurationCoefficient) {
|
||||||
// TODO: Allow customization of stuck playlists handling.
|
// TODO: Allow customization of stuck playlists handling.
|
||||||
playlistError = new PlaylistStuckException(playlistUrl.url);
|
playlistError = new PlaylistStuckException(playlistUrl.url);
|
||||||
long blacklistDurationMs =
|
long blacklistDurationMs =
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue