如何使用 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+ 次瀏覽

啟動您的 職業生涯

透過完成課程獲得認證

開始學習
廣告