在 ExoPlayer 中检测暂停/恢复

新手上路,请多包涵

我在 github 上 搜索了两天这个问题,但找不到真正的答案。我想要在 --- 中检测 pause / resumeExoPlayer > 2.x 。任何人都可以给我一个例子吗?我检查了 onPlayerStateChanged 问题没有解决。

 onPlayerStateChanged   :   STATE_BUFFERING
onPlayerStateChanged   :   STATE_READY

我刚刚从 onPlayerStateChanged 得到了这个日志—而且这不是一直被调用!

原文由 MrNadimi 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 2.1k
2 个回答

编辑 - -

请参考 Player.isPlaying() 将此作为 API 提供的方法。

“不必单独检查这些属性,可以调用 Player.isPlaying。”

https://exoplayer.dev/listening-to-player-events.html#playback-state-changes

--- 编辑结束

您需要使用 Player.EventListener 检查 playWhenReadyExoPlayer 的播放状态与 播放器是否暂停无关:

 player.addListener(new Player.DefaultEventListener() {
  @Override
  public void onPlayerStateChanged(boolean playWhenReady, int playbackState) {
    if (playWhenReady && playbackState == Player.STATE_READY) {
      // media actually playing
    } else if (playWhenReady) {
      // might be idle (plays after prepare()),
      // buffering (plays when data available)
      // or ended (plays when seek away from end)
    } else {
      // player paused in any state
    }
  }
});

播放/暂停 ExoPlayer 提供的播放器

player.setPlayWhenReady(boolean)

带有媒体文件的 ExoPlayer 的播放状态序列从不停止重新缓冲,在四种状态中的每一种中都有一次,并且不表示播放/暂停:

 Player.STATE_IDLE;
Player.STATE_BUFFERING;
Player.STATE_READY;
Player.STATE_ENDED;

每次玩家需要缓冲时,它都会:

 Player.STATE_READY;
Player.STATE_BUFFERING;
Player.STATE_READY;

设置 playWhenReady 不会影响状态。

总而言之,您的媒体实际上在播放时

playWhenReady && playbackState == Player.STATE_READY

它在准备就绪时播放。 :)

原文由 marcbaechinger 发布,翻译遵循 CC BY-SA 4.0 许可协议

您可以使用此功能:

 public boolean isPlaying() {
    return exoPlayer.getPlaybackState() == Player.STATE_READY && exoPlayer.getPlayWhenReady();
}

原文由 Payam Roozbahani Fard 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题