在 iOS AVPlayer 中,似乎缺少 addPeriodicTimeObserverForInterval
In iOS AVPlayer, addPeriodicTimeObserverForInterval seems to be missing
我正在尝试设置 AVPlayer.addPeriodicTimeObserverForInterval()
。有人用过这个成功吗?
我正在使用 Xcode 8.1,Swift 3
它也在文档中,例如检查这个代码片段
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
...
}
我正在尝试设置 AVPlayer.addPeriodicTimeObserverForInterval()
。有人用过这个成功吗?
我正在使用 Xcode 8.1,Swift 3
它也在文档中,例如检查这个代码片段
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
...
}