如何在exoplayer中监控播放位置

Nav*_*v89 4 android exoplayer exoplayer2.x

我正在努力寻找一种方法来创建线程来监视 Exoplayer 应用程序中的playbackPosition。

在下面的代码中,我需要的一个简单任务是通过重写onIsPlayingChanged函数每 1000 毫秒记录一次位置参数。但我知道这种情况只会发生一次,并且如果应用程序状态发生变化,但是为了使其连续,我认为我应该创建一个线程。请让我知道如何实现这一目标。正如你所看到的,注释的代码是我尝试过的,但它肯定是不正确的。

private class PlaybackStateListener implements Player.EventListener{

    @Override
    public void onIsPlayingChanged(boolean isPlaying) {
     //TODO: Add handler to poll the playback position continuously.
      /* if(isPlaying){
        HandlerCompat.
                postDelayed(new Runnable() {
                  @Override
                  public void run() {
                    long positionParam = playbackPosition;
                  }
                });
        }*/

      if (isPlaying) {
        Log.d(TAG, "Playing position is " + playbackPosition);
      } else {
        // Not playing because playback is paused, ended, suppressed, or the player
        // is buffering, stopped or failed. Check player.getPlaybackState,
        // player.getPlayWhenReady, player.getPlaybackError and
        // player.getPlaybackSuppressionReason for details.
      }
    }
Run Code Online (Sandbox Code Playgroud)

nuh*_*oca 8

Kotlin 协程方式

private fun pollCurrentDuration() = flow {
        while (player.currentPosition + DURATION_OFFSET <= player.duration) {
            emit(player.currentPosition + DURATION_OFFSET)
            delay(DEFAULT_DELAY_MS)
        }
    }.conflate()
Run Code Online (Sandbox Code Playgroud)