2017-05-17 19 views
0

私は、LeanbackフレームワークとExoplayerを使用してHLSビデオストリーミングを実装するというかなり基本的なタスクを持っています。Leanbackアプリケーションで再生コントロールをカスタマイズする

私は単純な単一フラグメントレイアウトを使用

enter image description here

ドキュメントによると、推奨されるアプローチ: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が使用されます。私の目的のためにExoPlayerGluethisプロジェクトから取得しました。

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がキーコードのセットに対応するが、私はそれを作ることができるか分からないことがわかります。

誰もが正しい方向に私を指すもらえますか?被験者に関する驚くほどの情報はありません。

ありがとうございました。

答えて

0

私は借用した実装で完全に逃したすべての必要なメソッド(setControlsRow()onCreatePrimaryActions()onCreateSecondaryActions())を持っていました。接着剤はonAttachedToHost()でホストに提供し、必要なリスナーを設定します。

関連する問題