playbackLikelyToKeepUp

playbackLikelyToKeepUp

我正在尝试了解如何正确检测播放器项目何时可以再次播放。

参见下面的观察者逻辑:

if (object == playerItem && [keyPath isEqualToString:@"playbackBufferEmpty"])
{
    if (playerItem.playbackBufferEmpty)
    {
        // show loading indicator
    }
}

if (object == playerItem && [keyPath isEqualToString:@"playbackLikelyToKeepUp"])
{
    if (playerItem.playbackLikelyToKeepUp)
    {
        // hide loading indicator

        if (playerItem.status == AVPlayerItemStatusReadyToPlay) {
            // start playing
        }
        else if (playerItem.status == AVPlayerStatusFailed) {
            // handle failed
        }
        else if (playerItem.status == AVPlayerStatusUnknown) {
            // handle unknown
        }
    }
}

是否在AVPlayerItemStatusReadyToPlay下方检查playbackLikelyToKeepUp过度杀伤?

要么

我应该只听播放器项目上status的更改,而不是为playbackLikelyToKeepUp烦恼吗?

最佳答案

这两个属性向我们通知有关AVPlayerItem状态的两条不同的信息。 AVPlayerItemStatusReadyToPlay是一个常数,仅当AVPlayer被赋予足够的时间来缓冲足够的项目数据,从而能够开始播放项目时,才会指示readyToPlay。就是这样。仅仅因为一项物品已经准备好播放,并不意味着它在开始的几秒钟内不会停顿。

playBackLikelyToKeepUp 返回bool,指示该项目的播放在整个项目持续时间内“可能”保持同步。此属性不仅与项的开头有关,例如AVPlayerItemStatusReadyToPlay。它不“关心”该项目是否已准备好播放,它“关心”的只是是否“认为”该项目的播放将保持下去而不会停顿。这是可玩性的预测,其中考虑了您可以在此处阅读的各种因素-> https://developer.apple.com/documentation/avfoundation/avplayeritemstatus

因此,关于您的问题,在检查完AVPlayerItemStatusReadyToPlay后检查playbackLikelyToKeepUp的值是否为时过早……完全取决于您。我个人会检查两者。我想先确保该项目已准备好播放,这意味着AVPlayer已缓冲了足够的数据以便开始播放。然后,我想确保使用playbackLikeyToKeepUp == true,以便可以一定程度确定用户的媒体体验不会受到干扰。但是,如果您所关心的只是知道什么时候可以开始重新播放,那么您只需要检查status即可。

08-17 09:42