AVPlayerItem 的 selectedMediaOption(in:) 与 seek(to:) 调用后的可用选择选项不一致

Posted

技术标签:

【中文标题】AVPlayerItem 的 selectedMediaOption(in:) 与 seek(to:) 调用后的可用选择选项不一致【英文标题】:AVPlayerItem's selectedMediaOption(in:) disagrees with available selection options following seek(to:) call 【发布时间】:2018-07-09 21:52:55 【问题描述】:

我在AVAsset 上的loadValuesAsynchronously(forKeys:) 的完成块中遇到AVFoundation 的一个奇怪问题,键为"availableMediaCharacteristicsWithMediaSelectionOptions",我正在检查组中可用媒体选择选项的值.legible 特征,以及该组中当前选择的媒体选项(通过selectedMediaOption(in: group)。当我打印这些输出时,我得到以下输出(数组是可用的选择选项,然后是当前选择):

(
    "<AVMediaSelectionKeyValueOption: 0x60c002078380, language = en-IE, mediaType = 'sbtl', title = English+(Ireland)>",
    "<AVMediaSelectionKeyValueOption: 0x60c002078440, language = ab, mediaType = 'sbtl', tagged media characteristics = public.accessibility.transcribes-spoken-dialog, public.accessibility.describes-music-and-sound, title = Abkhazian>"
)
<AVMediaSelectionKeyValueOption: 0x60c00207b640, language = en-IE, mediaType = 'sbtl', title = English+(Ireland)>

如您所见,所选选项与数组中的en-IE 选项具有相同的信息,但由于地址不同,它实际上是一个不同的AVMediaSelectionOption 实例。这会在 AVPlayerItem 对象的状态更改后立即发生,以防影响任何事情。选择的选项稍后会更新吗?有没有人看起来像这样?

【问题讨论】:

【参考方案1】:

所以看起来答案是AVMediaSelectionGroup(以及它包含的AVMediaSelectionOptions)的身份随着对.mediaSelectionGroup(forMediaCharacteristic:) 的每次调用而改变。这意味着即使该组将包含所有相同的信息,它也不会是与上一次调用中的实例相同的实例。

【讨论】:

以上是关于AVPlayerItem 的 selectedMediaOption(in:) 与 seek(to:) 调用后的可用选择选项不一致的主要内容,如果未能解决你的问题,请参考以下文章

为啥 AVPlayerItem 不触发它的通知?

AVPlayerItem 暂停直播 URL?

无法导出 AVPlayerItem

avplayeritem 总是处于未知状态

使用 AVPlayer、AVPlayerItem 和 AVPlayerAsset 有啥区别吗?

如何正确删除/释放 AVPlayer/AVPlayerItem?