首页 > 解决方案 > 在 AVPlayer 中启用/禁用隐藏式字幕

问题描述

问题:

当 iPad/iPhone 具有Settings/General/Accessibility/Closed Captioning + SDH启用时,无法使用selectMediaOption:inMediaSelectionGroup:. 禁用此设备设置后,可以使用selectMediaOption:inMediaSelectionGroup:. 添加self.player.view.player.appliesMediaSelectionCriteriaAutomatically = FALSE;对观察到的应用程序行为没有影响。

这个问题的有趣之处在于,有时应用程序会成功启用/禁用字幕。其他时候不是。

如果期望设备设置总是覆盖应用程序设置,那么我希望行为是一致的,即应用程序永远无法覆盖设备设置。

我的问题是:

  1. 应用程序是否可以覆盖设备的隐藏式字幕设置?
  2. 如果允许应用程序覆盖设备设置,如何以确定性方式完成此操作(与我看到的非确定性行为相比)?

观察:

记录提供给 的值selectMediaOption:inMediaSelectionGroup:以及相关设置的之前/之后值,显示预期结果。即,提供给函数的参数是正确的,并且对基础设置的影响是预期的。

预计禁用字幕时,日志会显示以下内容:

  1. 提供给函数的选项的值如预期的那样为 null
  2. AVMediaSelectionOption的当前值为<AVMediaSelectionKeyValueOption: 0x28188fb00, language = (null), mediaType = 'clcp', tagged media characteristics = {public.accessibility.transcribes-spoken-dialog, public.accessibility.describes-music-and-sound}, default = YES>
  3. AVMediaSelectionOption调用 selectMediaOption:inMediaSelectionGroup: 后的值为null

日志显示,启用隐藏式字幕时,情况正好相反。

相关文章:

标签: iosavfoundationavplayer

解决方案


虽然不完全是答案,但我能够追踪问题的原因。我为大多数(但不是全部) AVPlayer 交互使用了外部库。事实证明,它具有干扰 AVPlayer 行为的类似功能。有趣的是,如果我selectMediaOption:inMediaSelectionGroup:在外部库中调用 AVPlayer 函数(例如 )和相关函数,它就可以工作。这两个函数都不能单独工作,都必须调用。


推荐阅读