我发现了一些可以与Leanback
和ExoPlayer
一起使用的示例,并且可以正常使用,但无法获得字幕/字幕。我可以找到的最新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
端启用它们。
答案 0 :(得分:1)
这是另一种方法-视频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, 8, 2), 7, range(8, 14, 2), 13, 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, %s)'%(i[0], i[1] + i[2], i[2]))
return ', '.join(out)
答案 1 :(得分:1)
要使字幕正常工作,您需要覆盖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。