我想使用AVPlayer从互联网流式传输.mp3
[[AVPlayer alloc] initWithURL:url];
这一切都与我无法判断玩家是在加载(缓冲)还是在玩? 我曾尝试在许多属性上使用KVO,但似乎没有一个方法能够让我找到一种简单的方法来确定AVPlayer当前是否正在播放音频或是否正在加载数据。这让我疯了。
提前感谢您的建议
答案 0 :(得分:2)
通过创建定期时间观察(使用addPeriodicTimeObserverForInterval:queue:usingBlock:
)来检测播放时间何时开始移动,您可以检测何时完成缓冲并开始播放。例如:
AVPlayer *player;
// allocate AVPlayer and start playing
__weak PlayerController *blockSelf = self;
id observerToken = [player addPeriodicTimeObserverForInterval:CMTimeMakeWithSeconds(1.0, NSEC_PER_SEC)
queue:nil
usingBlock:^ (CMTime time)
{
if (CMTimeGetSeconds(time) > 0.0)
{
// done buffering, should be playing now
[player removeTimeObserver:[blockSelf playerTimeObserverToken]];
[blockSelf setPlayerTimeObserverToken:observerToken:nil];
}
}];
[self setPlayerTimeObserverToken:observerToken]; // Keep a reference to the token for later use in block.