【发布时间】:2019-12-16 10:57:36
【问题描述】:
我需要从 exoplayer 中找到流媒体视频比特率,但这段代码似乎没有显示真实比特率
bitrateEstimate = bandwidthMeter.bitrateEstimate
【问题讨论】:
标签: android kotlin exoplayer2.x
我需要从 exoplayer 中找到流媒体视频比特率,但这段代码似乎没有显示真实比特率
bitrateEstimate = bandwidthMeter.bitrateEstimate
【问题讨论】:
标签: android kotlin exoplayer2.x
Exoplayer 提供 BandwidthMeter 事件的侦听器here。
void onBandwidthSample(int elapsedMs, long bytesTransferred, long bitrateEstimate)定期调用以指示字节已被传输或 估计的比特率发生了变化。注意:估计的比特率是 通常来自比字节和 elapsedMs 更多的信息。
参数:
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 类中覆盖 onVideoInputFormatChanged() 有一个更简单、更简洁的解决方案。
override fun onVideoInputFormatChanged(format: Format) {
doSomethingWith(format.bitrate)
}
【讨论】: