android 无法在ExoPlayer上选择“无”字幕选项

b5lpy0ml  于 2023-03-27  发布在  Android
关注(0)|答案(1)|浏览(209)

我使用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。
如何修复第一个“无”选项,或者隐藏它,以便只保留手动“无”选项?

z6psavjg

z6psavjg1#

如果将来有人遇到这个问题,在我的例子中,导致这个问题的问题是ExoPlayer默认设置了一个首选语言来使用locale,所以它不允许我更改语言。
我解决这个问题的方法是在初始化时覆盖TrackSelector的参数,这样它就没有首选语言了,在下面的行中:
我在ViewModel中有ExoPlayer示例,所以我像这样声明变量:

private val trackSelector = DefaultTrackSelector(App.instance)
private val parametersBuilder = trackSelector.buildUponParameters().apply {
    clearOverridesOfType(C.TRACK_TYPE_TEXT)
    setPreferredTextLanguage(null)
}
private val parameters = parametersBuilder.build()
val exoPlayer: ExoPlayer

然后我initialize他们像这样:

init {
    trackSelector.parameters = parameters
    exoPlayer = ExoPlayer.Builder(App.instance)
        .setTrackSelector(trackSelector)
        .build()
}

希望这能帮上忙

相关问题