diff --git a/library/core/src/main/java/com/google/android/exoplayer2/upstream/BandwidthMeter.java b/library/core/src/main/java/com/google/android/exoplayer2/upstream/BandwidthMeter.java index 470937f02f..85bcda4e32 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/upstream/BandwidthMeter.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/upstream/BandwidthMeter.java @@ -29,30 +29,33 @@ public interface BandwidthMeter { interface EventListener { /** - * Called periodically to indicate that bytes have been transferred. + * Called periodically to indicate that bytes have been transferred or the estimated bitrate has + * changed. * *

Note: The estimated bitrate is typically derived from more information than just {@code * bytes} and {@code elapsedMs}. * - * @param elapsedMs The time taken to transfer the bytes, in milliseconds. - * @param bytes The number of bytes transferred. - * @param bitrate The estimated bitrate in bits/sec. + * @param elapsedMs The time taken to transfer {@code bytesTransferred}, in milliseconds. This + * is at most the elapsed time since the last callback, but may be less if there were + * periods during which data was not being transferred. + * @param bytesTransferred The number of bytes transferred since the last callback. + * @param bitrateEstimate The estimated bitrate in bits/sec. */ - void onBandwidthSample(int elapsedMs, long bytes, long bitrate); + void onBandwidthSample(int elapsedMs, long bytesTransferred, long bitrateEstimate); } - /** Returns the estimated bandwidth in bits/sec. */ + /** Returns the estimated bitrate. */ long getBitrateEstimate(); /** * Returns the {@link TransferListener} that this instance uses to gather bandwidth information - * from data transfers. May be null, if no transfer listener is used. + * from data transfers. May be null if the implementation does not listen to data transfers. */ @Nullable TransferListener getTransferListener(); /** - * Adds an {@link EventListener} to be informed of bandwidth samples. + * Adds an {@link EventListener}. * * @param eventHandler A handler for events. * @param eventListener A listener of events. diff --git a/library/core/src/main/java/com/google/android/exoplayer2/upstream/DefaultBandwidthMeter.java b/library/core/src/main/java/com/google/android/exoplayer2/upstream/DefaultBandwidthMeter.java index 0654d2b475..6be13603ee 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/upstream/DefaultBandwidthMeter.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/upstream/DefaultBandwidthMeter.java @@ -309,16 +309,16 @@ public final class DefaultBandwidthMeter implements BandwidthMeter, TransferList || totalBytesTransferred >= BYTES_TRANSFERRED_FOR_ESTIMATE) { bitrateEstimate = (long) slidingPercentile.getPercentile(0.5f); } - } - notifyBandwidthSample(sampleElapsedTimeMs, sampleBytesTransferred, bitrateEstimate); - if (--streamCount > 0) { + notifyBandwidthSample(sampleElapsedTimeMs, sampleBytesTransferred, bitrateEstimate); sampleStartTimeMs = nowMs; - } - sampleBytesTransferred = 0; + sampleBytesTransferred = 0; + } // Else any sample bytes transferred will be carried forward into the next sample. + streamCount--; } - private void notifyBandwidthSample(int elapsedMs, long bytes, long bitrate) { - eventDispatcher.dispatch(listener -> listener.onBandwidthSample(elapsedMs, bytes, bitrate)); + private void notifyBandwidthSample(int elapsedMs, long bytesTransferred, long bitrateEstimate) { + eventDispatcher.dispatch( + listener -> listener.onBandwidthSample(elapsedMs, bytesTransferred, bitrateEstimate)); } private long getInitialBitrateEstimateForNetworkType(@C.NetworkType int networkType) {