使用AVPlayerViewController
时,系统允许用户选择字幕是使用特定语言off
还是设置为auto
。设置requiresFullSubtitles
属性我可以强制显示字幕,但这不是我想要的。
有没有办法检测用户为字幕设置选择了什么,是否选择了某种语言,off
还是auto
?
答案 0 :(得分:1)
您可以获取当前选定的语言选项&当它用于设置字幕或音轨时,也会抓取语言信息,如" Adding Subtitles and Alternative Audio Tracks."
可用字幕&音频轨道在视频资产的availableMediaCharacteristics
数组中找到。
他们是AVMediaSelectionGroup
还是AVMediaCharacteristicAudible
...
AVMediaCharacteristicLegible
中
`func selectedMediaOption(in mediaSelectionGroup: AVMediaSelectionGroup) -> AVMediaSelectionOption?`
它可以返回nil
所以"无,"或者它将返回选择的任何语言。因此,您可以设置一些自定义' 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)
}
}
答案 1 :(得分:1)
mc01的答案是正确的,但是如果你想要一个Swift 4的剪切和粘贴解决方案,那么最后的结果是:
var selectedSubtitleLocale: Locale?
fileprivate func detectSubtitleLanguage() {
var locale: Locale?
if let playerItem = player?.currentItem,
let group = playerItem.asset.mediaSelectionGroup(forMediaCharacteristic: AVMediaCharacteristic.legible) {
let selectedOption = playerItem.currentMediaSelection.selectedMediaOption(in: group)
locale = selectedOption?.locale
}
selectedSubtitleLocale = locale
}