Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> IOS

วิธีใช้ Swift เพื่อตรวจจับเมื่อวิดีโอ AVPlayer สิ้นสุดการเล่น


ในการตรวจหาจุดสิ้นสุดของวิดีโออย่างรวดเร็ว เราจะต้องสร้างโปรแกรมเล่นวิดีโอ จากนั้นใช้การแจ้งเตือนเพื่อตรวจจับเมื่อวิดีโอหยุดเล่น เราจะทำสิ่งนี้ด้วยความช่วยเหลือจากตัวอย่างอย่างรวดเร็ว

มาสร้างโปรเจ็กต์แล้วลากและวางวิดีโอที่มีนามสกุล “mp4” เลือกคัดลอกทรัพยากรหากต้องการ และเพิ่มไปยังเป้าหมายของโปรเจ็กต์ของเรา

ตอนนี้ เราจะสร้างโปรแกรมเล่นวิดีโอโดยทางโปรแกรมก่อน จากนั้นจึงสร้าง 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 ด้วย ภายในวิธีนี้ คุณสามารถดำเนินการใดๆ ที่คุณต้องการได้ สำหรับตอนนี้ เราจะพิมพ์ “วิดีโอสิ้นสุด” เมื่อวิดีโอสิ้นสุด และศูนย์การแจ้งเตือนเรียกวิธีนี้

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

เมื่อเรารันโค้ดนี้ เราจะได้ผลลัพธ์ดังต่อไปนี้

วิธีใช้ Swift เพื่อตรวจจับเมื่อวิดีโอ AVPlayer สิ้นสุดการเล่น

เมื่อวิดีโอหยุดเล่น เราก็จะได้รับเอาต์พุตในคอนโซลของเรา

วิธีใช้ Swift เพื่อตรวจจับเมื่อวิดีโอ AVPlayer สิ้นสุดการเล่น

ตอนนี้ โค้ดด้านบนทำหน้าที่ที่จำเป็นสำหรับเรา แต่สำหรับการใช้หน่วยความจำอย่างมีประสิทธิภาพ เราต้องลบผู้สังเกตการณ์ออกด้วย ซึ่งสามารถทำได้โดยใช้โค้ดด้านล่าง

deinit {
   NotificationCenter.default.removeObserver(self)
}