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

How can I get bitrates from live video in ExoPlayer2

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

bitrateEstimate = bandwidthMeter.bitrateEstimate

Exoplayer 提供 BandwidthMeter 事件的侦听器 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.

您可以在您的代码中使用它,例如:

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

虽然接受的答案可能有效,但通过重写 VideoRendererEventListener class.

中的 onVideoInputFormatChanged() 有一个更简单和简洁的解决方案
override fun onVideoInputFormatChanged(format: Format) {
      doSomethingWith(format.bitrate)
}