使用 AVPlayerViewController 时如何检测用户选择的字幕

pic*_*ano 6 ios avplayerviewcontroller tvos

使用 时AVPlayerViewController,用户可以选择字幕是使用特定语言off,还是设置为auto。设置requiresFullSubtitles属性我可以强制显示字幕,但这不是我想要的。

有没有办法检测用户为字幕设置选择了什么,是选择了语言off,还是auto

正在播放信息中心

mc0*_*c01 1

您可以获取当前选择的语言选项,也可以在用于设置字幕或音轨时获取语言信息,如“添加字幕和替代音轨”中所述。

availableMediaCharacteristics可用的字幕和音轨可在视频资源的数组中找到。

AVMediaSelectionGroup它们按照是AVMediaCharacteristicAudibleAVMediaCharacteristicLegible...进行分组。

当前选定的选项可通过以下方式找到:

`func selectedMediaOption(in mediaSelectionGroup: AVMediaSelectionGroup) -> AVMediaSelectionOption?`
Run Code Online (Sandbox Code Playgroud)

它可能会返回nil“none”,或者会返回选择的任何语言。因此,您可以在该属性上设置一些自定义的“didChange”侦听器。似乎没有任何形式的公开通知,因此您必须自己制作。

每当您在播放器上选择/设置字幕选项时,您都可以捕获并使用相同的信息来执行您打算用它执行的任何操作:

if let group = asset.mediaSelectionGroup(forMediaCharacteristic: AVMediaCharacteristicLegible) {
    let locale = Locale(identifier: "es-ES")
    let options =
        AVMediaSelectionGroup.mediaSelectionOptions(from: group.options, with: locale)
    if let option = options.first {

        /*** DO WHATEVER YOU WANT HERE AFTER CAPTURING THE LANGUAGE SELECTION  & RETRIEVING AN AVAILABLE SUBTITLE ***/ 

       playerItem.select(option, in: group)
    }
}
Run Code Online (Sandbox Code Playgroud)