ExoPlayer和start/pause/seekTo命令

DeN*_*ppz 31 mp3 android mediacontroller android-mediaplayer exoplayer

我试图使用ExoPlayer,相反MediaPlayer,我似乎无法弄清楚...

MediaPlayer.start()/ .pause()命令......我可以seekTo(1287)自动开始播放......

我该怎么做ExoPlayer?我曾经尝试过,seekTo(1287)但它没有开始播放......之后我也加入.setPlayWhenReady(true)了,但仍然没有运气......

我能够.stop()......但是我不能让它再次开始比赛,除非我.prepare()再次......但我不认为我应该在每次停顿和比赛之间做到这一点.

MediaController在ExoPlayer演示中使用自己的控件和方法...我不太清楚控件是如何实现的......

有人建议吗?

编辑:

好的,我想出了停顿并开始......

.setPlayWhenReady(true) // start
.setPlayWhenReady(false) // pause
Run Code Online (Sandbox Code Playgroud)

但是我仍然遇到跟踪问题... .seekTo间歇性地工作......有时候它会起作用......但有时我会收到这个错误:

E/AudioTrack: AudioTrack::set : Exit
Run Code Online (Sandbox Code Playgroud)

(它只进入缓冲状态......并没有完全"准备好"......

bon*_*nyz 44

官方例子PlayerControlExoPlayer源代码,你问什么:

public class PlayerControl implements MediaPlayerControl {

  private final ExoPlayer exoPlayer;

  public PlayerControl(ExoPlayer exoPlayer) {
    this.exoPlayer = exoPlayer;
  }

  @Override
  public boolean canPause() {
    return true;
  }

  @Override
  public boolean canSeekBackward() {
    return true;
  }

  @Override
  public boolean canSeekForward() {
    return true;
  }

  @Override
  public int getAudioSessionId() {
    throw new UnsupportedOperationException();
  }

  @Override
  public int getBufferPercentage() {
    return exoPlayer.getBufferedPercentage();
  }

  @Override
  public int getCurrentPosition() {
    return exoPlayer.getDuration() == ExoPlayer.UNKNOWN_TIME ? 0
        : (int) exoPlayer.getCurrentPosition();
  }

  @Override
  public int getDuration() {
    return exoPlayer.getDuration() == ExoPlayer.UNKNOWN_TIME ? 0
        : (int) exoPlayer.getDuration();
  }

  @Override
  public boolean isPlaying() {
    return exoPlayer.getPlayWhenReady();
  }

  @Override
  public void start() {
    exoPlayer.setPlayWhenReady(true);
  }

  @Override
  public void pause() {
    exoPlayer.setPlayWhenReady(false);
  }

  @Override
  public void seekTo(int timeMillis) {
    long seekPosition = exoPlayer.getDuration() == ExoPlayer.UNKNOWN_TIME ? 0
        : Math.min(Math.max(0, timeMillis), getDuration());
    exoPlayer.seekTo(seekPosition);
  }

}
Run Code Online (Sandbox Code Playgroud)

如果您在搜索操作期间遇到奇怪的行为,可能是由于您的特定流/文件类型.我建议你看一下ExoPlayer 的基本实现,最后报告Github上的任何问题.

  • github链接已经死了 (4认同)
  • ExoPlayer.UNKNOWN_TIME - > com.google.android.exoplayer2.C.TIME_UNSET (4认同)

ser*_*inc 6

这是示例代码针对Exoplayer 2的操作方式:

player.setPlayWhenReady(true);
Run Code Online (Sandbox Code Playgroud)

开始播放,(false停止)

如果播放器已经处于就绪状态,则可以使用此方法暂停和继续播放。

为了寻找,他们使用

boolean haveStartPosition = startWindow != C.INDEX_UNSET;
if (haveStartPosition) {
  player.seekTo(startWindow, startPosition);
}
player.prepare(mediaSource, !haveStartPosition, false);
Run Code Online (Sandbox Code Playgroud)

所以看来你需要prepare之后seekTo