Android 在当前位置ExoPlayer2之前保留一些缓冲区

Android 在当前位置ExoPlayer2之前保留一些缓冲区,android,android-mediaplayer,media,exoplayer,exoplayer2.x,Android,Android Mediaplayer,Media,Exoplayer,Exoplayer2.x,我在应用程序中使用Exoplayer2作为媒体播放器来播放Hls(.m3u8)媒体, 我根据需要增加了最大和最小缓冲区,但我想在当前播放位置之前保留一些缓冲区(15秒),因为我添加了10秒后退和前进按钮 前进按钮工作正常,因为我前面有5分钟的缓冲区,但每次我点击后退按钮时,播放器开始缓冲,即使之前缓冲过该区域,并且前面的所有缓冲区(5分钟)都清空了。 我尝试的是: 我创建了一个自定义加载控制器,它实现了加载控制,并具有back_buffer_duration和retainBackBufferFr

我在应用程序中使用Exoplayer2作为媒体播放器来播放Hls(.m3u8)媒体, 我根据需要增加了最大和最小缓冲区,但我想在当前播放位置之前保留一些缓冲区(15秒),因为我添加了10秒后退和前进按钮 前进按钮工作正常,因为我前面有5分钟的缓冲区,但每次我点击后退按钮时,播放器开始缓冲,即使之前缓冲过该区域,并且前面的所有缓冲区(5分钟)都清空了。 我尝试的是: 我创建了一个自定义加载控制器,它实现了加载控制,并具有back_buffer_duration和retainBackBufferFromkeyFrame:

 public Customloadcontrol(
        DefaultAllocator allocator,
        int minBufferMs,
        int maxBufferMs,
        int bufferForPlaybackMs,
        int bufferForPlaybackAfterRebufferMs,
        int targetBufferBytes,
        boolean prioritizeTimeOverSizeThresholds,
        PriorityTaskManager priorityTaskManager,
        int backBufferDurationMs,
        boolean retainBackBufferFromKeyframe

) {
    this.allocator = allocator;
    minBufferUs = minBufferMs * 1000L;
    maxBufferUs = maxBufferMs * 1000L;
    bufferForPlaybackUs = bufferForPlaybackMs * 1000L;
    bufferForPlaybackAfterRebufferUs = bufferForPlaybackAfterRebufferMs * 1000L;
    targetBufferBytesOverwrite = targetBufferBytes;
    this.prioritizeTimeOverSizeThresholds = prioritizeTimeOverSizeThresholds;
    this.priorityTaskManager = priorityTaskManager;
    this.backBufferDurationUs = C.msToUs(bufferForPlaybackMs);
    this.backBufferDurationMs=backBufferDurationMs;
    this.retainBackBufferFromKeyframe=retainBackBufferFromKeyframe;
}
。。。。。。。。。。。。。。重写的方法:

 @Override
public long getBackBufferDurationUs() {
    return backBufferDurationUs;
}

@Override
public boolean retainBackBufferFromKeyframe() {
    return retainBackBufferFromKeyframe;
}
然后在我的玩家活动中:

BandwidthMeter bandwidthMeter = new DefaultBandwidthMeter();
TrackSelection.Factory videoTrackSelectionFactory = new 
AdaptiveTrackSelection.Factory(bandwidthMeter);

Customloadcontrol customloadcontroler = new Customloadcontrol(
                   new DefaultAllocator(true, C.DEFAULT_BUFFER_SEGMENT_SIZE),
                   360000,
                   600000,
                   1000,
                   1500,
                   DEFAULT_TARGET_BUFFER_BYTES,
                   DEFAULT_PRIORITIZE_TIME_OVER_SIZE_THRESHOLDS,
                   15000,
                   true);
 DefaultTrackSelector trackSelector = new DefaultTrackSelector(videoTrackSelectionFactory);
    player = ExoPlayerFactory.newSimpleInstance(context, trackSelector,customloadcontroler);
但当我按下10秒后退按钮时,它似乎不起作用。播放器将清除所有缓冲媒体并再次开始缓冲,因此,请提供任何帮助,我们将不胜感激