首页 > 解决方案 > Exoplayer 的缓冲问题

问题描述

我正在尝试使用 exoplayer 设置一个流媒体应用程序,但是我对缓冲没有什么了解。

它应该尝试确保缓冲区大小始终在 DEFAULT_MIN_BUFFER_MS 和 DEFAULT_MAX_BUFFER_MS 之间。我还可以设置一个 DEFAULT_BUFFER_FOR_PLAYBACK_MS,它设置开始播放流所需的缓冲区大小。

但是,每当我将 DEFAULT_BUFFER_FOR_PLAYBACK_MS 设置为低于 DEFAULT_MIN_BUFFER_MS 时,似乎 DEFAULT_MIN_BUFFER_MS 就采用了 DEFAULT_BUFFER_FOR_PLAYBACK_MS 的值。

例如:如果我将 DEFAULT_MIN_BUFFER_MS 设置为 10000,将 DEFAULT_MAX_BUFFER_MS 设置为 20000 并将 DEFAULT_BUFFER_FOR_PLAYBACK_MS 设置为 5000,那么我的缓冲区大小将保持在 5 秒到 20 秒之间,而不是 10 到 20 秒。这是预期的还是我在设置我的方式时遗漏了什么玩家?

这是我的代码示例,如果您需要更多,请随时询问:

public static final int DEFAULT_MIN_BUFFER_MS = 10000;
public static final int DEFAULT_MAX_BUFFER_MS = 20000;
public static final int DEFAULT_BUFFER_FOR_PLAYBACK_MS = 5000;
public static final int DEFAULT_BUFFER_FOR_PLAYBACK_AFTER_REBUFFER_MS = 5000;

DefaultLoadControl loadControl = new DefaultLoadControl.Builder()
               .setAllocator(new DefaultAllocator(true, C.DEFAULT_BUFFER_SEGMENT_SIZE))
                .setBufferDurationsMs(DEFAULT_MIN_BUFFER_MS,
                        DEFAULT_MAX_BUFFER_MS, DEFAULT_BUFFER_FOR_PLAYBACK_MS, DEFAULT_BUFFER_FOR_PLAYBACK_AFTER_REBUFFER_MS)
                .setPrioritizeTimeOverSizeThresholds(true)
                .createDefaultLoadControl();

player = newSimpleInstance(this,defaultRenderersFactory, trackSelector, loadControl, null, bandwidthMeter);

标签: androidbufferexoplayer

解决方案


推荐阅读