AVPlayer,播放/暂停状态的通知?

时间:2011-09-27 20:50:25

标签: ios avplayer

我正在寻找一种方法来获知AVPlayer开始播放的确切时刻。有“费率”属性,但目前我正在定期检查NSTimer以获取更新。

我试过KVO,但显然它不符合KVO。

我知道玩家events时有ENDED。但我在这里谈论暂停。

我也是KVO订阅了AVPlayerItem's“状态”,但它显示了HTTP资产何时完成缓存,没有播放/暂停。我也开始收集播放/暂停的所有调用,之后请求即时UI更新,但在AVPlayer真正开始播放之前需要更多的runloops。我只是想立即更新我的按钮

5 个答案:

答案 0 :(得分:47)

为什么你说“费率”不是KVO投诉? 它对我有用。

这是我做的:

- (void)viewDidLoad
{
    ...

    [self.player addObserver:self forKeyPath:@"rate" options:0 context:nil];
}

然后:

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
if ([keyPath isEqualToString:@"rate"]) {
    if ([self.player rate]) {
        [self changeToPause];  // This changes the button to Pause
    }
    else {
        [self changeToPlay];   // This changes the button to Play
    }
}
}

答案 1 :(得分:14)

对于i OS 10 以上您可以检查AVPlayer的新属性 timeControlStatus

if(avPlayerObject.timeControlStatus==AVPlayerTimeControlStatusPaused)
{
//Paused mode
}
else if(avPlayerObject.timeControlStatus==AVPlayerTimeControlStatusPlaying)
{
 //Play mode
}

答案 2 :(得分:6)

AVPalyer作为默认观察者来跟踪视频的当前持续时间,当您暂停或恢复视频时,您可以通过使用一个全局变量(内部观察者更新该变量)获得暂停时间

CMTime间隔= CMTimeMake(1,1);

.bloc > svg

答案 3 :(得分:0)

    player = AVPlayer(url: URL(fileURLWithPath: path))
player.addObserver(self, forKeyPath: "rate", options: NSKeyValueObservingOptions.new, context: nil)

override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
    if keyPath == "rate" {
        if player.rate > 0 {
            print("video started")
        }
    }
}

迅速

答案 4 :(得分:0)

1)将以下(观察者)代码添加到您的avPlayer对象中

self.player?.addObserver(self, forKeyPath: "rate", options: [], context: nil)

2)和下面的代表

override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
        if (keyPath == "rate") {
            if ((player?.rate) == 1) {
                print("Plyaing")

            } else {
                print("Pause")
            }
        }
    }