我使用ExoPlayer
在我的应用程序中播放视频,我通过一些API端点获取字幕。它们显示得很好,第一个自动选择,但是,当试图禁用subs时,通过单击ExoPlayer
提供的“无”选项,它什么也不做。
下面是我创建SubtitleConfigurations
列表的方法(subs都是.vtt):
val list = arrayListOf<MediaItem.SubtitleConfiguration>()
captions.forEach { caption ->
caption.resourceUrl?.let { url ->
val subtitle = MediaItem.SubtitleConfiguration.Builder(url.toUri())
.setMimeType(MimeTypes.TEXT_VTT)
.setLanguage(caption.lang)
.setSelectionFlags(C.SELECTION_FLAG_DEFAULT)
.build()
list.add(subtitle)
}
}
字幕列表然后像这样被馈送到MediaItem
:
val mediaItem = MediaItem.Builder()
.setUri(url.toUri())
.setSubtitleConfigurations(generateSubtitles())
.build()
with(exoPlayer) {
setMediaItem(mediaItem)
prepare()
play()
}
现在,当视频开始时,它开始启用字幕和无选项,如下所示:
- 无
- 英语
但它就是不能被点击,它什么也不做。
然而,我尝试直接手动添加一个“无”选项到列表中,如下所示:
if (list.isNotEmpty()) {
val noneOption = MediaItem.SubtitleConfiguration.Builder(Uri.EMPTY)
.setLanguage("none")
.setMimeType(MimeTypes.TEXT_VTT)
.build()
list.add(0, noneOption)
}
添加的none选项可以禁用subs,但是,现在字幕对话框列表如下所示:
- 无
- 无
- 英语
并且只有第二个(手动添加的)选项起作用,而不是默认的none。
如何修复第一个“无”选项,或者隐藏它,以便只保留手动“无”选项?
1条答案
按热度按时间z6psavjg1#
如果将来有人遇到这个问题,在我的例子中,导致这个问题的问题是ExoPlayer默认设置了一个首选语言来使用locale,所以它不允许我更改语言。
我解决这个问题的方法是在初始化时覆盖TrackSelector的参数,这样它就没有首选语言了,在下面的行中:
我在
ViewModel
中有ExoPlayer
示例,所以我像这样声明变量:然后我
initialize
他们像这样:希望这能帮上忙