Android 如何从ExoPlayer2中的实时视频获取比特率

Android 如何从ExoPlayer2中的实时视频获取比特率,android,kotlin,exoplayer2.x,Android,Kotlin,Exoplayer2.x,我需要从exoplayer找到流式视频比特率,但这段代码似乎并没有显示真实的比特率 bitrateEstimate = bandwidthMeter.bitrateEstimate Exoplayer提供带宽计事件的侦听器 定期调用以指示字节已被传输或删除 估计的比特率已更改。注:估计比特率为 通常从不仅仅是字节和elapsedm的更多信息中派生 参数: elapsedMs - The time taken to transfer bytesTransferred, in millisecon

我需要从exoplayer找到流式视频比特率,但这段代码似乎并没有显示真实的比特率

bitrateEstimate = bandwidthMeter.bitrateEstimate

Exoplayer提供带宽计事件的侦听器

定期调用以指示字节已被传输或删除 估计的比特率已更改。注:估计比特率为 通常从不仅仅是字节和elapsedm的更多信息中派生

参数:

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.
您可以在代码中使用它,如:

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));
    }
});

虽然接受的答案可能有效,但有一个更简单、简洁的解决方案,即重写VideoRenderEventListener类中的
onVideoInputFormatChanged()

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