1

我想使用 AVPlayer 从互联网流式传输 .mp3

[[AVPlayer alloc] initWithURL:url];

除了我无法判断播放器是正在加载(缓冲)还是正在播放之外,这一切都有效?我尝试在许多属性上使用 KVO,但似乎没有一个可以为我提供一种简单的方法来确定 AVPlayer 当前是否正在播放音频或是否正在加载数据。它快把我逼疯了。

提前感谢您的建议

4

1 回答 1

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.
于 2013-10-20T01:58:33.167 回答