【问题标题】:How can I get bitrates from live video in ExoPlayer2如何从 ExoPlayer2 中的实时视频中获取比特率
【发布时间】:2019-12-16 10:57:36
【问题描述】:

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

bitrateEstimate = bandwidthMeter.bitrateEstimate

【问题讨论】:

    标签: android kotlin exoplayer2.x


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      虽然接受的答案可能有效,但通过在 VideoRendererEventListener 类中覆盖 onVideoInputFormatChanged() 有一个更简单、更简洁的解决方案。

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

      【讨论】:

        猜你喜欢
        • 2017-07-10
        • 1970-01-01
        • 2011-02-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多