Package com.google.android.exoplayer2.upstream

## Class DefaultBandwidthMeter

- java.lang.Object
- - com.google.android.exoplayer2.upstream.DefaultBandwidthMeter

- All Implemented Interfaces:
    `BandwidthMeter`, `TransferListener`

      public final class DefaultBandwidthMeter
      extends Object
      implements BandwidthMeter, TransferListener

  Estimates bandwidth by listening to data transfers.

  The bandwidth estimate is calculated using a `SlidingPercentile` and is updated each time a transfer ends. The initial estimate is based on the current operator's network country code or the locale of the user, as well as the network connection type. This can be configured in the `DefaultBandwidthMeter.Builder`.

- - ### Nested Class Summary

    Nested Classes
    Modifier and Type | Class | Description
    --- | --- | ---
    `static class` | `DefaultBandwidthMeter.Builder` | Builder for a bandwidth meter.

    - ### Nested classes/interfaces inherited from interface com.google.android.exoplayer2.upstream.BandwidthMeter

      `BandwidthMeter.EventListener`

  - ### Field Summary

    Fields
    Modifier and Type | Field | Description
    --- | --- | ---
    `static ImmutableListMultimap<String,​Integer>` | `DEFAULT_INITIAL_BITRATE_COUNTRY_GROUPS` | Country groups used to determine the default initial bitrate estimate.
    `static long` | `DEFAULT_INITIAL_BITRATE_ESTIMATE` | Default initial bitrate estimate used when the device is offline or the network type cannot be determined, in bits per second.
    `static ImmutableList<Long>` | `DEFAULT_INITIAL_BITRATE_ESTIMATES_2G` | Default initial 2G bitrate estimates in bits per second.
    `static ImmutableList<Long>` | `DEFAULT_INITIAL_BITRATE_ESTIMATES_3G` | Default initial 3G bitrate estimates in bits per second.
    `static ImmutableList<Long>` | `DEFAULT_INITIAL_BITRATE_ESTIMATES_4G` | Default initial 4G bitrate estimates in bits per second.
    `static ImmutableList<Long>` | `DEFAULT_INITIAL_BITRATE_ESTIMATES_5G_NSA` | Default initial 5G-NSA bitrate estimates in bits per second.
    `static ImmutableList<Long>` | `DEFAULT_INITIAL_BITRATE_ESTIMATES_5G_SA` | Default initial 5G-SA bitrate estimates in bits per second.
    `static ImmutableList<Long>` | `DEFAULT_INITIAL_BITRATE_ESTIMATES_WIFI` | Default initial Wifi bitrate estimate in bits per second.
    `static int` | `DEFAULT_SLIDING_WINDOW_MAX_WEIGHT` | Default maximum weight for the sliding window.

  - ### Constructor Summary

    Constructors
    Constructor | Description
    --- | ---
    `DefaultBandwidthMeter()` | Deprecated. Use `DefaultBandwidthMeter.Builder` instead.

  - ### Method Summary

    All Methods Static Methods Instance Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `void` | `addEventListener​(Handler eventHandler, BandwidthMeter.EventListener eventListener)` | Adds an `BandwidthMeter.EventListener`.
    `long` | `getBitrateEstimate()` | Returns the estimated bitrate.
    `static DefaultBandwidthMeter` | `getSingletonInstance​(Context context)` | Returns a singleton instance of a `DefaultBandwidthMeter` with default configuration.
    `TransferListener` | `getTransferListener()` | Returns the `TransferListener` that this instance uses to gather bandwidth information from data transfers.
    `void` | `onBytesTransferred​(DataSource source, DataSpec dataSpec, boolean isNetwork, int bytes)` | Called incrementally during a transfer.
    `void` | `onTransferEnd​(DataSource source, DataSpec dataSpec, boolean isNetwork)` | Called when a transfer ends.
    `void` | `onTransferInitializing​(DataSource source, DataSpec dataSpec, boolean isNetwork)` | Called when a transfer is being initialized.
    `void` | `onTransferStart​(DataSource source, DataSpec dataSpec, boolean isNetwork)` | Called when a transfer starts.
    `void` | `removeEventListener​(BandwidthMeter.EventListener eventListener)` | Removes an `BandwidthMeter.EventListener`.
    `void` | `setNetworkTypeOverride​(int networkType)` | Overrides the network type.

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

    - ### Methods inherited from interface com.google.android.exoplayer2.upstream.BandwidthMeter

      `getTimeToFirstByteEstimateUs`

