AVPlayer - 如何以编程方式打开/关闭来自 HTTP Live Streaming 视频的 CC?

Posted

技术标签:

【中文标题】AVPlayer - 如何以编程方式打开/关闭来自 HTTP Live Streaming 视频的 CC?【英文标题】:AVPlayer - how to turn CC coming from HTTP Live Streaming video on/off programatically? 【发布时间】:2020-07-15 11:22:15 【问题描述】:

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

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

avPlayer.appliesMediaSelectionCriteriaAutomatically = true

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

avPlayer.appliesMediaSelectionCriteriaAutomatically = false
avPlayer.isClosedCaptionDisplayEnabled = true

但是我需要以编程方式显示/隐藏它们(例如按下按钮时),并且应该忽略操作系统关于字幕的设置。我还想选择 CC 的语言。这甚至可以实现吗?

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

【问题讨论】:

【参考方案1】:

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

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)

【讨论】:

感谢您的回答。我真的很难自己浏览文档并找到它。您介意分享一下您是如何获得这些信息的吗? @DI.dev 我多年来一直致力于在 ios 上进行流式播放,最好的信息来源是它的文档、苹果的示例/演示文稿,当然还有 ***) 请注意,mediaSelectionGroup 调用将阻塞当前线程,除非您异步加载了 availableMediaCharacteristicsWithMediaSelectionOptions

以上是关于AVPlayer - 如何以编程方式打开/关闭来自 HTTP Live Streaming 视频的 CC?的主要内容,如果未能解决你的问题,请参考以下文章

打开/关闭监视器

Angular 2材料垫选择以编程方式打开/关闭

如何在 android Pie 和 UP 中以编程方式打开/关闭扬声器

如何以编程方式将 iPhone 中的实时流媒体视频静音

如何以编程方式关闭画中画

以编程方式创建 AVPlayer 会导致不断的 CUIDatalog 警告