ios - 在 AVPlayer 中启用/禁用隐藏式字幕
问题描述
问题:
当 iPad/iPhone 具有Settings/General/Accessibility/Closed Captioning + SDH启用时,无法使用selectMediaOption:inMediaSelectionGroup:
. 禁用此设备设置后,可以使用selectMediaOption:inMediaSelectionGroup:
. 添加self.player.view.player.appliesMediaSelectionCriteriaAutomatically = FALSE;
对观察到的应用程序行为没有影响。
这个问题的有趣之处在于,有时应用程序会成功启用/禁用字幕。其他时候不是。
如果期望设备设置总是覆盖应用程序设置,那么我希望行为是一致的,即应用程序永远无法覆盖设备设置。
我的问题是:
- 应用程序是否可以覆盖设备的隐藏式字幕设置?
- 如果允许应用程序覆盖设备设置,如何以确定性方式完成此操作(与我看到的非确定性行为相比)?
观察:
记录提供给 的值selectMediaOption:inMediaSelectionGroup:
以及相关设置的之前/之后值,显示预期结果。即,提供给函数的参数是正确的,并且对基础设置的影响是预期的。
预计禁用字幕时,日志会显示以下内容:
- 提供给函数的选项的值如预期的那样为 null
AVMediaSelectionOption
的当前值为<AVMediaSelectionKeyValueOption: 0x28188fb00, language = (null), mediaType = 'clcp', tagged media characteristics = {public.accessibility.transcribes-spoken-dialog, public.accessibility.describes-music-and-sound}, default = YES>
AVMediaSelectionOption
调用 selectMediaOption:inMediaSelectionGroup: 后的值为null
日志显示,启用隐藏式字幕时,情况正好相反。
相关文章:
解决方案
虽然不完全是答案,但我能够追踪问题的原因。我为大多数(但不是全部) AVPlayer 交互使用了外部库。事实证明,它具有干扰 AVPlayer 行为的类似功能。有趣的是,如果我selectMediaOption:inMediaSelectionGroup:
在外部库中调用 AVPlayer 函数(例如 )和相关函数,它就可以工作。这两个函数都不能单独工作,都必须调用。
推荐阅读
- c++ - c++中的异常处理错误
- crystal-reports - 将当前日期转换为第 n 个日期
- google-cloud-platform - Google Cloud 上的错误 - 基因组学:“未找到服务名称的 API 解决方案:基因组学”
- r - 当数据集在 sparklyr 中时,为什么我不能在 dplyr 中使用双冒号运算符?
- javascript - 与单击的 td 相比,如何选择第一个 td
- jquery - 根据下拉选择启用对话框按钮
- target - 比特币源代码中的矿池难度(pdiff)在哪里以及如何设置?
- c++ - 在 C++ 代码中“就地”从 C 样式字符串中删除子字符串
- android - Android Studio 无法连接到 mysql
- sql - 将多个期间分组为一个期间