ExoPlayer用のスクラバーを実装して、ユーザーが探している位置のサムネイルプレビューを表示したいと考えています。私の現在の実装が動作している間、サムネイルは、ユーザーがシークバービューをドラッグして停止した後、または瞬時に一時停止した後にのみリフレッシュされます。 ExoPlayerのシークコマンドが、あまりにも多くのシークを連続して防ぐために、デバウンス機能のようなものを実装しているかのように見えます。ExoPlayerのクイックシークレット
シークバーコールバックで自分自身のスロットルを行い、xミリ秒ごとにシーク要求を送信することができますが、サムネイルができるようにExoPlayerにシーク要求をドロップしないように指示する方法があるかどうかを知りたいと思いますリアルタイムで更新します。参考のため
、これは私の現在の実装である:スロットル用
件名:
private final Subject<Long> subject = PublishSubject.create();
スロットリングとの要求を求めるためのオブザーバー:
subject
.throttleLast(400L, TimeUnit.MILLISECONDS)
.observeOn(AndroidSchedulers.mainThread())
.subscribe(position -> exoPlayer.seekTo(position));
シークバーコールバック:
@Override
public void onProgressChanged(@NonNull final SeekBar seekBar,
final int progress,
final boolean fromUser) {
if (fromUser) {
final long position = computePosition(progress);
subject.onNext(position);
}
}
これらのポインタをありがとう。シークバー自体は問題がExoPlayer自体の中にあるので助けにならないでしょうが、カスタムロードコントロールがここで役立つかもしれません。私はそのアプローチを調査します。 – Francesc
クール、あなたがどうやって作り出したか教えてください、@Francesc。 –
プレイヤーに早く再生を指示するカスタムロードコントロールを使用すると(わずか50ms分のビデオがバッファされた後も)役立たなかった。それはまだプレーヤーがシークリクエストを拒否する問題であるように見えます。プレイヤーコードを掘り下げて、複数のシークリクエストをどのように素早く処理するかを理解する必要があります。 – Francesc