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 并选择所需的语言。
如何做到这一点?到目前为止,我尝试将 AVPlayer 的 appliesMediaSelectionCriteriaAutomatically 属性设置为 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?的主要内容,如果未能解决你的问题,请参考以下文章