AVPlayer - 如何以编程方式转换来自 HTTP 实时流视频 on/off 的 CC?

AVPlayer - how to turn CC coming from HTTP Live Streaming video on/off programatically?

我正在尝试创建一个自定义视频播放器。我正在使用 SwiftUI(v1 和 XCode 11.5)并试图让用户选择是否打开 on/off CC 并选择所需的语言。

如何才能做到这一点?到目前为止,我尝试过的是将 AVPlayerappliesMediaSelectionCriteriaAutomatically 属性 设置为 true.如果从我的 iPhone 的 Accessibility 设置中启用,则显示 CC。

avPlayer.appliesMediaSelectionCriteriaAutomatically = true

我也尝试通过将其设置为 false 来忽略系统偏好设置,然后使用 isClosedCaptionDisplayEnabled 属性 来启用 CC,但它没有达到我预期的效果(isClosedCaptionDisplayEnabled 也被弃用)。

avPlayer.appliesMediaSelectionCriteriaAutomatically = false
avPlayer.isClosedCaptionDisplayEnabled = true

但是我需要它们 shown/hidden 编程(例如当按下按钮时)并且应该忽略关于字幕的 OS' 设置.我也想选择 CC 的 language。这甚至可以实现吗?

注意:如果重要的话,我正在播放的视频是从 Vimeo 流式传输的。

首先,您应该从您的流中获取所有可用的 CC,然后 select 您需要的一个,例如:

let asset = player.currentItem?.asset
if let group = asset?.mediaSelectionGroup(forMediaCharacteristic: .legible) {
    let listCC = group.options
    if let firstCC = listCC.first {
        player.currentItem?.select(firstCC, in: group)
    }
}

如果要禁用 CC,只需调用:

player.currentItem?.select(nil, in: group)