Commit 7c587c6b by aquilescanta Committed by Oliver Woodman

Prevent playlist loading if refresh is already scheduled

This greatly reduces the amount of server requests issued by
the playlist tracker.

Issue:#2548

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=150055046
parent 204537ed
...@@ -432,6 +432,7 @@ public final class HlsPlaylistTracker implements Loader.Callback<ParsingLoadable ...@@ -432,6 +432,7 @@ public final class HlsPlaylistTracker implements Loader.Callback<ParsingLoadable
private long lastSnapshotLoadMs; private long lastSnapshotLoadMs;
private long lastSnapshotAccessTimeMs; private long lastSnapshotAccessTimeMs;
private long blacklistUntilMs; private long blacklistUntilMs;
private boolean pendingRefresh;
public MediaPlaylistBundle(HlsUrl playlistUrl, long initialLastSnapshotAccessTimeMs) { public MediaPlaylistBundle(HlsUrl playlistUrl, long initialLastSnapshotAccessTimeMs) {
this.playlistUrl = playlistUrl; this.playlistUrl = playlistUrl;
...@@ -466,7 +467,7 @@ public final class HlsPlaylistTracker implements Loader.Callback<ParsingLoadable ...@@ -466,7 +467,7 @@ public final class HlsPlaylistTracker implements Loader.Callback<ParsingLoadable
public void loadPlaylist() { public void loadPlaylist() {
blacklistUntilMs = 0; blacklistUntilMs = 0;
if (!mediaPlaylistLoader.isLoading()) { if (!pendingRefresh && !mediaPlaylistLoader.isLoading()) {
mediaPlaylistLoader.startLoading(mediaPlaylistLoadable, this, minRetryCount); mediaPlaylistLoader.startLoading(mediaPlaylistLoadable, this, minRetryCount);
} }
} }
...@@ -512,6 +513,7 @@ public final class HlsPlaylistTracker implements Loader.Callback<ParsingLoadable ...@@ -512,6 +513,7 @@ public final class HlsPlaylistTracker implements Loader.Callback<ParsingLoadable
@Override @Override
public void run() { public void run() {
pendingRefresh = false;
loadPlaylist(); loadPlaylist();
} }
...@@ -531,7 +533,7 @@ public final class HlsPlaylistTracker implements Loader.Callback<ParsingLoadable ...@@ -531,7 +533,7 @@ public final class HlsPlaylistTracker implements Loader.Callback<ParsingLoadable
} }
if (refreshDelayUs != C.TIME_UNSET) { if (refreshDelayUs != C.TIME_UNSET) {
// See HLS spec v20, section 6.3.4 for more information on media playlist refreshing. // See HLS spec v20, section 6.3.4 for more information on media playlist refreshing.
playlistRefreshHandler.postDelayed(this, C.usToMs(refreshDelayUs)); pendingRefresh = playlistRefreshHandler.postDelayed(this, C.usToMs(refreshDelayUs));
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment