Detect pause/resume in ExoPlayer

2019-01-26 07:52发布

I searched two days for this question in github but i can't find true answer . i want example for detecting pause / resume in ExoPlayer > 2.x . any one can give me an example ? i checked onPlayerStateChanged and problem not solved .

onPlayerStateChanged   :   STATE_BUFFERING 
onPlayerStateChanged   :   STATE_READY 

i just got this log from onPlayerStateChanged and this is not called in all times !

1条回答
老娘就宠你
2楼-- · 2019-01-26 08:23

You need to check playWhenReady with a Player.EventListener. The Playback states of ExoPlayer are independent from the player being paused or not:

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
    }
  }
});

To play/pause the player ExoPlayer provides

player.setPlayWhenReady(boolean)

The sequence of playback states with ExoPlayer with a media file which never stalls to rebuffer is once in each of the four states and does not express play/paused:

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

Each time the player needs to buffer it goes:

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

Setting playWhenReady does not affect the state.

All together your media is actually playing when

playWhenReady && playbackState == Player.STATE_READY

It plays when ready. :)

查看更多
登录 后发表回答