是否有使用字幕的 ExoPlayer + Leanback 库示例?

cas*_*orz 7 android android-tv exoplayer amazon-fire-tv exoplayer2.x

我已经找到了几个例子,随着工作LeanbackExoPlayer我有所有的工作,但我不能让字幕/字幕的工作。我能找到的最新 Google 示例(https://github.com/android/tv-samples)在 Java 示例上有一个标题按钮,但它们从未出现。Kotlin 示例有一条评论说// TODO(owahltinez): handle captions.

我已经对其中一个样本进行了这些更改,但没有帮助:

private void prepareMediaForPlaying(Uri mediaSourceUri) {
        String userAgent = Util.getUserAgent(getActivity(), "VideoPlayerGlue");
        DefaultDataSourceFactory defaultDataSourceFactory = new DefaultDataSourceFactory(getActivity(), userAgent);
        MediaSource mediaSource =
                new ExtractorMediaSource(
                        mediaSourceUri,
                        defaultDataSourceFactory,
                        new DefaultExtractorsFactory(),
                        null,
                        null);
        String subtitle = "https://subtitledomain/sintel-en.vtt";
        Uri uriSubtitle = Uri.parse(subtitle);
        MediaSource subtitleMediaSource = new SingleSampleMediaSource.Factory(defaultDataSourceFactory)
                .createMediaSource(uriSubtitle, Format.createTextSampleFormat(null, MimeTypes.TEXT_VTT, C.SELECTION_FLAG_FORCED, "n/a"), C.TIME_UNSET);
        mediaSource = new MergingMediaSource(mediaSource, subtitleMediaSource);
        mPlayer.prepare(mediaSource);
    }
Run Code Online (Sandbox Code Playgroud)

还有这个变化:

    mTrackSelector = new DefaultTrackSelector(videoTrackSelectionFactory);
    DefaultTrackSelector.Parameters parameters = mTrackSelector.getParameters();
    mTrackSelector.setParameters(parameters.withSelectUndeterminedTextLanguage(true));
Run Code Online (Sandbox Code Playgroud)

我试过将字幕上的语言更改为EN,但没有帮助。我觉得我可能只是错过了一些小东西,但我只是不知道它可能是什么。

谢谢。

编辑:我创建了一个分支并删除了所有Leanback代码,只是保留了ExoPlayer一些内容并com.google.android.exoplayer2.ui.PlayerView在我的Fragment而不是而不是使用中使用,VideoFragment并且字幕在没有进行任何其他更改的情况下工作。所以就像我只需要以Leanback某种方式启用它们。

小智 3

要使字幕正常工作,您需要覆盖 lb_playback_fragment.xml 并添加 SubtitleView。

应用程序/src/main/res/layout/lb_playback_fragment.xml

<?xml version="1.0" encoding="utf-8"?> 
<!--
    Copied from android source so that we can add the subtitle view
-->
<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/playback_fragment_root"
    android:layout_width="match_parent"
    android:transitionGroup="false"
    android:layout_height="match_parent">

    <androidx.leanback.widget.NonOverlappingFrameLayout
        android:id="@+id/playback_fragment_background"
        android:transitionGroup="false"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <androidx.leanback.widget.NonOverlappingFrameLayout
        android:id="@+id/playback_controls_dock"
        android:transitionGroup="true"
        android:layout_height="match_parent"
        android:layout_width="match_parent"/>

    <com.google.android.exoplayer2.ui.AspectRatioFrameLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="center">

        <com.google.android.exoplayer2.ui.SubtitleView
            android:id="@+id/leanback_subtitles"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />

    </com.google.android.exoplayer2.ui.AspectRatioFrameLayout>

</FrameLayout>
Run Code Online (Sandbox Code Playgroud)

完成此操作后,您可以设置 DefaultTrackSelector 来选择所需的文本轨道。

您可以在https://github.com/bennettpeter/android-MythTV-Leanfront中查看基于示例 Leanback 播放器的完整代码。添加字幕的更改在此提交中。