ExoPlayer和start / pause / seekTo命令

我试图使用ExoPlayer ,而不是MediaPlayer ,我似乎无法弄清楚…

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

如何使用ExoPlayer执行此操作? 我曾尝试过seekTo(1287)但它没有开始播放……之后我也添加了.setPlayWhenReady(true) ,但仍然没有运气……

我能够.stop() …但是我不能让它在那之后重新开始播放,除非我.prepare()再次…但是我不认为我应该在每次停顿之间做到这一点玩。

我在ExoPlayer演示中使用自己的控件和方法与MediaController相反…我无法看到控件是如何实现的……

有人建议吗?

编辑:

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

 .setPlayWhenReady(true) // start .setPlayWhenReady(false) // pause 

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

 E/AudioTrack: AudioTrack::set : Exit 

(它只进入缓冲状态……并没有完全达到“准备好”……

Solutions Collecting From Web of "ExoPlayer和start / pause / seekTo命令"

ExoPlayer源代码中PlayerControl的官方示例完全按照您的要求执行:

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

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

以下是Exoplayer 2 的示例代码 :

 player.setPlayWhenReady(true); 

开始播放,( false停止)

如果播放器已处于就绪状态,则此方法可用于暂停和恢复播放。

为了寻求,他们使用

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

所以看来你需要在seekTo之后prepare