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

我发现了一些可以与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);
    }

还有此更改:

    mTrackSelector = new DefaultTrackSelector(videoTrackSelectionFactory);
    DefaultTrackSelector.Parameters parameters = mTrackSelector.getParameters();
    mTrackSelector.setParameters(parameters.withSelectUndeterminedTextLanguage(true));

我尝试将副标题上的语言更改为EN,但无济于事。 我觉得我可能只是想念一些小东西,但我不知道那会是什么。

谢谢。

编辑:我做了一个分支,删除了所有Leanback代码,并保留了ExoPlayer的内容,并在我的com.google.android.exoplayer2.ui.PlayerView中使用了Fragment而不是VideoFragment并字幕无需任何其他更改即可工作。因此,就像我只需要以某种方式在Leanback端启用它们。

realqishangbaxia 回答:有使用字幕的ExoPlayer + Leanback库示例吗?

这是另一种方法-视频renderIndex = 0,音频= 1,字幕/文本= 2。

def sranges(i):
    """return pretty string for output of ranges.

    Examples
    ========

    >>> sranges([1,2,4,6,7,8,10,12,13,15,16,17])
    '1,range(2,2),range(8,14,range(15,18)'

    """
    out = []
    for i in ranges(i):
        if type(i) is int:
            out.append(str(i))
        elif i[-1] == 1:
            if i[0] == 0:
                out.append('range(%s)'%(i[1] + 1))
            else:
                out.append('range(%s,%s)'%(i[0],i[1] + 1))
        else:
            out.append('range(%s,%s,i[1] + i[2],i[2]))
    return ','.join(out)
,

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

app / 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>

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

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

本文链接:https://www.f2er.com/2996516.html

大家都在问