android - Exoplayer - 如何在重复模式下防止重新缓冲?
问题描述
我正在使用 exoplayer 2,并开启了重复模式,这意味着它会在视频结束后继续播放。但是,视频结束并再次播放后,它会不断重新缓冲(重新加载视频)。我该如何防止这种情况发生?
player = new SimpleExoPlayer.Builder(mContext).build();
player.setPlayWhenReady(false);
player.setRepeatMode(Player.REPEAT_MODE_ONE);
编辑1:
尝试过使用 LoopingMediaSource,但不确定我是否做得正确?因为它在自动重播视频时仍然会重新缓冲。
DataSource.Factory dataSourceFactory = new DefaultDataSourceFactory(mContext,
Util.getUserAgent(mContext, "yourApplicationName"));
Uri uri = Uri.parse(mUrl);
MediaSource videoSource =
new ProgressiveMediaSource.Factory(dataSourceFactory)
.createMediaSource(uri);
LoopingMediaSource loopingMediaSource = new LoopingMediaSource(videoSource);
player.prepare(loopingMediaSource);
解决方案
当涉及到视频缓冲时,这是不可避免的,因为只有一部分视频保存在内存中。
您可以尝试通过设置自定义负载控制来调整缓冲持续时间。调整setBufferDurationsMs参数以达到您的预期结果。
final DefaultTrackSelector trackSelector = new DefaultTrackSelector(context);
final DefaultLoadControl loadControl = new DefaultLoadControl
.Builder()
.setBufferDurationsMs(25000, 50000, 1500, 2000)
.build();
player = new SimpleExoPlayer
.Builder(context)
.setTrackSelector(trackSelector)
.setLoadControl(loadControl)
.build();
如果通过调整 setBufferDurationMs 中的参数仍然无法获得所需的结果,那么您可能需要实施滴灌技术来改进重新缓冲。接下来是关于如何实现这种技术的教程,针对 ExoPlayer:
推荐阅读
- python - 如何在python中生成随机增加或减少的字符串?
- c++ - Add, subtract and compare compressed integers
- r - 在 RStudio 中, scale_fill_brewer() 创建灰色条作为默认条形图,而不是一系列蓝色
- react-native - 进行本机平台特定函数调用的最佳方法?
- git - GitHub push commit 错误
- javascript - Google Appscript - 导出来宾列表成员中有特定字符串的日历条目
- vba - 运行时错误 13,类型不匹配 MsgBox 取消
- python - 将列数据移回 1 时出现 KeyError
- python - Python:无法找到具有 id 或类名的元素,webdriver 无法找到 id 或类名
- python - fork 一个 Python 子进程以在解释器、SSH 死亡、核战争中幸存下来