如何使用 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) }
广告