2017-05-24 32 views
0

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

答えて

0

これが最適な解決策であるかどうかはわかりませんが、あなたが探しているものをほぼ達成しているこのオープンソースプロジェクトを見ることができます。 Here is the Github

ExoPlayerでフレームをより速くレンダリングするには、custom LoadControlを使用しているようです。そして、私は彼らが最悪の品質の選択とそれを複合していると信じて、より速くロードします。

これは、彼らがそのライブラリのonProgressChange(...)で使用したコードです:

@Override 
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { 
    if(fromUser){ 
     int offset = (float) progress/seekBar.getMax() 
     // Round the offset before seeking. The sample uses 1% or 10% of the video per each thumbnail 
     previewPlayer.seekTo((long) (offset * previewPlayer.getDuration())); 
     previewPlayer.setPlayWhenReady(false); 
    } 
} 

これを実行する別の方法は、実際にTextureViewのオフサムネイルをつかむためにある - 彼らはthis issueでカバーしています。注意すべきは、複数のレンダラーを使用することにはいくつかの制限があります。

+0

これらのポインタをありがとう。シークバー自体は問題がExoPlayer自体の中にあるので助けにならないでしょうが、カスタムロードコントロールがここで役立つかもしれません。私はそのアプローチを調査します。 – Francesc

+0

クール、あなたがどうやって作り出したか教えてください、@Francesc。 –

+0

プレイヤーに早く再生を指示するカスタムロードコントロールを使用すると(わずか50ms分のビデオがバッファされた後も)役立たなかった。それはまだプレーヤーがシークリクエストを拒否する問題であるように見えます。プレイヤーコードを掘り下げて、複数のシークリクエストをどのように素早く処理するかを理解する必要があります。 – Francesc

関連する問題