私は、LeanbackフレームワークとExoplayerを使用してHLSビデオストリーミングを実装するというかなり基本的なタスクを持っています。Leanbackアプリケーションで再生コントロールをカスタマイズする
私は単純な単一フラグメントレイアウトを使用:
ドキュメントによると、推奨されるアプローチ:VideoFragment
はこのようになりますデフォルトHUDが付属して、どうやら
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<fragment
android:id="@+id/video_fragment"
android:name="android.support.v17.leanback.app.VideoFragment"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</FrameLayout>
を再生コントロールを使用してメディアプレーヤーをブリッジする方法は、PlaybackGlue
です。たとえば、LeanbackショーケースアプリではMediaPlayer
が使用されているため、MediaPlayerGlue
が使用されます。私の目的のためにExoPlayerGlue
をthisプロジェクトから取得しました。
private PlaybackFragmentGlueHost glueHost;
private PlaybackControlGlue glue;
@Override
public void onCreate(Bundle savedInstanceState) {
// ...
final VideoFragment videoFragment = (VideoFragment) getFragmentManager.findFragmentById(R.id.video_fragment);
glueHost = new VideoFragmentGlueHost(videoFragment);
glue = ExoPlayerGlue(this, player)
glue.setHost(glueHost);
}
このコードでは、仕事をしていません:それはプレイヤーイベントにクリックを結合し、その期待通り/再開と巻き戻し/早送りの作業を一時停止します。
トリッキーな部分は、再生コントロールをカスタマイズすることです。 PlaybackGlueHost
は、setPlaybackRow(Row row)
およびsetPlaybackRowPresenter(PlaybackRowPresenter presenter)
の方法を提供する。
@Override
public void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
// Buttons I need in my HUD
final Action skipPreviousAction = new PlaybackControlsRow.SkipPreviousAction(this); // |<
final Action rewindAction = PlaybackControlsRow.RewindAction(this); // <<
final Action playPauseAction = PlaybackControlsRow.PlayPauseAction(this);
final Action fastForwardAction = PlaybackControlsRow.FastForwardAction(this); // >>
final Action skipNextAction = PlaybackControlsRow.SkipNextAction(this); // >|
final Action repeatAction = PlaybackControlsRow.RepeatAction(this);
final PresenterSelector controlPresenterSelector = ControlButtonPresenterSelector();
final PlaybackControlsRow playbackControlsRow = PlaybackControlsRow();
final ArrayObjectAdapter primaryAdapter = ArrayObjectAdapter(controlPresenterSelector);
final ArrayObjectAdapter secondaryAdapter = ArrayObjectAdapter(controlPresenterSelector);
// First row
primaryAdapter.add(skipPreviousAction);
primaryAdapter.add(rewindAction);
primaryAdapter.add(playPauseAction);
primaryAdapter.add(fastForwardAction);
primaryAdapter.add(skipNextAction);
// Second row
secondaryAdapter.add(repeatAction);
playbackControlsRow.primaryActionsAdapter = primaryAdapter;
playbackControlsRow.secondaryActionsAdapter = secondaryAdapter;
// Applying row to glue host
glueHost.setPlaybackRowPresenter(PlaybackControlsRowPresenter());
glueHost.setPlaybackRow(playbackControlsRow);
}
は今、私は私のカスタマイズされた再生行を持っていないが、プレイヤーは、もはやボタンに対応をクリック:指摘すると、これらのメソッドは、私はどちらかのハンドラを使用するか、またはonPostCreate()
に移動する必要がonCreate()
では効果がないということですフォートワース。
PlaybackGlue
が実際にPlaybackGlueHost
からのイベントにどのように反応するかを調べるのに苦労しています。私はOnActionClickedListener
を行プレゼンターに設定して、手動でアクションを処理することができますが、グルー/ホスト相互作用モデルは役に立たないレンダリングのようなものです。どのように最初の場所で動作しましたか?私が見つけることができるデフォルトの再生行はありません...私は各Action
がキーコードのセットに対応するが、私はそれを作ることができるか分からないことがわかります。
誰もが正しい方向に私を指すもらえますか?被験者に関する驚くほどの情報はありません。
ありがとうございました。