# BandwidthMeter

Artifact: [androidx.media3:media3-exoplayer](https://developer.android.com/jetpack/androidx/releases/media3) [View Source](https://cs.android.com/search?q=file:androidx/media3/exoplayer/upstream/BandwidthMeter.java+class:androidx.media3.exoplayer.upstream.BandwidthMeter)

*** ** * ** ***


```
@UnstableApi
public interface BandwidthMeter
```

<br />

Known direct subclasses [DefaultBandwidthMeter](https://developer.android.com/reference/androidx/media3/exoplayer/upstream/DefaultBandwidthMeter), [ExperimentalBandwidthMeter](https://developer.android.com/reference/androidx/media3/exoplayer/upstream/experimental/ExperimentalBandwidthMeter)

|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/upstream/DefaultBandwidthMeter` | Estimates bandwidth by listening to data transfers. |
| `https://developer.android.com/reference/androidx/media3/exoplayer/upstream/experimental/ExperimentalBandwidthMeter` | An experimental `https://developer.android.com/reference/androidx/media3/exoplayer/upstream/BandwidthMeter` that estimates bandwidth by listening to data transfers. |

*** ** * ** ***

Provides estimates of the currently available bandwidth.

## Summary

| ### Nested types |
|---|
| `public interface https://developer.android.com/reference/androidx/media3/exoplayer/upstream/BandwidthMeter.EventListener` A listener of `https://developer.android.com/reference/androidx/media3/exoplayer/upstream/BandwidthMeter` events. |
| `public final class https://developer.android.com/reference/androidx/media3/exoplayer/upstream/BandwidthMeter.EventListener.EventDispatcher` Event dispatcher which allows listener registration. |

| ### Constants |
|---|---|
| `default static final https://developer.android.com/reference/androidx/media3/exoplayer/upstream/BandwidthMeter` | `https://developer.android.com/reference/androidx/media3/exoplayer/upstream/BandwidthMeter#NO_OP()` A no-op `https://developer.android.com/reference/androidx/media3/exoplayer/upstream/BandwidthMeter` that doesn't do estimation. |

| ### Public methods |
|---|---|
| `abstract void` | `https://developer.android.com/reference/androidx/media3/exoplayer/upstream/BandwidthMeter#addEventListener(android.os.Handler,androidx.media3.exoplayer.upstream.BandwidthMeter.EventListener)( https://developer.android.com/reference/android/os/Handler.html eventHandler, https://developer.android.com/reference/androidx/media3/exoplayer/upstream/BandwidthMeter.EventListener eventListener )` Adds an `https://developer.android.com/reference/androidx/media3/exoplayer/upstream/BandwidthMeter.EventListener`. |
| `abstract long` | `https://developer.android.com/reference/androidx/media3/exoplayer/upstream/BandwidthMeter#getBitrateEstimate()()` Returns the estimated bitrate. |
| `default long` | `https://developer.android.com/reference/androidx/media3/exoplayer/upstream/BandwidthMeter#getTimeToFirstByteEstimateUs()()` Returns the estimated time to first byte, in microseconds, or `https://developer.android.com/reference/androidx/media3/common/C#TIME_UNSET()` if no estimate is available. |
| `abstract @https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/datasource/TransferListener` | `https://developer.android.com/reference/androidx/media3/exoplayer/upstream/BandwidthMeter#getTransferListener()()` Returns the `https://developer.android.com/reference/androidx/media3/datasource/TransferListener` that this instance uses to gather bandwidth information from data transfers. |
| `abstract void` | `https://developer.android.com/reference/androidx/media3/exoplayer/upstream/BandwidthMeter#removeEventListener(androidx.media3.exoplayer.upstream.BandwidthMeter.EventListener)(https://developer.android.com/reference/androidx/media3/exoplayer/upstream/BandwidthMeter.EventListener eventListener)` Removes an `https://developer.android.com/reference/androidx/media3/exoplayer/upstream/BandwidthMeter.EventListener`. |

## Constants

### NO_OP

```
default static final BandwidthMeter NO_OP
```

A no-op `https://developer.android.com/reference/androidx/media3/exoplayer/upstream/BandwidthMeter` that doesn't do estimation.

## Public methods

### addEventListener

```
abstract void addEventListener(
    Handler eventHandler,
    BandwidthMeter.EventListener eventListener
)
```

Adds an `https://developer.android.com/reference/androidx/media3/exoplayer/upstream/BandwidthMeter.EventListener`.

| Parameters |
|---|---|
| `https://developer.android.com/reference/android/os/Handler.html eventHandler` | A handler for events. |
| `https://developer.android.com/reference/androidx/media3/exoplayer/upstream/BandwidthMeter.EventListener eventListener` | A listener of events. |

### getBitrateEstimate

```
abstract long getBitrateEstimate()
```

Returns the estimated bitrate.

### getTimeToFirstByteEstimateUs

```
default long getTimeToFirstByteEstimateUs()
```

Returns the estimated time to first byte, in microseconds, or `https://developer.android.com/reference/androidx/media3/common/C#TIME_UNSET()` if no estimate is available.

### getTransferListener

```
abstract @Nullable TransferListener getTransferListener()
```

Returns the `https://developer.android.com/reference/androidx/media3/datasource/TransferListener` that this instance uses to gather bandwidth information from data transfers. May be null if the implementation does not listen to data transfers.

### removeEventListener

```
abstract void removeEventListener(BandwidthMeter.EventListener eventListener)
```

Removes an `https://developer.android.com/reference/androidx/media3/exoplayer/upstream/BandwidthMeter.EventListener`.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/upstream/BandwidthMeter.EventListener eventListener` | The listener to be removed. |