Computer >> Máy Tính >  >> Lập trình >> IOS

Làm thế nào để sử dụng Swift để phát hiện khi video AVPlayer kết thúc phát?

Để phát hiện nhanh phần cuối của video, chúng tôi cần tạo trình phát video, sau đó sử dụng thông báo để phát hiện khi nào video ngừng phát. Chúng tôi sẽ nhanh chóng thực hiện việc này với sự trợ giúp của một ví dụ.

Hãy tạo một dự án và kéo và thả bất kỳ video nào có phần mở rộng là “mp4”, chọn tài nguyên sao chép nếu cần và thêm vào mục tiêu của dự án của chúng ta.

Bây giờ, trước tiên chúng tôi sẽ tạo một Trình phát video theo chương trình, sau đó chúng tôi sẽ tạo url của video trong dự án của mình và sau đó chúng tôi sẽ phát video.

var videoPlayer: AVPlayer!

Bây giờ, trong viewDidAppear, hãy thêm mã sau.

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()
   }
}

Đoạn mã trên sẽ tạo một trình phát video và thêm nó làm lớp con vào chế độ xem mặc định của chúng tôi trong bộ điều khiển chế độ xem.

Bây giờ chúng ta cần thêm một người quan sát vào trình phát của mình, đồng thời tạo một phương thức người quan sát sẽ được gọi khi nó phát hiện ra phần cuối của video. Thêm khối mã bên dưới vào phương thức viewDidAppear.

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

Bây giờ chúng ta cũng cần viết phương thức videoDidEnd, Bên trong phương thức này, bạn có thể thực hiện bất kỳ hành động nào bạn muốn, hiện tại, chúng tôi sẽ chỉ in "video đã kết thúc" khi video kết thúc và trung tâm thông báo gọi phương thức này.

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

Khi chúng tôi chạy mã này, chúng tôi nhận được kết quả sau.

Làm thế nào để sử dụng Swift để phát hiện khi video AVPlayer kết thúc phát?

Sau khi video ngừng phát, chúng tôi nhận được đầu ra trong bảng điều khiển của mình.

Làm thế nào để sử dụng Swift để phát hiện khi video AVPlayer kết thúc phát?

Bây giờ, đoạn mã trên thực hiện những việc cần thiết đối với chúng ta, nhưng để sử dụng bộ nhớ hiệu quả, chúng ta cũng cần xóa trình quan sát, có thể thực hiện bằng đoạn mã bên dưới.

deinit {
   NotificationCenter.default.removeObserver(self)
}