Android 在当前位置ExoPlayer2之前保留一些缓冲区
我在应用程序中使用Exoplayer2作为媒体播放器来播放Hls(.m3u8)媒体, 我根据需要增加了最大和最小缓冲区,但我想在当前播放位置之前保留一些缓冲区(15秒),因为我添加了10秒后退和前进按钮 前进按钮工作正常,因为我前面有5分钟的缓冲区,但每次我点击后退按钮时,播放器开始缓冲,即使之前缓冲过该区域,并且前面的所有缓冲区(5分钟)都清空了。 我尝试的是: 我创建了一个自定义加载控制器,它实现了加载控制,并具有back_buffer_duration和retainBackBufferFromkeyFrame: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
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秒后退按钮时,它似乎不起作用。播放器将清除所有缓冲媒体并再次开始缓冲,因此,请提供任何帮助,我们将不胜感激