Reputation: 1521
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
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
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