2017-05-17 16 views
0

저는 Leanback 프레임 워크와 Exoplayer를 사용하여 HLS 비디오 스트리밍을 구현하는 매우 기본적인 작업을 수행했습니다. Leanback 앱에서 재생 컨트롤 맞춤 설정

enter image description here

이 문서에 따르면, 권장되는 방법 : 다음과 같습니다 기본 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> 

분명히, VideoFragment 온다 :

나는 간단한 단일 조각 레이아웃을 사용 재생 제어 기능이있는 미디어 플레이어를 브리징하는 방법은 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); 
} 

이 코드는 작업을 수행 : 그것은 플레이어 이벤트에 클릭을 결합, 그래서 예상대로/이력서 및 되감기/빨리 감기 작업을 일시 중지합니다.

까다로운 부분은 재생 컨트롤을 사용자 정의하는 것입니다. PlaybackGlueHostsetPlaybackRow(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

PlaybackControlGlue 내가 완전히 빌린 구현에 놓친 필요한 모든 방법을 (setControlsRow(), onCreatePrimaryActions(), onCreateSecondaryActions())했다 밝혀졌다. 접착제는 onAttachedToHost()에 호스트에 호스트를 제공하고 필요한 리스너를 설정합니다.