如何使用 Swift 检测 AVPlayer 视频播放结束?


要检测 Swift 中视频的结束,我们需要创建一个视频播放器,然后使用通知来检测视频何时停止播放。我们将通过 Swift 中的一个示例来演示这一点。

让我们创建一个项目,并将任何扩展名为“mp4”的视频拖放到项目中,如果需要,选择复制资源并添加到项目的 Target。

现在,我们将以编程方式首先创建一个视频播放器,然后创建项目中视频的 URL,然后播放视频。

var videoPlayer: AVPlayer!

现在,在 viewDidAppear 中添加以下代码。

override func viewDidAppear(_ animated: Bool) {
   super.viewDidAppear(animated)
   let filepath: String? = Bundle.main.path(forResource: "Introduction", ofType: "mp4")
   if let videoPath = filepath {
      let url = URL.init(fileURLWithPath: videoPath)
      videoPlayer = AVPlayer(url: url)
      let playerLayer = AVPlayerLayer(player: videoPlayer)
      playerLayer.frame = self.view.bounds
      self.view.layer.addSublayer(playerLayer)
      videoPlayer.play()
   }
}

以上代码将创建一个视频播放器,并将其作为子层添加到视图控制器中默认视图。

现在我们需要为播放器添加一个观察者,并创建一个当检测到视频结束时应调用的观察者方法。将下面的代码块添加到 viewDidAppear 方法中。

NotificationCenter.default.addObserver(self, selector: #selector(videoDidEnd), name:
NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: nil)

现在我们还需要编写 videoDidEnd 方法,在这个方法中,您可以执行任何您想要的动作,现在,当视频结束并且通知中心调用此方法时,我们只打印“video ended”。

@objc func videoDidEnd(notification: NSNotification) {
   print("video ended")
}

当我们运行此代码时,我们将获得以下结果。

视频停止播放后,我们在控制台中得到输出。

现在,以上代码为我们完成了所需的操作,但为了提高内存使用效率,我们还需要移除观察者,这可以通过以下代码完成。

deinit {
   NotificationCenter.default.removeObserver(self)
}

更新于: 2019-07-30

2K+ 次浏览

启动您的 职业生涯

通过完成课程获得认证

开始学习
广告