问题描述
我在应用程序中使用Exoplayer2作为媒体播放器来播放Hls(.m3u8)媒体, 我根据需要增加了最大和最小缓冲区,但我想在当前播放位置之前保留一些缓冲区(15秒),因为我增加了10秒的后退和前进按钮 前进按钮可以正常工作,因为我有5分钟的缓冲空间,但是每次我单击后退按钮时,即使该区域之前已经缓冲,并且前面的所有缓冲空间(5分钟)都被清除,播放器也会开始缓冲。 我试过了 我创建了一个自定义加载控制器,该控制器实现了Load Control,并具有back_buffer_duration和keepBackBufferFromkeyFrame:
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秒按钮时,它似乎无法正常工作,播放器清除了所有缓冲的媒体并再次开始缓冲,因此请您多多帮助。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)