首页 > 解决方案 > 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);

标签: androidexoplayerexoplayer2.x

解决方案


当涉及到视频缓冲时,这是不可避免的,因为只有一部分视频保存在内存中。

您可以尝试通过设置自定义负载控制来调整缓冲持续时间。调整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:

https://medium.com/@filipluch/how-to-improve-buffering-by-4-times-with-drip-feeding-technique-in-exoplayer-on-android-b59eb0c4d9cc


推荐阅读