Mona Baharlou
Mona Baharlou

Reputation: 1521

How can I get bitrates from live video in ExoPlayer2

I need to find streaming video bitrate from exoplayer, but it seems that this code does not show real bitrate

bitrateEstimate = bandwidthMeter.bitrateEstimate

Upvotes: 2

Views: 2194

Answers (2)

Richard Dapice
Richard Dapice

Reputation: 885

While the accepted answer may work, there is a much easier and concise solution by overriding onVideoInputFormatChanged() in the VideoRendererEventListener class.

override fun onVideoInputFormatChanged(format: Format) {
      doSomethingWith(format.bitrate)
}

Upvotes: 3

Son Truong
Son Truong

Reputation: 14183

Exoplayer provide a listener of BandwidthMeter events here.

void onBandwidthSample(int elapsedMs,
                       long bytesTransferred,
                       long bitrateEstimate)

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 bytes and elapsedMs.

Parameters:

elapsedMs - The time taken to transfer 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.
bytesTransferred - The number of bytes transferred since the last callback.
bitrateEstimate - The estimated bitrate in bits/sec.

You can use it in your code like:

Handler handler = new Handler();
BandwidthMeter bandwidthMeter = new DefaultBandwidthMeter.Builder(MainActivity.this).build();
bandwidthMeter.addEventListener(handler, new BandwidthMeter.EventListener() {
    @Override
    public void onBandwidthSample(int elapsedMs, long bytesTransferred, long bitrateEstimate) {
        Log.d(TAG, "elapsedMs: " + elapsedMs);
        Log.d(TAG, "bytes transferred: " + bytesTransferred);
        Log.d(TAG, "Average bitrate (bps) = " + (double) (bytesTransferred * 8) / (elapsedMs / 1000));
    }
});

Upvotes: 3

Related Questions