在AVPlayer中启用/禁用隐藏式字幕

时间:2018-12-14 23:47:55

标签: ios avfoundation avplayer

问题:

当iPad / iPhone启用了“设置/常规/辅助功能/隐藏式字幕+ SDH ”时,无法使用selectMediaOption:inMediaSelectionGroup:禁用隐藏式字幕。禁用此设备设置后,可以使用selectMediaOption:inMediaSelectionGroup:在应用程序中启用/禁用隐藏式字幕。添加self.player.view.player.appliesMediaSelectionCriteriaAutomatically = FALSE;对观察到的应用程序行为没有影响。

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

如果希望设备设置始终覆盖应用程序设置,那么我希望行为保持一致,即应用程序将永远无法覆盖设备设置。

我的问题是:

  1. 应用程序是否有望覆盖设备的隐藏字幕设置?
  2. 如果允许应用程序覆盖设备设置,那么如何以确定性的方式来实现(相对于我所看到的非确定性的行为)?

观察

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

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

  1. 提供给函数的选项的值为预期的空值
  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. 调用selectMediaOption:inMediaSelectionGroup:后的AVMediaSelectionOption的值为空

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

相关帖子:

1 个答案:

答案 0 :(得分:1)

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