Exoplayer - 如何只播放 FragmentStatePagerAdapter 中可见的当前屏幕?

Exoplayer - How to play only the current screen visible in FragmentStatePagerAdapter?

我正在将 FragmentStatePagerAdapter 与 Exoplayer 一起使用。我的主要目标是加载下一页,但不要播放该页面中的视频。现在在 viewpager 的 VideoFragment 中,我正在播放里面的视频 onCreateView

player = new SimpleExoPlayer.Builder(mContext).build();
player.setPlayWhenReady(true);
player.setRepeatMode(Player.REPEAT_MODE_ONE);
playerView.setPlayer(player);

addListenerToPlayer();

DataSource.Factory dataSourceFactory = new DefaultDataSourceFactory(mContext,
           Util.getUserAgent(mContext, "yourApplicationName"));
Uri uri = Uri.parse(mUrl);

MediaSource videoSource = new ProgressiveMediaSource.Factory(dataSourceFactory).createMediaSource(uri);
player.prepare(videoSource);

如何设置我的 exoplayer 和适配器,使其只播放当前屏幕?

在您的初始配置中将 player.setPlayWhenReady(true); 替换为 player.setPlayWhenReady(false);,因为这会指示播放器实例在准备播放时立即播放媒体。

根据 Player.STATE_READY 上的文档:

The player is able to immediately play from its current position. The player will be playing if getPlayWhenReady() is true, and paused otherwise.

此外,您应该设置 PageChangeListenerPageChangeCallback(取决于您使用的 ViewPager 版本)以监控 ViewPager 中的哪个页面是当前选择,哪些不是。对于选中的页面,可以设置其对应的exoplayer实例播放player.setPlayWhenReady(true)的视频。在每个片段的 onPause(...) 生命周期方法中暂停播放器也是一个好主意。