我想使用 AVPlayer 从互联网流式传输 .mp3
[[AVPlayer alloc] initWithURL:url];
除了我无法判断播放器是正在加载(缓冲)还是正在播放之外,这一切都有效?我尝试在许多属性上使用 KVO,但似乎没有一个可以为我提供一种简单的方法来确定 AVPlayer 当前是否正在播放音频或是否正在加载数据。它快把我逼疯了。
提前感谢您的建议
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.