Ios 了解AVPlayer是否正在从internet加载或播放mp3
我想用AVPlayer从互联网上播放.mp3Ios 了解AVPlayer是否正在从internet加载或播放mp3,ios,avplayer,Ios,Avplayer,我想用AVPlayer从互联网上播放.mp3 [[AVPlayer alloc] initWithURL:url]; 这一切都离不开一个事实,即我无法判断玩家是在加载(缓冲)还是在玩? 我曾尝试在许多属性上使用KVO,但似乎没有一个属性能为我提供一种简单的方法来确定AVPlayer当前是否正在播放音频或是否正在加载数据。它快把我逼疯了 提前感谢您的建议您可以通过创建定期时间观察(使用addPeriodicTimeObserverForInterval:queue:usingBlock:)来检测
[[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.
什么是playerTimeObserverToken方法?@BrandonA它只是self上的一个属性,用于跟踪观察者标记,以便在调用块时使用。我已经更新了示例以澄清。