在iOS AVPlayer中,似乎缺少addPeriodicTimeObserverForInterval

时间:2016-11-07 18:44:00

标签: ios swift xcode avplayer

我试图设置AVPlayer.addPeriodicTimeObserverForInterval()。有没有人成功使用过这个?

我正在使用Xcode 8.1,Swift 3

2 个答案:

答案 0 :(得分:6)

接受的答案让您觉得可以将返回值分配给局部变量并忽略它。但是根据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
    ...
}

答案 1 :(得分:2)

选中此func addPeriodicTimeObserver(forInterval interval: CMTime, queue: DispatchQueue?, using block: @escaping (CMTime) -> Void) -> Any

例如,在文档中也可以查看此代码片段

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

引自here