我试图了解如何正确检测播放器项目何时可以再次播放。
见下面的观察者逻辑:
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
来打扰?
答案 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"
。