저는 Leanback 프레임 워크와 Exoplayer를 사용하여 HLS 비디오 스트리밍을 구현하는 매우 기본적인 작업을 수행했습니다. Leanback 앱에서 재생 컨트롤 맞춤 설정
이 문서에 따르면, 권장되는 방법 : 다음과 같습니다 기본 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
을 사용합니다. 제 목적을 위해,
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
키 코드 집합에 해당하는 볼 수 있지만 무엇을 만들 수 있는지 잘 모르겠습니다.
누구나 올바른 방향으로 나를 가리킬 수 있습니까? 이 주제에 대한 의외로 적은 정보가 있습니다.
감사합니다.