playbackLikelyToKeepUp和AVPlayerItemStatusReadyToPlay之间的区别是什么?

时间:2016-02-05 18:38:59

标签: ios video-streaming avplayer

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

见下面的观察者逻辑:

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来打扰?

1 个答案:

答案 0 :(得分:5)

这两个属性告诉我们有关AVPlayerItem状态的两条不同信息。 AVPlayerItemStatusReadyToPlay是一个常量,只有在AVPlayer有足够的时间缓冲足够的项目数据以便它能够开始播放项目时,才会指示readyToPlay bool。但就是这样。仅仅因为一件物品准备好玩,并不意味着它在最初几秒后就不会失速。

playBackLikelyToKeepUp返回AVPlayerItemStatusReadyToPlay,表示该项目的播放次数为"可能"在整个项目的持续时间内保持。此属性不仅适用于项目的开头,例如AVPlayerItemStatusReadyToPlay。它没有"关心"如果该项目已准备好进行播放,那么所有这些内容都会关注"关注"关于是否是它"认为"该项目的播放将保持不停。这是可玩性的预测,考虑了您可以在这里阅读的各种因素 - > https://developer.apple.com/documentation/avfoundation/avplayeritemstatus

因此,对于您的问题,在您已经检查playbackLikelyToKeepUp之后检查AVPlayer的价值是否过分......这取决于您。我个人会检查两者。我想首先确保该项目已准备好播放,这意味着playbackLikeyToKeepUp == true已经缓冲了足够的数据以便开始播放。然后我想确保status以便我可以确定用户的媒体体验不会被打断。但是,如果你关心的只是知道某个项目何时可以再次开始播放,那么你只需要检查datepicker-options="datepickerOptions"