- - ### Field Detail

    - #### DEFAULT_INITIAL_BITRATE_COUNTRY_GROUPS

          public static final ImmutableListMultimap<String,​Integer> DEFAULT_INITIAL_BITRATE_COUNTRY_GROUPS

      Country groups used to determine the default initial bitrate estimate. The group assignment for each country is a list for [Wifi, 2G, 3G, 4G, 5G_NSA, 5G_SA].

    - #### DEFAULT_INITIAL_BITRATE_ESTIMATES_WIFI

          public static final ImmutableList<Long> DEFAULT_INITIAL_BITRATE_ESTIMATES_WIFI

      Default initial Wifi bitrate estimate in bits per second.

    - #### DEFAULT_INITIAL_BITRATE_ESTIMATES_2G

          public static final ImmutableList<Long> DEFAULT_INITIAL_BITRATE_ESTIMATES_2G

      Default initial 2G bitrate estimates in bits per second.

    - #### DEFAULT_INITIAL_BITRATE_ESTIMATES_3G

          public static final ImmutableList<Long> DEFAULT_INITIAL_BITRATE_ESTIMATES_3G

      Default initial 3G bitrate estimates in bits per second.

    - #### DEFAULT_INITIAL_BITRATE_ESTIMATES_4G

          public static final ImmutableList<Long> DEFAULT_INITIAL_BITRATE_ESTIMATES_4G

      Default initial 4G bitrate estimates in bits per second.

    - #### DEFAULT_INITIAL_BITRATE_ESTIMATES_5G_NSA

          public static final ImmutableList<Long> DEFAULT_INITIAL_BITRATE_ESTIMATES_5G_NSA

      Default initial 5G-NSA bitrate estimates in bits per second.

    - #### DEFAULT_INITIAL_BITRATE_ESTIMATES_5G_SA

          public static final ImmutableList<Long> DEFAULT_INITIAL_BITRATE_ESTIMATES_5G_SA

      Default initial 5G-SA bitrate estimates in bits per second.

    - #### DEFAULT_INITIAL_BITRATE_ESTIMATE

          public static final long DEFAULT_INITIAL_BITRATE_ESTIMATE

      Default initial bitrate estimate used when the device is offline or the network type cannot be determined, in bits per second.
      See Also:
        Constant Field Values

    - #### DEFAULT_SLIDING_WINDOW_MAX_WEIGHT

          public static final int DEFAULT_SLIDING_WINDOW_MAX_WEIGHT

      Default maximum weight for the sliding window.
      See Also:
        Constant Field Values

  - ### Constructor Detail

    - #### DefaultBandwidthMeter

          @Deprecated
          public DefaultBandwidthMeter()

      Deprecated.
      Use `DefaultBandwidthMeter.Builder` instead.

  - ### Method Detail

    - #### getSingletonInstance

          public static DefaultBandwidthMeter getSingletonInstance​(Context context)

      Returns a singleton instance of a `DefaultBandwidthMeter` with default configuration.
      Parameters:
        `context` - A `Context`.
      Returns:
        The singleton instance.

    - #### setNetworkTypeOverride

          public void setNetworkTypeOverride​(@NetworkType
                                             int networkType)

      Overrides the network type. Handled in the same way as if the meter had detected a change from the current network type to the specified network type internally.

      Applications should not normally call this method. It is intended for testing purposes.

      Parameters:
        `networkType` - The overriding network type.

    - #### getBitrateEstimate

          public long getBitrateEstimate()

      Description copied from interface: `BandwidthMeter`
      Returns the estimated bitrate.
      Specified by:
        `getBitrateEstimate` in interface `BandwidthMeter`

    - #### getTransferListener

          public TransferListener getTransferListener()

      Description copied from interface: `BandwidthMeter`
      Returns the `TransferListener` that this instance uses to gather bandwidth information from data transfers. May be null if the implementation does not listen to data transfers.
      Specified by:
        `getTransferListener` in interface `BandwidthMeter`

    - #### addEventListener

          public void addEventListener​(Handler eventHandler,
                                       BandwidthMeter.EventListener eventListener)

      Description copied from interface: `BandwidthMeter`
      Adds an `BandwidthMeter.EventListener`.
      Specified by:
        `addEventListener` in interface `BandwidthMeter`
      Parameters:
        `eventHandler` - A handler for events.
        `eventListener` - A listener of events.

    - #### removeEventListener

          public void removeEventListener​(BandwidthMeter.EventListener eventListener)

      Description copied from interface: `BandwidthMeter`
      Removes an `BandwidthMeter.EventListener`.
      Specified by:
        `removeEventListener` in interface `BandwidthMeter`
      Parameters:
        `eventListener` - The listener to be removed.

    - #### onTransferInitializing

          public void onTransferInitializing​(DataSource source,
                                             DataSpec dataSpec,
                                             boolean isNetwork)

      Description copied from interface: `TransferListener`
      Called when a transfer is being initialized.
      Specified by:
        `onTransferInitializing` in interface `TransferListener`
      Parameters:
        `source` - The source performing the transfer.
        `dataSpec` - Describes the data for which the transfer is initialized.
        `isNetwork` - Whether the data is transferred through a network.

    - #### onTransferStart

          public void onTransferStart​(DataSource source,
                                      DataSpec dataSpec,
                                      boolean isNetwork)

      Description copied from interface: `TransferListener`
      Called when a transfer starts.
      Specified by:
        `onTransferStart` in interface `TransferListener`
      Parameters:
        `source` - The source performing the transfer.
        `dataSpec` - Describes the data being transferred.
        `isNetwork` - Whether the data is transferred through a network.

    - #### onBytesTransferred

          public void onBytesTransferred​(DataSource source,
                                         DataSpec dataSpec,
                                         boolean isNetwork,
                                         int bytes)

      Description copied from interface: `TransferListener`
      Called incrementally during a transfer.
      Specified by:
        `onBytesTransferred` in interface `TransferListener`
      Parameters:
        `source` - The source performing the transfer.
        `dataSpec` - Describes the data being transferred.
        `isNetwork` - Whether the data is transferred through a network.
        `bytes` - The number of bytes transferred since the previous call to this method

    - #### onTransferEnd

          public void onTransferEnd​(DataSource source,
                                    DataSpec dataSpec,
                                    boolean isNetwork)

      Description copied from interface: `TransferListener`
      Called when a transfer ends.
      Specified by:
        `onTransferEnd` in interface `TransferListener`
      Parameters:
        `source` - The source performing the transfer.
        `dataSpec` - Describes the data being transferred.
        `isNetwork` - Whether the data is transferred through a network.