com.brightcove.player.network

## Class PlayerBandwidthMeter

- java.lang.Object
- - com.brightcove.player.network.PlayerBandwidthMeter

- All Implemented Interfaces:
    com.google.android.exoplayer2.upstream.BandwidthMeter, com.google.android.exoplayer2.upstream.TransferListener

      public class PlayerBandwidthMeter
      extends java.lang.Object
      implements com.google.android.exoplayer2.upstream.BandwidthMeter, com.google.android.exoplayer2.upstream.TransferListener

  Provides an implementation of `BandwidthMeter` that tracks the total number of bytes transferred. By default all work will be delegated to `DefaultBandwidthMeter`. The caller may override the delegate to another instance any time.

- - ### Nested Class Summary

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

      `com.google.android.exoplayer2.upstream.BandwidthMeter.EventListener`

  - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `long` | `NO_ESTIMATE` Indicates no bandwidth estimate is available.

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `PlayerBandwidthMeter()` Constructs a new instance of the bandwidth meter that will use `DefaultBandwidthMeter` internally to delegate the work.
    `PlayerBandwidthMeter(com.google.android.exoplayer2.upstream.BandwidthMeter bandwidthMeter)` Constructs a new instance of the bandwidth meter that will use given bandwidth meter to delegate the work.
    `PlayerBandwidthMeter(android.content.Context context, android.os.Handler eventHandler, com.google.android.exoplayer2.upstream.BandwidthMeter.EventListener eventListener)` Constructs a new instance of the bandwidth meter that will use `DefaultBandwidthMeter` internally to delegate the work.
    `PlayerBandwidthMeter(android.os.Handler eventHandler, com.google.android.exoplayer2.upstream.BandwidthMeter.EventListener eventListener)` Constructs a new instance of the bandwidth meter that will use `DefaultBandwidthMeter` internally to delegate the work.

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `addEventListener(android.os.Handler eventHandler, com.google.android.exoplayer2.upstream.BandwidthMeter.EventListener eventListener)`
    `long` | `getBitrateEstimate()`
    `com.google.android.exoplayer2.upstream.BandwidthMeter` | `getDelegate()` Gets reference to actual bandwidth meter that is currently being delegated to handle bitrate estimate calculations.
    `long` | `getTotalBytesTransferred()` Gets the total number of bytes transferred so far.
    `com.google.android.exoplayer2.upstream.TransferListener` | `getTransferListener()`
    `void` | `onBytesTransferred(com.google.android.exoplayer2.upstream.DataSource source, com.google.android.exoplayer2.upstream.DataSpec dataSpec, boolean isNetwork, int bytesTransferred)`
    `void` | `onTransferEnd(com.google.android.exoplayer2.upstream.DataSource source, com.google.android.exoplayer2.upstream.DataSpec dataSpec, boolean isNetwork)`
    `void` | `onTransferInitializing(com.google.android.exoplayer2.upstream.DataSource source, com.google.android.exoplayer2.upstream.DataSpec dataSpec, boolean isNetwork)`
    `void` | `onTransferStart(com.google.android.exoplayer2.upstream.DataSource source, com.google.android.exoplayer2.upstream.DataSpec dataSpec, boolean isNetwork)`
    `void` | `removeEventListener(com.google.android.exoplayer2.upstream.BandwidthMeter.EventListener eventListener)`
    `PlayerBandwidthMeter` | `resetTotalBytesTransferred()` Resets the counter for total number of bytes transferred.
    `void` | `setDelegate(com.google.android.exoplayer2.upstream.BandwidthMeter bandwidthMeter)` Sets reference to actual bandwidth meter that must be used to handle bitrate estimate calculations.

    - ### 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

    - #### NO_ESTIMATE

          public long NO_ESTIMATE

      Indicates no bandwidth estimate is available.

  - ### Constructor Detail

    - #### PlayerBandwidthMeter

          public PlayerBandwidthMeter()

      Constructs a new instance of the bandwidth meter that will use `DefaultBandwidthMeter` internally to delegate the work.

    - #### PlayerBandwidthMeter

          public PlayerBandwidthMeter(@Nullable
                                      android.os.Handler eventHandler,
                                      @Nullable
                                      com.google.android.exoplayer2.upstream.BandwidthMeter.EventListener eventListener)

      Constructs a new instance of the bandwidth meter that will use `DefaultBandwidthMeter` internally to delegate the work.
      Parameters:
        `eventHandler` - reference to the event handler, if any.
        `eventListener` - reference to the event listener, if any.

    - #### PlayerBandwidthMeter

          public PlayerBandwidthMeter(@Nullable
                                      android.content.Context context,
                                      @Nullable
                                      android.os.Handler eventHandler,
                                      @Nullable
                                      com.google.android.exoplayer2.upstream.BandwidthMeter.EventListener eventListener)

      Constructs a new instance of the bandwidth meter that will use `DefaultBandwidthMeter` internally to delegate the work.
      Parameters:
        `eventHandler` - reference to the event handler, if any.
        `eventListener` - reference to the event listener, if any.

    - #### PlayerBandwidthMeter

          public PlayerBandwidthMeter(@Nullable
                                      com.google.android.exoplayer2.upstream.BandwidthMeter bandwidthMeter)

      Constructs a new instance of the bandwidth meter that will use given bandwidth meter to delegate the work.
      Parameters:
        `bandwidthMeter` - reference to the bandwidth meter to be used as delegate.

  - ### Method Detail

    - #### getBitrateEstimate

          public long getBitrateEstimate()

      Specified by:
        `getBitrateEstimate` in interface `com.google.android.exoplayer2.upstream.BandwidthMeter`

    - #### getTransferListener

          @Nullable
          public com.google.android.exoplayer2.upstream.TransferListener getTransferListener()

      Specified by:
        `getTransferListener` in interface `com.google.android.exoplayer2.upstream.BandwidthMeter`

    - #### addEventListener

          public void addEventListener(android.os.Handler eventHandler,
                                       com.google.android.exoplayer2.upstream.BandwidthMeter.EventListener eventListener)

      Specified by:
        `addEventListener` in interface `com.google.android.exoplayer2.upstream.BandwidthMeter`

    - #### removeEventListener

          public void removeEventListener(com.google.android.exoplayer2.upstream.BandwidthMeter.EventListener eventListener)

      Specified by:
        `removeEventListener` in interface `com.google.android.exoplayer2.upstream.BandwidthMeter`

    - #### getDelegate

          @Nullable
          public com.google.android.exoplayer2.upstream.BandwidthMeter getDelegate()

      Gets reference to actual bandwidth meter that is currently being delegated to handle bitrate estimate calculations.
      Returns:
        reference to a bandwidth meter, if available

    - #### setDelegate

          public void setDelegate(@Nullable
                                  com.google.android.exoplayer2.upstream.BandwidthMeter bandwidthMeter)

      Sets reference to actual bandwidth meter that must be used to handle bitrate estimate calculations.

    - #### onTransferInitializing

          public void onTransferInitializing(com.google.android.exoplayer2.upstream.DataSource source,
                                             com.google.android.exoplayer2.upstream.DataSpec dataSpec,
                                             boolean isNetwork)

      Specified by:
        `onTransferInitializing` in interface `com.google.android.exoplayer2.upstream.TransferListener`

    - #### onTransferStart

          public void onTransferStart(com.google.android.exoplayer2.upstream.DataSource source,
                                      com.google.android.exoplayer2.upstream.DataSpec dataSpec,
                                      boolean isNetwork)

      Specified by:
        `onTransferStart` in interface `com.google.android.exoplayer2.upstream.TransferListener`

    - #### onBytesTransferred

          public void onBytesTransferred(com.google.android.exoplayer2.upstream.DataSource source,
                                         com.google.android.exoplayer2.upstream.DataSpec dataSpec,
                                         boolean isNetwork,
                                         int bytesTransferred)

      Specified by:
        `onBytesTransferred` in interface `com.google.android.exoplayer2.upstream.TransferListener`

    - #### onTransferEnd

          public void onTransferEnd(com.google.android.exoplayer2.upstream.DataSource source,
                                    com.google.android.exoplayer2.upstream.DataSpec dataSpec,
                                    boolean isNetwork)

      Specified by:
        `onTransferEnd` in interface `com.google.android.exoplayer2.upstream.TransferListener`

    - #### getTotalBytesTransferred

          public long getTotalBytesTransferred()

      Gets the total number of bytes transferred so far.
      Returns:
        the total number of bytes transferred so far.

    - #### resetTotalBytesTransferred

          public PlayerBandwidthMeter resetTotalBytesTransferred()

      Resets the counter for total number of bytes transferred.
      Returns:
        reference to the bandwidth meter.