在 iOS AVPlayer 中,似乎缺少 addPeriodicTimeObserverForInterval

In iOS AVPlayer, addPeriodicTimeObserverForInterval seems to be missing

我正在尝试设置 AVPlayer.addPeriodicTimeObserverForInterval()。有人用过这个成功吗?

我正在使用 Xcode 8.1,Swift 3

勾选这个func addPeriodicTimeObserver(forInterval interval: CMTime, 队列:调度队列?, 使用块:@escaping (CMTime) -> Void) -> Any

它也在文档中,例如检查这个代码片段

let timeObserverToken = player.addPeriodicTimeObserver(forInterval: interval, queue: DispatchQueue.main) { [unowned self] time in 
}

引用自here

接受的答案让人觉得您可以将 return 值分配给局部变量并忽略它。但是根据 doc,保持对 return 值和 removeTimeObserver(_ :) 的强引用实际上很重要。

You must maintain a strong reference the returned value as long as you want the time observer to be invoked by the player. Each invocation of this method should be paired with a corresponding call to removeTimeObserver(:) . Releasing the observer object without invoking removeTimeObserver(:) will result in undefined behaviour.

所以我会这样做:

if let ob = self.observer {
    player.removeTimeObserver(ob)
}

let interval = CMTimeMake(1, 4) // 0.25 (1/4) seconds
self.observer = player.addPeriodicTimeObserver(forInterval: interval, queue: DispatchQueue.main) { [weak self] time in
    ...
}