AVPlayerItemDidPlayToEndTime

AVPlayerItemDidPlayToEndTime

我正在将我的应用程序适应Swift 3,但遇到了这个问题。这曾经可以在Swift 2.2上运行,但是现在坏了。 moviePlayBackFinished永远不会被调用。我尝试以多种方式添加观察者,但都没有成功。

    NotificationCenter.default.addObserver(self, selector: #selector(self.moviePlayBackFinished(_:)),
                                           name: NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: player.currentItem);

    NotificationCenter.default.addObserver(self, selector: #selector(moviePlayBackFinished(_:)),
                                           name: NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: player.currentItem);

    NotificationCenter.default.addObserver(self, selector: #selector(self.moviePlayBackFinished(sender:)),
                                           name: NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: player.currentItem);

// (...)

@objc func moviePlayBackFinished(sender : AnyObject) {
    print("playbackFinished");
    let zeroCM : CMTime = CMTime(seconds: 0, preferredTimescale: 1000000000);
    playerLayer.player?.seek(to: zeroCM);
}

@objc func moviePlayBackFinished(_ notification: Notification) {
    print("playbackFinished");
    let zeroCM : CMTime = CMTime(seconds: 0, preferredTimescale: 1000000000);
    playerLayer.player?.seek(to: zeroCM);
}

任何想法都会被应用。

谢谢

最佳答案

此问题有多种可能的原因。

NotificationCenter
    .default
    .addObserver(self,
                 selector: #selector(self.moviePlayBackFinished(sender:)),
                 name: .AVPlayerItemDidPlayToEndTime,
                 object: player.currentItem)
首先,您必须将object设置为nil。 AVPlayerItemDidPlayToEndTime通知会自动将对象设置为最后到达的AVPlayerItem。如果手动更改它,将不会收到AVPlayerItemDidPlayToEndTime的任何通知。
其次,根据AVPlayerItemDidPlayToEndTime文档:

因此,请确保您应该检查通知是否在所需的线程上。
没关系,您从UIViewControllerAVPlayer子类中添加了观察者。

10-06 01:10