【发布时间】:2016-11-07 18:43:59
【问题描述】:
我正在尝试设置AVPlayer.addPeriodicTimeObserverForInterval()。有人用过成功吗?
我正在使用 Xcode 8.1、Swift 3
【问题讨论】:
我正在尝试设置AVPlayer.addPeriodicTimeObserverForInterval()。有人用过成功吗?
我正在使用 Xcode 8.1、Swift 3
【问题讨论】:
接受的答案让人觉得您可以将返回值分配给局部变量并忽略它。但根据doc,实际上重要的是保持对返回值和removeTimeObserver(_ :) 的强引用。
只要您希望播放器调用时间观察器,就必须保持对返回值的强引用。此方法的每次调用都应与相应的调用配对 removeTimeObserver(:) .释放观察者对象而不调用 removeTimeObserver(:) 将导致未定义的行为。
所以我会这样做:
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
...
}
【讨论】:
addPeriodicTimeObserver 指定的块。这通常是视图控制器,就我而言,是视图控制器。如果视图控制器在此之前被解除/释放,无论您是否释放观察者,它都会崩溃。我没有找到另一种方法(玩队列等)
在文档中也有例如检查这个代码sn-p
let timeObserverToken = player.addPeriodicTimeObserver(forInterval: interval, queue: DispatchQueue.main) { [unowned self] time in
}
引用自here
【讨论】: